TracingControllerAndroidTest.java revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com// Copyright 2013 The Chromium Authors. All rights reserved.
2dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com// Use of this source code is governed by a BSD-style license that can be
3dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com// found in the LICENSE file.
4dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
5dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.compackage org.chromium.content.browser;
6dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
7cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.comimport static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
8dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
9dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comimport android.os.SystemClock;
10a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.orgimport android.test.suitebuilder.annotation.MediumTest;
11dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com
12a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.orgimport org.chromium.base.ThreadUtils;
13cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.comimport org.chromium.base.test.util.Feature;
14dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comimport org.chromium.content_shell_apk.ContentShellActivity;
15cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.comimport org.chromium.content_shell_apk.ContentShellTestBase;
16a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org
17a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.orgimport java.io.File;
18d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com
19a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.orgpublic class TracingControllerAndroidTest extends ContentShellTestBase {
20d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com
21a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org    private static final long TIMEOUT_MILLIS = scaleTimeout(30 * 1000);
22cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.com
234020acfa7e60cee1510d3c1d2baad9661891bad7commit-bot@chromium.org    @MediumTest
24a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org    @Feature({"GPU"})
255102345029be75f089e083228e317545627ea1cbqiankun.miao    public void testTraceFileCreation() throws Exception {
26c569327afb45386e4dae3505fe6b118603354457borenet@google.com        ContentShellActivity activity = launchContentShellWithUrl("about:blank");
27123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org        waitForActiveShellToBeDoneLoading();
28123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org
29123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org        final TracingControllerAndroid tracingController = new TracingControllerAndroid(activity);
30c569327afb45386e4dae3505fe6b118603354457borenet@google.com        assertFalse(tracingController.isTracing());
31c569327afb45386e4dae3505fe6b118603354457borenet@google.com        assertNull(tracingController.getOutputPath());
32123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org
334020acfa7e60cee1510d3c1d2baad9661891bad7commit-bot@chromium.org        ThreadUtils.runOnUiThreadBlocking(new Runnable() {
34123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org            @Override
35123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org            public void run() {
36123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org                assertTrue(tracingController.startTracing(
37123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org                    true, "*", "record-until-full"));
38123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org            }
39123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org        });
40123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org
41123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org        assertTrue(tracingController.isTracing());
42123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org        File file = new File(tracingController.getOutputPath());
43123f3d74e35e0f9c69961553b8eac5e12f763de3commit-bot@chromium.org        assertTrue(file.getName().startsWith("chrome-profile-results"));
44a13767579d25a7182d697e93d0df294eccc91507commit-bot@chromium.org
45662af2930723adb89ae9c57a122c39702789821acommit-bot@chromium.org        ThreadUtils.runOnUiThreadBlocking(new Runnable() {
464020acfa7e60cee1510d3c1d2baad9661891bad7commit-bot@chromium.org            @Override
474020acfa7e60cee1510d3c1d2baad9661891bad7commit-bot@chromium.org            public void run() {
48e32eeec7bf50344c666ab301d87a30fd6b92527ecommit-bot@chromium.org                tracingController.stopTracing();
49            }
50        });
51
52        // The tracer stops asynchronously, because it needs to wait for native code to flush and
53        // close the output file. Give it a little time.
54        long startTime = SystemClock.uptimeMillis();
55        while (tracingController.isTracing()) {
56            if (SystemClock.uptimeMillis() > startTime + TIMEOUT_MILLIS) {
57                fail("Timed out waiting for tracing to stop.");
58            }
59            Thread.sleep(1000);
60        }
61
62        // It says it stopped, so it should have written the output file.
63        assertTrue(file.exists());
64        assertTrue(file.delete());
65        tracingController.destroy();
66    }
67}
68