Merge "[TIAF] Dup AdBuffer early to avoid race conditions" into udc-dev am: 3e143396ac

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23420990

Change-Id: Ie06aa5afc7da86dae3e953768811f25d62dfce74
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Shubang Lu
2023-05-26 01:10:00 +00:00
committed by Automerger Merge Worker
2 changed files with 26 additions and 3 deletions

View File

@@ -63,6 +63,7 @@ import android.widget.FrameLayout;
import com.android.internal.os.SomeArgs;
import com.android.internal.util.Preconditions;
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
@@ -1009,6 +1010,13 @@ public abstract class TvInputService extends Service {
* @param buffer the {@link AdBuffer} that was consumed.
*/
public void notifyAdBufferConsumed(@NonNull AdBuffer buffer) {
AdBuffer dupBuffer;
try {
dupBuffer = AdBuffer.dupAdBuffer(buffer);
} catch (IOException e) {
Log.w(TAG, "dup AdBuffer error in notifyAdBufferConsumed:", e);
return;
}
executeOrPostRunnableOnMainThread(new Runnable() {
@MainThread
@Override
@@ -1016,10 +1024,14 @@ public abstract class TvInputService extends Service {
try {
if (DEBUG) Log.d(TAG, "notifyAdBufferConsumed");
if (mSessionCallback != null) {
mSessionCallback.onAdBufferConsumed(buffer);
mSessionCallback.onAdBufferConsumed(dupBuffer);
}
} catch (RemoteException e) {
Log.w(TAG, "error in notifyAdBufferConsumed", e);
} finally {
if (dupBuffer != null) {
dupBuffer.getSharedMemory().close();
}
}
}
});

View File

@@ -1964,6 +1964,13 @@ public abstract class TvInteractiveAppService extends Service {
*/
@CallSuper
public void notifyAdBufferReady(@NonNull AdBuffer buffer) {
AdBuffer dupBuffer;
try {
dupBuffer = AdBuffer.dupAdBuffer(buffer);
} catch (IOException e) {
Log.w(TAG, "dup AdBuffer error in notifyAdBufferReady:", e);
return;
}
executeOrPostRunnableOnMainThread(new Runnable() {
@MainThread
@Override
@@ -1974,10 +1981,14 @@ public abstract class TvInteractiveAppService extends Service {
"notifyAdBufferReady(buffer=" + buffer + ")");
}
if (mSessionCallback != null) {
mSessionCallback.onAdBufferReady(AdBuffer.dupAdBuffer(buffer));
mSessionCallback.onAdBufferReady(dupBuffer);
}
} catch (RemoteException | IOException e) {
} catch (RemoteException e) {
Log.w(TAG, "error in notifyAdBuffer", e);
} finally {
if (dupBuffer != null) {
dupBuffer.getSharedMemory().close();
}
}
}
});