| 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;
|
| + }
|
| +}
|
|
|