Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java |
index 49d94a65db23ae1f957b81169c0e7a1cd290ba69..c3eed60d43fe3a069cb7f7f1a9b752b9b525a76c 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java |
@@ -115,6 +115,7 @@ public class CompositorViewHolder extends CoordinatorLayout |
private View mView; |
private TabObserver mTabObserver; |
+ private FrameObserver mFrameObserver; |
private boolean mEnableCompositorTabStrip; |
// Cache objects that should not be created frequently. |
@@ -126,6 +127,16 @@ public class CompositorViewHolder extends CoordinatorLayout |
private boolean mHasDrawnOnce = false; |
/** |
+ * An interface for outside classes to be notified when a frame from the compositor is ready. |
+ */ |
+ public interface FrameObserver { |
+ /** |
+ * Notification of the compositor having drawn a frame. |
+ */ |
+ public void onCompositorFrame(); |
+ } |
+ |
+ /** |
* This view is created on demand to display debugging information. |
*/ |
private static class DebugOverlay extends View { |
@@ -231,6 +242,13 @@ public class CompositorViewHolder extends CoordinatorLayout |
} |
/** |
+ * @param observer The object observing frame drawing. |
+ */ |
+ public void setFrameObserver(FrameObserver observer) { |
+ mFrameObserver = observer; |
+ } |
+ |
+ /** |
* @param layoutManager The {@link LayoutManager} instance that will be driving what |
* shows in this {@link CompositorViewHolder}. |
*/ |
@@ -575,6 +593,7 @@ public class CompositorViewHolder extends CoordinatorLayout |
} |
mHasDrawnOnce = true; |
+ if (mFrameObserver != null) mFrameObserver.onCompositorFrame(); |
mPendingSwapBuffersCount = pendingSwapBuffersCount; |