Index: chrome/android/javatests/src/org/chromium/chrome/browser/hardware_acceleration/Utils.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/hardware_acceleration/Utils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/hardware_acceleration/Utils.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0bf5896eb78dd707b7c50828a7bd8b9b39031d4a |
--- /dev/null |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/hardware_acceleration/Utils.java |
@@ -0,0 +1,75 @@ |
+// Copyright 2015 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.chrome.browser.hardware_acceleration; |
+ |
+import android.view.View; |
+import android.view.ViewTreeObserver.OnPreDrawListener; |
+ |
+import junit.framework.Assert; |
+ |
+import org.chromium.base.SysUtils; |
+import org.chromium.base.ThreadUtils; |
+import org.chromium.chrome.browser.ChromeActivity; |
+import org.chromium.content.browser.test.util.CallbackHelper; |
+ |
+import java.util.HashSet; |
+import java.util.Set; |
+import java.util.concurrent.atomic.AtomicBoolean; |
+ |
+/** |
+ * Various utils for hardware acceleration tests. |
+ */ |
+public class Utils { |
+ |
+ /** |
+ * Asserts that activity is hardware accelerated only on high-end devices. |
+ * I.e. on low-end devices hardware acceleration must be off. |
+ */ |
+ public static void assertHardwareAcceleration(final ChromeActivity activity) throws Exception { |
+ final AtomicBoolean accelerated = new AtomicBoolean(); |
+ final CallbackHelper listenerCalled = new CallbackHelper(); |
+ |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ final View view = activity.getWindow().getDecorView(); |
+ view.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() { |
+ @Override |
+ public boolean onPreDraw() { |
+ view.getViewTreeObserver().removeOnPreDrawListener(this); |
+ accelerated.set(view.isHardwareAccelerated()); |
+ listenerCalled.notifyCalled(); |
+ return true; |
+ } |
+ }); |
+ view.invalidate(); |
+ } |
+ }); |
+ |
+ listenerCalled.waitForCallback(0); |
+ |
+ if (SysUtils.isLowEndDevice()) { |
+ Assert.assertFalse(accelerated.get()); |
+ } else { |
+ Assert.assertTrue(accelerated.get()); |
+ } |
+ } |
+ |
+ /** |
+ * Asserts that there is no thread named 'RenderThread' (which is essential |
+ * for hardware acceleration). |
+ */ |
+ public static void assertNoRenderThread() { |
+ Assert.assertFalse(collectThreadNames().contains("RenderThread")); |
+ } |
+ |
+ private static Set<String> collectThreadNames() { |
+ Set<String> names = new HashSet<String>(); |
+ for (Thread thread : Thread.getAllStackTraces().keySet()) { |
+ names.add(thread.getName()); |
+ } |
+ return names; |
+ } |
+} |