/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.android.uiautomator.platform;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiScrollable;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.janktesthelper.JankTestBase;
import java.io.File;
import java.io.IOException;
/**
* Jank test for Android Webview.
*
* To run
* 1) Install the test application (com.android.webview.chromium.shell)
* 2) Place a directories containing the test pages on the test device in
* $EXTERNAL_STORAGE/AwJankPages. Each directory should contain an index.html
* file as the main file of the test page.
* 3) Build this test and push the resulting Jar file to /data/local/tmp/WebViewJankTests.jar
* 4) Run the test using the command:
* adb shell uiautomator runtest WebViewJankTests.jar
*
* The test will run for each of the test pages. The results will be saved on the device in
* /data/local/tmp/jankoutput.txt.
*/
public class WebViewFlingTest extends JankTestBase {
private static final long TEST_DELAY_TIME_MS = 2 * 1000; // 2 seconds
private static final long PAGE_LOAD_DELAY_TIMEOUT_MS = 10 * 1000; // 10 seconds
private static final long PAGE_LOAD_DELAY_TIME_MS = 20 * 1000; // 20 seconds
private static final int MIN_DATA_SIZE = 50;
private static final String AW_WINDOW_NAME =
"com.android.webview.chromium.shell/com.android.webview.chromium.shell.JankActivity";
private static final String AW_CONTAINER = "com.android.webview.chromium.shell:id/container";
private static final String START_CMD =
"am start -n com.android.webview.chromium.shell/.JankActivity -d ";
private UiScrollable mWebPageDisplay = null;
public void testBrowserPageFling() throws UiObjectNotFoundException, IOException {
String url = mParams.getString("Url");
File webpage = new File(url);
assertNotNull("No test pages", webpage);
runBrowserPageFling(webpage);
}
private void resetFlingTest() throws UiObjectNotFoundException {
getContainer().flingToBeginning(20);
}
private void loadUrl(String url) throws IOException {
Runtime.getRuntime().exec(START_CMD + url);
// Need to find a good way of detecting when the page is loaded
sleep(PAGE_LOAD_DELAY_TIME_MS);
}
private void flingForward() throws UiObjectNotFoundException {
getContainer().flingForward();
}
private UiScrollable getContainer() {
if (mWebPageDisplay == null) {
mWebPageDisplay =
new UiScrollable(new UiSelector().resourceId(AW_CONTAINER).instance(0));
assertTrue("Failed to get web container",
mWebPageDisplay.waitForExists(PAGE_LOAD_DELAY_TIMEOUT_MS));
}
return mWebPageDisplay;
}
/**
* {@inheritDoc}
*/
@Override
protected void setUp() throws Exception {
super.setUp();
getUiDevice().setOrientationNatural();
}
/**
* {@inheritDoc}
*/
@Override
protected void tearDown() throws Exception {
getUiDevice().unfreezeRotation();
super.tearDown();
}
private void runBrowserPageFling(File testFile) throws UiObjectNotFoundException, IOException {
loadUrl("file://" + testFile.getAbsolutePath());
for (int i = 0; i < getIteration(); i++) {
resetFlingTest();
sleep(TEST_DELAY_TIME_MS);
startTrace(mTestCaseName, i);
getSurfaceFlingerHelper().clearBuffer(AW_WINDOW_NAME);
flingForward();
sleep(DEFAULT_ANIMATION_TIME);
boolean result =
getSurfaceFlingerHelper().dumpFrameLatency(AW_WINDOW_NAME, true);
assertTrue("dump frame latency failed", result);
waitForTrace();
assertTrue(String.format("Sample size is less than expected: %d", MIN_DATA_SIZE),
validateResults(MIN_DATA_SIZE));
// record the result in an array
recordResults(mTestCaseName, i);
}
// calculate average and save the results
saveResults(mTestCaseName);
}
}
|