Index: content/public/android/javatests/src/org/chromium/content/browser/VSyncMonitorTest.java |
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/VSyncMonitorTest.java b/content/public/android/javatests/src/org/chromium/content/browser/VSyncMonitorTest.java |
deleted file mode 100644 |
index a0274aafd99ff6071a61d32b31463b6e698ef4d2..0000000000000000000000000000000000000000 |
--- a/content/public/android/javatests/src/org/chromium/content/browser/VSyncMonitorTest.java |
+++ /dev/null |
@@ -1,151 +0,0 @@ |
-// Copyright 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-package org.chromium.content.browser; |
- |
-import android.content.Context; |
-import android.test.InstrumentationTestCase; |
-import android.test.suitebuilder.annotation.MediumTest; |
- |
-import org.chromium.base.ThreadUtils; |
- |
-import java.util.Arrays; |
-import java.util.concurrent.Callable; |
- |
-public class VSyncMonitorTest extends InstrumentationTestCase { |
- private static class VSyncDataCollector implements VSyncMonitor.Listener { |
- public long mFramePeriods[]; |
- public int mFrameCount; |
- public long mLastVSyncCpuTimeMillis; |
- |
- private final boolean mActivelyRequestUpdate; |
- private boolean mDone; |
- private long mPreviousVSyncTimeMicros; |
- private Object mSyncRoot = new Object(); |
- |
- VSyncDataCollector(int frames, boolean activelyRequestUpdate) { |
- mFramePeriods = new long[frames]; |
- mActivelyRequestUpdate = activelyRequestUpdate; |
- } |
- |
- public boolean isDone() { |
- synchronized (mSyncRoot) { |
- return mDone; |
- } |
- } |
- |
- @Override |
- public void onVSync(VSyncMonitor monitor, long vsyncTimeMicros) { |
- mLastVSyncCpuTimeMillis = System.currentTimeMillis(); |
- if (mPreviousVSyncTimeMicros == 0) { |
- mPreviousVSyncTimeMicros = vsyncTimeMicros; |
- return; |
- } |
- if (mFrameCount >= mFramePeriods.length) { |
- synchronized (mSyncRoot) { |
- mDone = true; |
- mSyncRoot.notify(); |
- } |
- return; |
- } |
- mFramePeriods[mFrameCount++] = vsyncTimeMicros - mPreviousVSyncTimeMicros; |
- mPreviousVSyncTimeMicros = vsyncTimeMicros; |
- if (mActivelyRequestUpdate) monitor.requestUpdate(); |
- } |
- |
- public void waitTillDone() throws InterruptedException { |
- synchronized (mSyncRoot) { |
- while (!isDone()) { |
- mSyncRoot.wait(); |
- } |
- } |
- } |
- } |
- |
- // The vsync monitor must be created on the UI thread to avoid associating the underlying |
- // Choreographer with the Looper from the test runner thread. |
- private VSyncMonitor createVSyncMonitor( |
- final VSyncMonitor.Listener listener, final boolean enableJBVSync) { |
- return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<VSyncMonitor>() { |
- @Override |
- public VSyncMonitor call() { |
- Context context = getInstrumentation().getContext(); |
- return new VSyncMonitor(context, listener, enableJBVSync); |
- } |
- }); |
- } |
- |
- // Check that the vsync period roughly matches the timestamps that the monitor generates. |
- private void performVSyncPeriodTest(boolean enableJBVSync) throws InterruptedException { |
- // Collect roughly one second of data on a 60 fps display. |
- collectAndCheckVSync(enableJBVSync, 60, true); |
- collectAndCheckVSync(enableJBVSync, VSyncMonitor.MAX_AUTO_ONVSYNC_COUNT, false); |
- } |
- |
- private void collectAndCheckVSync( |
- boolean enableJBVSync, final int totalFrames, final boolean activeFrames) |
- throws InterruptedException { |
- VSyncDataCollector collector = new VSyncDataCollector(totalFrames, activeFrames); |
- VSyncMonitor monitor = createVSyncMonitor(collector, enableJBVSync); |
- |
- long reportedFramePeriod = monitor.getVSyncPeriodInMicroseconds(); |
- assertTrue(reportedFramePeriod > 0); |
- |
- assertFalse(collector.isDone()); |
- monitor.requestUpdate(); |
- collector.waitTillDone(); |
- assertTrue(collector.isDone()); |
- monitor.stop(); |
- |
- // Check that the median frame rate is within 10% of the reported frame period. |
- assertTrue(collector.mFrameCount == totalFrames); |
- Arrays.sort(collector.mFramePeriods, 0, collector.mFramePeriods.length); |
- long medianFramePeriod = collector.mFramePeriods[collector.mFramePeriods.length / 2]; |
- if (Math.abs(medianFramePeriod - reportedFramePeriod) > reportedFramePeriod * .1) { |
- fail("Measured median frame period " + medianFramePeriod |
- + " differs by more than 10% from the reported frame period " |
- + reportedFramePeriod + " for " |
- + (activeFrames ? "requested" : "automatically sent") + " frames"); |
- } |
- } |
- |
- // Check that the vsync period roughly matches the timestamps that the monitor generates. |
- @MediumTest |
- public void testVSyncPeriodAllowJBVSync() throws InterruptedException { |
- performVSyncPeriodTest(true); |
- } |
- |
- // Check that the vsync period roughly matches the timestamps that the monitor generates. |
- @MediumTest |
- public void testVSyncPeriodDisallowJBVSync() throws InterruptedException { |
- performVSyncPeriodTest(false); |
- } |
- |
- // Check that the vsync period roughly matches the timestamps that the monitor generates. |
- private void performVSyncActivationFromIdle(boolean enableJBVSync) throws InterruptedException { |
- VSyncDataCollector collector = new VSyncDataCollector(1, false); |
- VSyncMonitor monitor = createVSyncMonitor(collector, enableJBVSync); |
- |
- monitor.requestUpdate(); |
- collector.waitTillDone(); |
- assertTrue(collector.isDone()); |
- monitor.stop(); |
- |
- long period = monitor.getVSyncPeriodInMicroseconds() / 1000; |
- long delay = System.currentTimeMillis() - collector.mLastVSyncCpuTimeMillis; |
- |
- // The VSync should have activated immediately instead of at the next real vsync. |
- assertTrue(delay < period); |
- } |
- |
- @MediumTest |
- public void testVSyncActivationFromIdleAllowJBVSync() throws InterruptedException { |
- performVSyncActivationFromIdle(true); |
- } |
- |
- @MediumTest |
- public void testVSyncActivationFromIdleDisallowJBVSync() throws InterruptedException { |
- performVSyncActivationFromIdle(false); |
- } |
-} |