Index: content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java |
index 781899daca98681801a1cdf3cb247955714899a7..4c2aff71b92df12d9e1e0dae3c0d0e31e6b82b76 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java |
@@ -19,7 +19,8 @@ import org.chromium.base.JNINamespace; |
* Note that only one ContentView can be shown at a time. |
*/ |
@JNINamespace("content") |
-public class ContentViewRenderView extends FrameLayout { |
+public class ContentViewRenderView extends FrameLayout |
+ implements ContentViewCore.VSyncProvider { |
// The native side of this object. |
private int mNativeContentViewRenderView = 0; |
@@ -29,6 +30,7 @@ public class ContentViewRenderView extends FrameLayout { |
private ContentView mCurrentContentView; |
private final VSyncMonitor mVSyncMonitor; |
+ private boolean mVSyncNotificationEnabled; |
// The VSyncMonitor gives the timebase for the actual vsync, but we don't want render until |
// we have had a chance for input events to propagate to the compositor thread. This takes |
@@ -74,13 +76,18 @@ public class ContentViewRenderView extends FrameLayout { |
@Override |
public void onVSync(VSyncMonitor monitor, long vsyncTimeMicros) { |
if (mCurrentContentView == null) return; |
- // Compensate for input event lag. Input events are delivered immediately on |
- // pre-JB releases, so this adjustment is only done for later versions. |
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { |
- vsyncTimeMicros += INPUT_EVENT_LAG_FROM_VSYNC_MICROSECONDS; |
+ if (mVSyncNotificationEnabled) { |
+ mCurrentContentView.getContentViewCore().sendVSync(vsyncTimeMicros); |
+ mVSyncMonitor.requestUpdate(); |
+ } else { |
+ // Compensate for input event lag. Input events are delivered immediately on |
+ // pre-JB releases, so this adjustment is only done for later versions. |
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { |
+ vsyncTimeMicros += INPUT_EVENT_LAG_FROM_VSYNC_MICROSECONDS; |
+ } |
+ mCurrentContentView.getContentViewCore().updateVSync(vsyncTimeMicros, |
+ mVSyncMonitor.getVSyncPeriodInMicroseconds()); |
} |
- mCurrentContentView.getContentViewCore().updateVSync(vsyncTimeMicros, |
- mVSyncMonitor.getVSyncPeriodInMicroseconds()); |
} |
}); |
@@ -108,6 +115,7 @@ public class ContentViewRenderView extends FrameLayout { |
mCurrentContentView = contentView; |
mCurrentContentView.getContentViewCore().onPhysicalBackingSizeChanged( |
getWidth(), getHeight()); |
+ mCurrentContentView.getContentViewCore().setVSyncProvider(this); |
mVSyncMonitor.requestUpdate(); |
} |
@@ -125,6 +133,12 @@ public class ContentViewRenderView extends FrameLayout { |
return mSurfaceView.getHolder().getSurface() != null; |
} |
+ @Override |
+ public void setVSyncNotificationEnabled(ContentViewCore contentViewCore, boolean enabled) { |
+ if (enabled && !mVSyncNotificationEnabled) mVSyncMonitor.requestUpdate(); |
+ mVSyncNotificationEnabled = enabled; |
+ } |
+ |
private static native int nativeInit(); |
private native void nativeDestroy(int nativeContentViewRenderView); |
private native void nativeSetCurrentContentView(int nativeContentViewRenderView, |