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

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/hardware_acceleration/Utils.java

Issue 1223263009: Disable hardware acceleration for ChromeActivities on low-end devices. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed DocumentModeTestBase to compile Created 5 years, 5 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: 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;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698