Merge "[TIAF] Dup AdBuffer early to avoid race conditions" into udc-dev
This commit is contained in:
@@ -63,6 +63,7 @@ import android.widget.FrameLayout;
|
|||||||
import com.android.internal.os.SomeArgs;
|
import com.android.internal.os.SomeArgs;
|
||||||
import com.android.internal.util.Preconditions;
|
import com.android.internal.util.Preconditions;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -1009,6 +1010,13 @@ public abstract class TvInputService extends Service {
|
|||||||
* @param buffer the {@link AdBuffer} that was consumed.
|
* @param buffer the {@link AdBuffer} that was consumed.
|
||||||
*/
|
*/
|
||||||
public void notifyAdBufferConsumed(@NonNull AdBuffer buffer) {
|
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() {
|
executeOrPostRunnableOnMainThread(new Runnable() {
|
||||||
@MainThread
|
@MainThread
|
||||||
@Override
|
@Override
|
||||||
@@ -1016,10 +1024,14 @@ public abstract class TvInputService extends Service {
|
|||||||
try {
|
try {
|
||||||
if (DEBUG) Log.d(TAG, "notifyAdBufferConsumed");
|
if (DEBUG) Log.d(TAG, "notifyAdBufferConsumed");
|
||||||
if (mSessionCallback != null) {
|
if (mSessionCallback != null) {
|
||||||
mSessionCallback.onAdBufferConsumed(buffer);
|
mSessionCallback.onAdBufferConsumed(dupBuffer);
|
||||||
}
|
}
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.w(TAG, "error in notifyAdBufferConsumed", e);
|
Log.w(TAG, "error in notifyAdBufferConsumed", e);
|
||||||
|
} finally {
|
||||||
|
if (dupBuffer != null) {
|
||||||
|
dupBuffer.getSharedMemory().close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1964,6 +1964,13 @@ public abstract class TvInteractiveAppService extends Service {
|
|||||||
*/
|
*/
|
||||||
@CallSuper
|
@CallSuper
|
||||||
public void notifyAdBufferReady(@NonNull AdBuffer buffer) {
|
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() {
|
executeOrPostRunnableOnMainThread(new Runnable() {
|
||||||
@MainThread
|
@MainThread
|
||||||
@Override
|
@Override
|
||||||
@@ -1974,10 +1981,14 @@ public abstract class TvInteractiveAppService extends Service {
|
|||||||
"notifyAdBufferReady(buffer=" + buffer + ")");
|
"notifyAdBufferReady(buffer=" + buffer + ")");
|
||||||
}
|
}
|
||||||
if (mSessionCallback != null) {
|
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);
|
Log.w(TAG, "error in notifyAdBuffer", e);
|
||||||
|
} finally {
|
||||||
|
if (dupBuffer != null) {
|
||||||
|
dupBuffer.getSharedMemory().close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user