| Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManager.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManager.java
|
| index db73828e06fd8f8a0c2ac97011dd6becc4222541..07044fe2bbf685b5e74d2c7a6cddf59944660116 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManager.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorSurfaceManager.java
|
| @@ -13,6 +13,8 @@ import android.view.View;
|
| import android.view.ViewGroup;
|
| import android.widget.FrameLayout;
|
|
|
| +import org.chromium.base.annotations.UsedByReflection;
|
| +
|
| /**
|
| * Manage multiple SurfaceViews for the compositor, so that transitions between
|
| * surfaces with and without an alpha channel can be visually smooth.
|
| @@ -33,7 +35,14 @@ import android.widget.FrameLayout;
|
| *
|
| * The full design doc is at https://goo.gl/aAmQzR .
|
| */
|
| -class CompositorSurfaceManager implements SurfaceHolder.Callback {
|
| +class CompositorSurfaceManager implements SurfaceHolder.Callback2 {
|
| + public interface SurfaceHolderCallbackTarget {
|
| + public void surfaceRedrawNeededAsync(SurfaceHolder holder, Runnable drawingFinished);
|
| + public void surfaceChanged(SurfaceHolder holder, int format, int width, int height);
|
| + public void surfaceCreated(SurfaceHolder holder);
|
| + public void surfaceDestroyed(SurfaceHolder holder);
|
| + }
|
| +
|
| private static class SurfaceState {
|
| public SurfaceView surfaceView;
|
|
|
| @@ -53,7 +62,7 @@ class CompositorSurfaceManager implements SurfaceHolder.Callback {
|
| // Parent ViewGroup, or null.
|
| private ViewGroup mParent;
|
|
|
| - public SurfaceState(Context context, int format, SurfaceHolder.Callback callback) {
|
| + public SurfaceState(Context context, int format, SurfaceHolder.Callback2 callback) {
|
| surfaceView = new SurfaceView(context);
|
| surfaceView.setZOrderMediaOverlay(true);
|
| surfaceView.setVisibility(View.VISIBLE);
|
| @@ -109,12 +118,12 @@ class CompositorSurfaceManager implements SurfaceHolder.Callback {
|
| private SurfaceState mRequestedByClient;
|
|
|
| // Client that we notify about surface change events.
|
| - private SurfaceHolder.Callback mClient;
|
| + private SurfaceHolderCallbackTarget mClient;
|
|
|
| // View to which we'll attach the SurfaceView.
|
| private final ViewGroup mParentView;
|
|
|
| - public CompositorSurfaceManager(ViewGroup parentView, SurfaceHolder.Callback client) {
|
| + public CompositorSurfaceManager(ViewGroup parentView, SurfaceHolderCallbackTarget client) {
|
| mParentView = parentView;
|
| mClient = client;
|
|
|
| @@ -254,6 +263,17 @@ class CompositorSurfaceManager implements SurfaceHolder.Callback {
|
| }
|
|
|
| @Override
|
| + public void surfaceRedrawNeeded(SurfaceHolder holder) {
|
| + // Intentionally not implemented.
|
| + }
|
| +
|
| + // TODO(boliu): Mark this override instead.
|
| + @UsedByReflection("Android")
|
| + public void surfaceRedrawNeededAsync(SurfaceHolder holder, Runnable drawingFinished) {
|
| + mClient.surfaceRedrawNeededAsync(holder, drawingFinished);
|
| + }
|
| +
|
| + @Override
|
| public void surfaceCreated(SurfaceHolder holder) {
|
| SurfaceState state = getStateForHolder(holder);
|
| assert state != null;
|
|
|