| Index: ui/gl/android/java/src/org/chromium/ui/gl/VSyncProvider.java
|
| diff --git a/ui/gl/android/java/src/org/chromium/ui/gl/VSyncProvider.java b/ui/gl/android/java/src/org/chromium/ui/gl/VSyncProvider.java
|
| index 6f83d87a136f524dbdf7db8f4a7673c5a76bfd09..31cc62af204d143b13f0d76e9b23207889397f16 100644
|
| --- a/ui/gl/android/java/src/org/chromium/ui/gl/VSyncProvider.java
|
| +++ b/ui/gl/android/java/src/org/chromium/ui/gl/VSyncProvider.java
|
| @@ -19,6 +19,8 @@ public class VSyncProvider implements FrameCallback {
|
| private static final long MAX_DRIFT_PERCENT = 5;
|
| // A refresh period of more than 1s is considered bogus.
|
| private static final long MAX_VSYNC_REFRESH_NANO = 1000000000L;
|
| + // A refresh period bigger than 1000Hz is considered bogus.
|
| + private static final long MIN_VSYNC_REFRESH_NANO = 1000000L;
|
| private final Choreographer mChoreographer;
|
| private boolean mMonitoring;
|
| private long mNativeAndroidVSyncProvider;
|
| @@ -53,7 +55,7 @@ public class VSyncProvider implements FrameCallback {
|
| }
|
|
|
| @Override
|
| - public void doFrame(long timeNano) {
|
| + public void doFrame(final long timeNano) {
|
| if (mNativeAndroidVSyncProvider == 0) {
|
| mMonitoring = false;
|
| return;
|
| @@ -65,25 +67,25 @@ public class VSyncProvider implements FrameCallback {
|
| }
|
|
|
| mChoreographer.postFrameCallback(this);
|
| - long currentTimeNano = timeNano;
|
| if (mLastTimeNano != 0) {
|
| - long currentRefreshNano = currentTimeNano - mLastTimeNano;
|
| - if (currentRefreshNano < MAX_VSYNC_REFRESH_NANO) {
|
| + long currentRefreshNano = timeNano - mLastTimeNano;
|
| + if (currentRefreshNano > MIN_VSYNC_REFRESH_NANO
|
| + && currentRefreshNano < MAX_VSYNC_REFRESH_NANO) {
|
| mVSyncRefreshNanoComputer.add(currentRefreshNano);
|
| if (mLastSentTimeSynchronizationNano == 0
|
| - || computeSynchronizationDriftPercent(currentTimeNano,
|
| + || computeSynchronizationDriftPercent(timeNano,
|
| mLastSentTimeSynchronizationNano, mLastSentVSyncRefreshNano)
|
| > MAX_DRIFT_PERCENT
|
| || computeRefreshDriftPercent(currentRefreshNano, mLastSentVSyncRefreshNano)
|
| > MAX_DRIFT_PERCENT) {
|
| - mLastSentTimeSynchronizationNano = currentTimeNano;
|
| + mLastSentTimeSynchronizationNano = timeNano;
|
| mLastSentVSyncRefreshNano = mVSyncRefreshNanoComputer.getMedian();
|
| - nativeOnSyncChanged(mNativeAndroidVSyncProvider, currentTimeNano / 1000,
|
| + nativeOnSyncChanged(mNativeAndroidVSyncProvider, timeNano / 1000,
|
| mLastSentVSyncRefreshNano / 1000);
|
| }
|
| }
|
| }
|
| - mLastTimeNano = currentTimeNano;
|
| + mLastTimeNano = timeNano;
|
| }
|
|
|
| @CalledByNative
|
|
|