Update to DumpRenderTree test harness
* removed some unused parameters * removed obsolete live website test harness * updated test class so that mean suite time for page cycler is emmitted via instrumentation status Change-Id: Iccb40f70a62a4ac9b8d5bceab9a6a715c611c573
This commit is contained in:
@@ -58,27 +58,9 @@ public class LayoutTestsAutoRunner extends InstrumentationTestRunner {
|
||||
}
|
||||
}
|
||||
|
||||
String delay_str = (String) icicle.get("delay");
|
||||
if(delay_str != null) {
|
||||
try {
|
||||
this.mDelay = Integer.parseInt(delay_str);
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
|
||||
String r = icicle.getString("rebaseline");
|
||||
this.mRebaseline = (r != null && r.toLowerCase().equals("true"));
|
||||
|
||||
String logtime = icicle.getString("logtime");
|
||||
this.mLogtime = (logtime != null
|
||||
&& logtime.toLowerCase().equals("true"));
|
||||
|
||||
String drawTime = icicle.getString("drawtime");
|
||||
this.mGetDrawTime = (drawTime != null
|
||||
&& drawTime.toLowerCase().equals("true"));
|
||||
|
||||
mSaveImagePath = icicle.getString("saveimage");
|
||||
|
||||
mJsEngine = icicle.getString("jsengine");
|
||||
|
||||
mPageCyclerSuite = icicle.getString("suite");
|
||||
@@ -92,11 +74,7 @@ public class LayoutTestsAutoRunner extends InstrumentationTestRunner {
|
||||
String mPageCyclerForwardHost;
|
||||
String mPageCyclerIteration;
|
||||
String mTestPath;
|
||||
String mSaveImagePath;
|
||||
int mTimeoutInMillis;
|
||||
int mDelay;
|
||||
int mTimeoutInMillis = 0;
|
||||
boolean mRebaseline;
|
||||
boolean mLogtime;
|
||||
boolean mGetDrawTime;
|
||||
String mJsEngine;
|
||||
}
|
||||
|
||||
@@ -314,6 +314,10 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
|
||||
public void timedOut(String url) {
|
||||
Log.v(LOGTAG, "layout timeout: " + url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dumpResult(String webViewDump) {
|
||||
}
|
||||
});
|
||||
|
||||
String resultFile = getResultFile(test);
|
||||
|
||||
@@ -19,6 +19,7 @@ package com.android.dumprendertree;
|
||||
import com.android.dumprendertree.forwarder.AdbUtils;
|
||||
import com.android.dumprendertree.forwarder.ForwardServer;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Instrumentation;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -106,8 +107,7 @@ public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2<TestShel
|
||||
freeMem();
|
||||
|
||||
// Run tests
|
||||
runTestAndWaitUntilDone(activity, runner.mTestPath, runner.mTimeoutInMillis,
|
||||
runner.mGetDrawTime, runner.mSaveImagePath);
|
||||
runTestAndWaitUntilDone(activity, runner.mTestPath, runner.mTimeoutInMillis);
|
||||
|
||||
getInstrumentation().runOnMainSync(new Runnable() {
|
||||
|
||||
@@ -215,9 +215,9 @@ public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2<TestShel
|
||||
}
|
||||
|
||||
// A convenient method to be called by another activity.
|
||||
private void runTestAndWaitUntilDone(TestShellActivity activity, String url, int timeout,
|
||||
boolean getDrawTime, String saveImagePath) {
|
||||
private void runTestAndWaitUntilDone(TestShellActivity activity, String url, int timeout) {
|
||||
activity.setCallback(new TestShellCallback() {
|
||||
@Override
|
||||
public void finished() {
|
||||
synchronized (LoadTestsAutoTest.this) {
|
||||
mFinished = true;
|
||||
@@ -225,8 +225,29 @@ public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2<TestShel
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void timedOut(String url) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dumpResult(String webViewDump) {
|
||||
String lines[] = webViewDump.split("\\r?\\n");
|
||||
for (String line : lines) {
|
||||
line = line.trim();
|
||||
// parse for a line like this:
|
||||
// totals: 9620.00 11947.00 10099.75 380.38
|
||||
// and return the 3rd number, which is mean
|
||||
if (line.startsWith("totals:")) {
|
||||
line = line.substring(7).trim(); // strip "totals:"
|
||||
String[] numbers = line.split("\\s+");
|
||||
if (numbers.length == 4) {
|
||||
Bundle b = new Bundle();
|
||||
b.putString("mean", numbers[2]);
|
||||
getInstrumentation().sendStatus(Activity.RESULT_FIRST_USER, b);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
mFinished = false;
|
||||
@@ -236,9 +257,6 @@ public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2<TestShel
|
||||
intent.putExtra(TestShellActivity.TEST_URL, url);
|
||||
intent.putExtra(TestShellActivity.TIMEOUT_IN_MILLIS, timeout);
|
||||
intent.putExtra(TestShellActivity.RESULT_FILE, LOAD_TEST_RESULT);
|
||||
intent.putExtra(TestShellActivity.GET_DRAW_TIME, getDrawTime);
|
||||
if (saveImagePath != null)
|
||||
intent.putExtra(TestShellActivity.SAVE_IMAGE, saveImagePath);
|
||||
activity.startActivity(intent);
|
||||
|
||||
// Wait until done.
|
||||
|
||||
@@ -1,196 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2009 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.dumprendertree;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.test.ActivityInstrumentationTestCase2;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
|
||||
public class ReliabilityTest extends ActivityInstrumentationTestCase2<ReliabilityTestActivity> {
|
||||
|
||||
private static final String LOGTAG = "ReliabilityTest";
|
||||
private static final String PKG_NAME = "com.android.dumprendertree";
|
||||
private static final String EXTERNAL_DIR =
|
||||
Environment.getExternalStorageDirectory().toString();
|
||||
private static final String TEST_LIST_FILE = EXTERNAL_DIR +
|
||||
"/android/reliability_tests_list.txt";
|
||||
private static final String TEST_STATUS_FILE = EXTERNAL_DIR +
|
||||
"/android/reliability_running_test.txt";
|
||||
private static final String TEST_TIMEOUT_FILE = EXTERNAL_DIR +
|
||||
"/android/reliability_timeout_test.txt";
|
||||
private static final String TEST_LOAD_TIME_FILE = EXTERNAL_DIR +
|
||||
"/android/reliability_load_time.txt";
|
||||
private static final String TEST_DONE = "#DONE";
|
||||
static final String RELIABILITY_TEST_RUNNER_FILES[] = {
|
||||
"run_reliability_tests.py"
|
||||
};
|
||||
|
||||
public ReliabilityTest() {
|
||||
super(PKG_NAME, ReliabilityTestActivity.class);
|
||||
}
|
||||
|
||||
public void runReliabilityTest() throws Throwable {
|
||||
// ReliabilityTestActivity activity = getActivity();
|
||||
LayoutTestsAutoRunner runner = (LayoutTestsAutoRunner)getInstrumentation();
|
||||
|
||||
File testListFile = new File(TEST_LIST_FILE);
|
||||
if(!testListFile.exists())
|
||||
throw new FileNotFoundException("test list file not found.");
|
||||
|
||||
BufferedReader listReader = new BufferedReader(
|
||||
new FileReader(testListFile));
|
||||
|
||||
//always try to resume first, hence cleaning up status will be the
|
||||
//responsibility of driver scripts
|
||||
String lastUrl = FsUtils.readTestStatus(TEST_STATUS_FILE);
|
||||
if(lastUrl != null && !TEST_DONE.equals(lastUrl))
|
||||
fastForward(listReader, lastUrl);
|
||||
|
||||
String url = null;
|
||||
Handler handler = null;
|
||||
boolean timeoutFlag = false;
|
||||
long start, elapsed;
|
||||
|
||||
Intent intent = new Intent(runner.getContext(), ReliabilityTestActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
ReliabilityTestActivity activity = (ReliabilityTestActivity)runner.startActivitySync(
|
||||
intent);
|
||||
//read from BufferedReader instead of populating a list in advance,
|
||||
//this will avoid excessive memory usage in case of a large list
|
||||
while((url = listReader.readLine()) != null) {
|
||||
url = url.trim();
|
||||
if(url.length() == 0)
|
||||
continue;
|
||||
start = System.currentTimeMillis();
|
||||
Log.v(LOGTAG, "Testing URL: " + url);
|
||||
FsUtils.updateTestStatus(TEST_STATUS_FILE, url);
|
||||
activity.reset();
|
||||
//use message to send new URL to avoid interacting with
|
||||
//WebView in non-UI thread
|
||||
handler = activity.getHandler();
|
||||
Message msg = handler.obtainMessage(
|
||||
ReliabilityTestActivity.MSG_NAVIGATE,
|
||||
runner.mTimeoutInMillis, runner.mDelay);
|
||||
msg.getData().putString(ReliabilityTestActivity.MSG_NAV_URL, url);
|
||||
msg.getData().putBoolean(ReliabilityTestActivity.MSG_NAV_LOGTIME,
|
||||
runner.mLogtime);
|
||||
handler.sendMessage(msg);
|
||||
timeoutFlag = activity.waitUntilDone();
|
||||
elapsed = System.currentTimeMillis() - start;
|
||||
if(elapsed < 1000) {
|
||||
Log.w(LOGTAG, "Page load finished in " + elapsed
|
||||
+ "ms, too soon?");
|
||||
} else {
|
||||
Log.v(LOGTAG, "Page load finished in " + elapsed + "ms");
|
||||
}
|
||||
if(timeoutFlag) {
|
||||
writeTimeoutFile(url);
|
||||
}
|
||||
if(runner.mLogtime) {
|
||||
writeLoadTime(url, activity.getPageLoadTime());
|
||||
}
|
||||
System.runFinalization();
|
||||
System.gc();
|
||||
System.gc();
|
||||
}
|
||||
activity.finish();
|
||||
FsUtils.updateTestStatus(TEST_STATUS_FILE, TEST_DONE);
|
||||
// activity.finish();
|
||||
listReader.close();
|
||||
}
|
||||
|
||||
public void copyRunnerAssetsToCache() {
|
||||
try {
|
||||
String out_dir = getActivity().getApplicationContext()
|
||||
.getCacheDir().getPath() + "/";
|
||||
|
||||
for( int i=0; i< RELIABILITY_TEST_RUNNER_FILES.length; i++) {
|
||||
InputStream in = getActivity().getAssets().open(
|
||||
RELIABILITY_TEST_RUNNER_FILES[i]);
|
||||
OutputStream out = new FileOutputStream(
|
||||
out_dir + RELIABILITY_TEST_RUNNER_FILES[i]);
|
||||
|
||||
byte[] buf = new byte[2048];
|
||||
int len;
|
||||
|
||||
while ((len = in.read(buf)) >= 0 ) {
|
||||
out.write(buf, 0, len);
|
||||
}
|
||||
out.close();
|
||||
in.close();
|
||||
}
|
||||
}catch (IOException e) {
|
||||
Log.e(LOGTAG, "Cannot extract scripts for testing.", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void fastForward(BufferedReader testListReader, String lastUrl) {
|
||||
//fastforward the BufferedReader to the position right after last url
|
||||
if(lastUrl == null)
|
||||
return;
|
||||
|
||||
String line = null;
|
||||
try {
|
||||
while((line = testListReader.readLine()) != null) {
|
||||
if(lastUrl.equals(line))
|
||||
return;
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
Log.e(LOGTAG, "Error while reading test list.", ioe);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void writeTimeoutFile(String s) {
|
||||
//append to the file containing the list of timeout urls
|
||||
try {
|
||||
BufferedOutputStream bos = new BufferedOutputStream(
|
||||
new FileOutputStream(TEST_TIMEOUT_FILE, true));
|
||||
bos.write(s.getBytes());
|
||||
bos.write('\n');
|
||||
bos.close();
|
||||
} catch (Exception e) {
|
||||
Log.e(LOGTAG, "Cannot update file " + TEST_TIMEOUT_FILE, e);
|
||||
}
|
||||
}
|
||||
|
||||
private void writeLoadTime(String s, long time) {
|
||||
//append to the file containing the list of timeout urls
|
||||
try {
|
||||
BufferedOutputStream bos = new BufferedOutputStream(
|
||||
new FileOutputStream(TEST_LOAD_TIME_FILE, true));
|
||||
bos.write((s + '|' + time + '\n').getBytes());
|
||||
bos.close();
|
||||
} catch (Exception e) {
|
||||
Log.e(LOGTAG, "Cannot update file " + TEST_LOAD_TIME_FILE, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,9 +25,6 @@ import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnClickListener;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Bitmap.CompressFormat;
|
||||
import android.graphics.Bitmap.Config;
|
||||
import android.graphics.Canvas;
|
||||
import android.net.http.SslError;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
@@ -200,8 +197,6 @@ public class TestShellActivity extends Activity implements LayoutTestController
|
||||
|
||||
mResultFile = intent.getStringExtra(RESULT_FILE);
|
||||
mTimeoutInMillis = intent.getIntExtra(TIMEOUT_IN_MILLIS, 0);
|
||||
mGetDrawtime = intent.getBooleanExtra(GET_DRAW_TIME, false);
|
||||
mSaveImagePath = intent.getStringExtra(SAVE_IMAGE);
|
||||
mStopOnRefError = intent.getBooleanExtra(STOP_ON_REF_ERROR, false);
|
||||
setTitle("Test " + mCurrentTestNumber + " of " + mTotalTestCount);
|
||||
float ratio = (float)mCurrentTestNumber / mTotalTestCount;
|
||||
@@ -311,6 +306,10 @@ public class TestShellActivity extends Activity implements LayoutTestController
|
||||
return;
|
||||
}
|
||||
|
||||
if (mCallback != null) {
|
||||
mCallback.dumpResult(webkitData);
|
||||
}
|
||||
|
||||
try {
|
||||
File parentDir = new File(mResultFile).getParentFile();
|
||||
if (!parentDir.exists()) {
|
||||
@@ -564,18 +563,6 @@ public class TestShellActivity extends Activity implements LayoutTestController
|
||||
public void onPageFinished(WebView view, String url) {
|
||||
Log.v(LOGTAG, "onPageFinished, url=" + url);
|
||||
mPageFinished = true;
|
||||
// get page draw time
|
||||
if (FsUtils.isTestPageUrl(url)) {
|
||||
if (mGetDrawtime) {
|
||||
long[] times = new long[DRAW_RUNS];
|
||||
times = getDrawWebViewTime(mWebView, DRAW_RUNS);
|
||||
FsUtils.writeDrawTime(DRAW_TIME_LOG, url, times);
|
||||
}
|
||||
if (mSaveImagePath != null) {
|
||||
String name = FsUtils.getLastSegmentInPath(url);
|
||||
drawPageToFile(mSaveImagePath + "/" + name + ".png", mWebView);
|
||||
}
|
||||
}
|
||||
|
||||
// Calling finished() will check if we've met all the conditions for completing
|
||||
// this test and move to the next one if we are ready. Otherwise we ask WebCore to
|
||||
@@ -830,47 +817,12 @@ public class TestShellActivity extends Activity implements LayoutTestController
|
||||
mEventSender.clearTouchMetaState();
|
||||
mPageFinished = false;
|
||||
mDumpWebKitData = false;
|
||||
mGetDrawtime = false;
|
||||
mSaveImagePath = null;
|
||||
setDefaultWebSettings(mWebView);
|
||||
mIsGeolocationPermissionSet = false;
|
||||
mPendingGeolocationPermissionCallbacks = null;
|
||||
CookieManager.getInstance().removeAllCookie();
|
||||
}
|
||||
|
||||
private long[] getDrawWebViewTime(WebView view, int count) {
|
||||
if (count == 0)
|
||||
return null;
|
||||
long[] ret = new long[count];
|
||||
long start;
|
||||
Canvas canvas = new Canvas();
|
||||
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Config.ARGB_8888);
|
||||
canvas.setBitmap(bitmap);
|
||||
for (int i = 0; i < count; i++) {
|
||||
start = System.currentTimeMillis();
|
||||
view.draw(canvas);
|
||||
ret[i] = System.currentTimeMillis() - start;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private void drawPageToFile(String fileName, WebView view) {
|
||||
Canvas canvas = new Canvas();
|
||||
Bitmap bitmap = Bitmap.createBitmap(view.getContentWidth(), view.getContentHeight(),
|
||||
Config.ARGB_8888);
|
||||
canvas.setBitmap(bitmap);
|
||||
WebViewClassic.fromWebView(view).drawPage(canvas);
|
||||
try {
|
||||
FileOutputStream fos = new FileOutputStream(fileName);
|
||||
if(!bitmap.compress(CompressFormat.PNG, 90, fos)) {
|
||||
Log.w(LOGTAG, "Failed to compress and save image.");
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
Log.e(LOGTAG, "", ioe);
|
||||
}
|
||||
bitmap.recycle();
|
||||
}
|
||||
|
||||
private boolean canMoveToNextTest() {
|
||||
return (mDumpWebKitData && mPageFinished && !mWaitUntilDone) || mTimedOut;
|
||||
}
|
||||
@@ -922,9 +874,7 @@ public class TestShellActivity extends Activity implements LayoutTestController
|
||||
private String mResultFile;
|
||||
private int mTimeoutInMillis;
|
||||
private String mUiAutoTestPath;
|
||||
private String mSaveImagePath;
|
||||
private BufferedReader mTestListReader;
|
||||
private boolean mGetDrawtime;
|
||||
private int mTotalTestCount;
|
||||
private int mCurrentTestNumber;
|
||||
private boolean mStopOnRefError;
|
||||
|
||||
@@ -18,5 +18,6 @@ package com.android.dumprendertree;
|
||||
|
||||
public interface TestShellCallback {
|
||||
public void finished();
|
||||
public void dumpResult(String webViewDump);
|
||||
public void timedOut(String url);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user