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; |