From 7deb76581d6d65e3ca18bc28211ca0d465118bae Mon Sep 17 00:00:00 2001 From: "peter@chromium.org" Date: Thu, 26 Jun 2014 15:24:20 +0000 Subject: Revert of Remove burst mode from VSyncMonitor. (https://codereview.chromium.org/346813002/) Reason for revert: Four of the introduced tests time out on Android. VSyncMonitorTest#testVSyncActivationFromIdleAllowJBVSync VSyncMonitorTest#testVSyncActivationFromIdleDisallowJBVSync VSyncMonitorTest#testVSyncPeriodAllowJBVSync VSyncMonitorTest#testVSyncPeriodDisallowJBVSync The log output can be seen here: http://build.chromium.org/p/chromium.linux/builders/Android%20Tests%20%28dbg%29/builds/21188/steps/contentshell_instrumentation_tests/logs/stdio This failure could be observed in the try-bot results as part of the patch. Please do not use NOTRY unless you're absolutely certain that the failures are unrelated. Original issue's description: > Remove burst mode from VSyncMonitor. > > Extra vsyncs after each rendering cause 1% more power consumption. > > NOTRY=true > > Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=279997 TBR=tedchoc@chromium.org,sievers@chromium.org,aruslan@chromium.org,brianderson@chromium.org,skyostil@google.com,skyostil@chromium.org,bulach@chromium.org,miguelg@chromium.org,yfriedman@chromium.org,newt@chromium.org,egor.starkov@samsung.com NOTREECHECKS=true NOTRY=true Review URL: https://codereview.chromium.org/358473006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@280012 0039d316-1c4b-4281-b951-d872f2087c98 --- ui/android/java/src/org/chromium/ui/VSyncMonitor.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'ui/android') diff --git a/ui/android/java/src/org/chromium/ui/VSyncMonitor.java b/ui/android/java/src/org/chromium/ui/VSyncMonitor.java index 935df01..5805585 100644 --- a/ui/android/java/src/org/chromium/ui/VSyncMonitor.java +++ b/ui/android/java/src/org/chromium/ui/VSyncMonitor.java @@ -15,6 +15,9 @@ import org.chromium.base.TraceEvent; /** * Notifies clients of the default displays's vertical sync pulses. + * This class works in "burst" mode: once the update is requested, the listener will be + * called MAX_VSYNC_COUNT times on the vertical sync pulses (on JB) or on every refresh + * period (on ICS, see below), unless stop() is called. * On ICS, VSyncMonitor relies on setVSyncPointForICS() being called to set a reasonable * approximation of a vertical sync starting point; see also http://crbug.com/156397. */ @@ -23,6 +26,7 @@ public class VSyncMonitor { private static final long NANOSECONDS_PER_SECOND = 1000000000; private static final long NANOSECONDS_PER_MILLISECOND = 1000000; private static final long NANOSECONDS_PER_MICROSECOND = 1000; + public static final int MAX_AUTO_ONVSYNC_COUNT = 5; /** * VSync listener class @@ -42,6 +46,7 @@ public class VSyncMonitor { private final long mRefreshPeriodNano; private boolean mHaveRequestInFlight; + private int mTriggerNextVSyncCount; // Choreographer is used to detect vsync on >= JB. private final Choreographer mChoreographer; @@ -79,6 +84,7 @@ public class VSyncMonitor { .getDefaultDisplay().getRefreshRate(); if (refreshRate <= 0) refreshRate = 60; mRefreshPeriodNano = (long) (NANOSECONDS_PER_SECOND / refreshRate); + mTriggerNextVSyncCount = 0; if (enableJBVSync && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { // Use Choreographer on JB+ to get notified of vsync. @@ -139,13 +145,16 @@ public class VSyncMonitor { * after this function is called. */ public void stop() { + mTriggerNextVSyncCount = 0; } /** * Request to be notified of the closest display vsync events. * Listener.onVSync() will be called soon after the upcoming vsync pulses. + * It will be called at most MAX_AUTO_ONVSYNC_COUNT times unless requestUpdate() is called. */ public void requestUpdate() { + mTriggerNextVSyncCount = MAX_AUTO_ONVSYNC_COUNT; postCallback(); } @@ -165,6 +174,10 @@ public class VSyncMonitor { assert mHaveRequestInFlight; mHaveRequestInFlight = false; mLastVSyncCpuTimeNano = currentTimeNanos; + if (mTriggerNextVSyncCount >= 0) { + mTriggerNextVSyncCount--; + postCallback(); + } if (mListener != null) { mListener.onVSync(this, frameTimeNanos / NANOSECONDS_PER_MICROSECOND); } -- cgit v1.1