Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(633)

Unified Diff: ui/android/java/src/org/chromium/ui/base/WindowAndroid.java

Issue 2754493002: Expose VSync pausing through WindowAndroid and pause VSync during webVR presentation (Closed)
Patch Set: Address missed comment Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698