Chromium Code Reviews| Index: ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
| diff --git a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
| index 882bb14deb693a3976aa16587107f750d30b6bf5..e281ef2d42141e6b52b8286c2abf84b7e7130dcf 100644 |
| --- a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
| +++ b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java |
| @@ -109,6 +109,9 @@ public class WindowAndroid { |
| private AndroidPermissionDelegate mPermissionDelegate; |
| + private boolean mPendingVSyncRequest; |
|
boliu
2017/03/15 22:08:11
hmm.. reading over this, I think it makes more sen
mthiesse
2017/03/16 00:03:07
So it couldn't only live in BFS, or WindowAndroid:
boliu
2017/03/16 00:45:44
Actually, I see another issue with moving to nativ
mthiesse
2017/03/16 15:36:05
Done.
|
| + private boolean mVSyncPaused; |
| + |
| /** |
| * An interface to notify listeners of changes in the soft keyboard's visibility. |
| */ |
| @@ -134,6 +137,10 @@ public class WindowAndroid { |
| private final VSyncMonitor.Listener mVSyncListener = new VSyncMonitor.Listener() { |
| @Override |
| public void onVSync(VSyncMonitor monitor, long vsyncTimeMicros) { |
| + if (mVSyncPaused) { |
| + mPendingVSyncRequest = true; |
| + return; |
| + } |
| if (mNativeWindowAndroid != 0) { |
| nativeOnVSync(mNativeWindowAndroid, |
| vsyncTimeMicros, |
| @@ -496,7 +503,11 @@ public class WindowAndroid { |
| } |
| @CalledByNative |
| - private void requestVSyncUpdate() { |
| + protected void requestVSyncUpdate() { |
|
boliu
2017/03/15 22:08:11
keep private
mthiesse
2017/03/16 00:03:07
Done.
|
| + if (mVSyncPaused) { |
| + mPendingVSyncRequest = true; |
| + return; |
| + } |
| mVSyncMonitor.requestUpdate(); |
| } |
| @@ -557,6 +568,7 @@ public class WindowAndroid { |
| public long getNativePointer() { |
| if (mNativeWindowAndroid == 0) { |
| mNativeWindowAndroid = nativeInit(mDisplayAndroid.getDisplayId()); |
| + if (mVSyncPaused) nativeSetVSyncPaused(mNativeWindowAndroid, true); |
|
boliu
2017/03/15 22:08:11
hmm, this doesn't look correct to me, why is vsync
mthiesse
2017/03/16 00:03:07
Well, whatever paused it is responsible for unpaus
boliu
2017/03/16 00:45:44
Oh so the assumption is that native start out as u
mthiesse
2017/03/16 15:36:06
Done.
|
| } |
| return mNativeWindowAndroid; |
| } |
| @@ -724,6 +736,16 @@ public class WindowAndroid { |
| } |
| } |
| + /** |
| + * Pauses/Unpauses the VSync loop. A paused VSync loop will stop the compositor for this window, |
|
boliu
2017/03/15 22:08:11
nit: it's not a loop (in my head at least).. so dr
mthiesse
2017/03/16 00:03:07
Done.
|
| + * preventing requestAnimationFrame callbacks from firing, etc. |
| + */ |
| + public void setVSyncPaused(boolean paused) { |
| + mVSyncPaused = paused; |
|
boliu
2017/03/15 22:08:11
generally, these things have an early out when mVS
mthiesse
2017/03/16 00:03:07
Done.
|
| + if (!mVSyncPaused && mPendingVSyncRequest) requestVSyncUpdate(); |
| + if (mNativeWindowAndroid != 0) nativeSetVSyncPaused(mNativeWindowAndroid, paused); |
| + } |
| + |
| private native long nativeInit(int displayId); |
| private native void nativeOnVSync(long nativeWindowAndroid, |
| long vsyncTimeMicros, |
| @@ -731,6 +753,7 @@ public class WindowAndroid { |
| private native void nativeOnVisibilityChanged(long nativeWindowAndroid, boolean visible); |
| private native void nativeOnActivityStopped(long nativeWindowAndroid); |
| private native void nativeOnActivityStarted(long nativeWindowAndroid); |
| + private native void nativeSetVSyncPaused(long nativeWindowAndroid, boolean paused); |
| private native void nativeDestroy(long nativeWindowAndroid); |
| } |