Merge change 3761 into donut

* changes:
  Added support to record page load time for each url.
This commit is contained in:
Android (Google) Code Review
2009-06-10 15:03:06 -07:00
4 changed files with 148 additions and 60 deletions

View File

@@ -18,6 +18,7 @@ import time
TEST_LIST_FILE = "/sdcard/android/reliability_tests_list.txt" TEST_LIST_FILE = "/sdcard/android/reliability_tests_list.txt"
TEST_STATUS_FILE = "/sdcard/android/reliability_running_test.txt" TEST_STATUS_FILE = "/sdcard/android/reliability_running_test.txt"
TEST_TIMEOUT_FILE = "/sdcard/android/reliability_timeout_test.txt" TEST_TIMEOUT_FILE = "/sdcard/android/reliability_timeout_test.txt"
TEST_LOAD_TIME_FILE = "/sdcard/android/reliability_load_time.txt"
HTTP_URL_FILE = "urllist_http" HTTP_URL_FILE = "urllist_http"
HTTPS_URL_FILE = "urllist_https" HTTPS_URL_FILE = "urllist_https"
NUM_URLS = 25 NUM_URLS = 25
@@ -62,6 +63,36 @@ def Bugreport(url, bugreport_dir, adb_cmd):
os.system(cmd) os.system(cmd)
def ProcessPageLoadTime(raw_log):
"""Processes the raw page load time logged by test app."""
log_handle = open(raw_log, "r")
load_times = {}
for line in log_handle:
line = line.strip()
pair = line.split("|")
if len(pair) != 2:
logging.info("Line has more than one '|': " + line)
continue
if pair[0] not in load_times:
load_times[pair[0]] = [0, 0]
try:
pair[1] = int(pair[1])
except ValueError:
logging.info("Lins has non-numeric load time: " + line)
continue
load_times[pair[0]][0] += pair[1]
load_times[pair[0]][1] += 1
log_handle.close()
# rewrite the average time to file
log_handle = open(raw_log, "w")
for url, times in load_times.iteritems():
log_handle.write("%s|%f\n" % (url, float(times[0]) / times[1]))
log_handle.close()
def main(options, args): def main(options, args):
"""Send the url list to device and start testing, restart if crashed.""" """Send the url list to device and start testing, restart if crashed."""
@@ -141,8 +172,13 @@ def main(options, args):
# Call ReliabilityTestsAutoTest#startReliabilityTests # Call ReliabilityTestsAutoTest#startReliabilityTests
test_cmd = (test_cmd_prefix + " -e class " test_cmd = (test_cmd_prefix + " -e class "
"com.android.dumprendertree.ReliabilityTest#" "com.android.dumprendertree.ReliabilityTest#"
"runReliabilityTest -e timeout %s -e delay %s %s" % "runReliabilityTest -e timeout %s -e delay %s" %
(str(timeout_ms), str(manual_delay), test_cmd_postfix)) (str(timeout_ms), str(manual_delay)))
if options.logtime:
test_cmd += " -e logtime true"
test_cmd += test_cmd_postfix
adb_output = subprocess.Popen(test_cmd, shell=True, adb_output = subprocess.Popen(test_cmd, shell=True,
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
@@ -176,12 +212,20 @@ def main(options, args):
else: else:
logging.info("No crash found.") logging.info("No crash found.")
# get timeout file from sdcard
test_cmd = (adb_cmd + "pull \"" + TEST_TIMEOUT_FILE + "\" \"" test_cmd = (adb_cmd + "pull \"" + TEST_TIMEOUT_FILE + "\" \""
+ timedout_file + "\"") + timedout_file + "\"")
subprocess.Popen(test_cmd, shell=True, stdout=subprocess.PIPE, subprocess.Popen(test_cmd, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate() stderr=subprocess.PIPE).communicate()
if options.logtime:
# get logged page load times from sdcard
test_cmd = (adb_cmd + "pull \"" + TEST_LOAD_TIME_FILE + "\" \""
+ options.logtime + "\"")
subprocess.Popen(test_cmd, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate()
ProcessPageLoadTime(options.logtime)
if "__main__" == __name__: if "__main__" == __name__:
option_parser = optparse.OptionParser() option_parser = optparse.OptionParser()
@@ -206,5 +250,8 @@ if "__main__" == __name__:
option_parser.add_option("-b", "--bugreport", option_parser.add_option("-b", "--bugreport",
default=".", default=".",
help="the directory to store bugreport for crashes") help="the directory to store bugreport for crashes")
option_parser.add_option("-l", "--logtime",
default=None,
help="Logs page load time for each url to the file")
opts, arguments = option_parser.parse_args() opts, arguments = option_parser.parse_args()
main(opts, arguments) main(opts, arguments)

View File

@@ -69,11 +69,16 @@ public class LayoutTestsAutoRunner extends InstrumentationTestRunner {
String r = (String)icicle.get("rebaseline"); String r = (String)icicle.get("rebaseline");
this.mRebaseline = (r != null && r.toLowerCase().equals("true")); this.mRebaseline = (r != null && r.toLowerCase().equals("true"));
super.onCreate(icicle); super.onCreate(icicle);
String logtime = (String) icicle.get("logtime");
this.mLogtime = (logtime != null
&& logtime.toLowerCase().equals("true"));
} }
public String mTestPath = null; public String mTestPath = null;
public int mTimeoutInMillis = 0; public int mTimeoutInMillis = 0;
public int mDelay = 0; public int mDelay = 0;
public boolean mRebaseline = false; public boolean mRebaseline = false;
public boolean mLogtime = false;
} }

View File

@@ -1,6 +1,7 @@
package com.android.dumprendertree; package com.android.dumprendertree;
import android.os.Handler; import android.os.Handler;
import android.os.Message;
import android.test.ActivityInstrumentationTestCase2; import android.test.ActivityInstrumentationTestCase2;
import android.util.Log; import android.util.Log;
@@ -21,6 +22,7 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit
private static final String TEST_LIST_FILE = "/sdcard/android/reliability_tests_list.txt"; private static final String TEST_LIST_FILE = "/sdcard/android/reliability_tests_list.txt";
private static final String TEST_STATUS_FILE = "/sdcard/android/reliability_running_test.txt"; private static final String TEST_STATUS_FILE = "/sdcard/android/reliability_running_test.txt";
private static final String TEST_TIMEOUT_FILE = "/sdcard/android/reliability_timeout_test.txt"; private static final String TEST_TIMEOUT_FILE = "/sdcard/android/reliability_timeout_test.txt";
private static final String TEST_LOAD_TIME_FILE = "/sdcard/android/reliability_load_time.txt";
private static final String TEST_DONE = "#DONE"; private static final String TEST_DONE = "#DONE";
static final String RELIABILITY_TEST_RUNNER_FILES[] = { static final String RELIABILITY_TEST_RUNNER_FILES[] = {
"run_reliability_tests.py" "run_reliability_tests.py"
@@ -65,9 +67,13 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit
//use message to send new URL to avoid interacting with //use message to send new URL to avoid interacting with
//WebView in non-UI thread //WebView in non-UI thread
handler = activity.getHandler(); handler = activity.getHandler();
handler.sendMessage(handler.obtainMessage( Message msg = handler.obtainMessage(
ReliabilityTestActivity.MSG_NAVIGATE, ReliabilityTestActivity.MSG_NAVIGATE,
runner.mTimeoutInMillis, runner.mDelay, url)); 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(); timeoutFlag = activity.waitUntilDone();
elapsed = System.currentTimeMillis() - start; elapsed = System.currentTimeMillis() - start;
if(elapsed < 1000) { if(elapsed < 1000) {
@@ -79,6 +85,9 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit
if(timeoutFlag) { if(timeoutFlag) {
writeTimeoutFile(url); writeTimeoutFile(url);
} }
if(runner.mLogtime) {
writeLoadTime(url, activity.getPageLoadTime());
}
System.runFinalization(); System.runFinalization();
System.gc(); System.gc();
System.gc(); System.gc();
@@ -171,4 +180,16 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit
Log.e(LOGTAG, "Cannot update file " + TEST_TIMEOUT_FILE, 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);
}
}
} }

View File

@@ -28,6 +28,8 @@ public class ReliabilityTestActivity extends Activity {
public static final int RESULT_TIMEOUT = 0xDEAD; public static final int RESULT_TIMEOUT = 0xDEAD;
public static final int MSG_TIMEOUT = 0xC001; public static final int MSG_TIMEOUT = 0xC001;
public static final int MSG_NAVIGATE = 0xC002; public static final int MSG_NAVIGATE = 0xC002;
public static final String MSG_NAV_URL = "url";
public static final String MSG_NAV_LOGTIME = "logtime";
private static final String LOGTAG = "ReliabilityTestActivity"; private static final String LOGTAG = "ReliabilityTestActivity";
@@ -36,10 +38,13 @@ public class ReliabilityTestActivity extends Activity {
private SimpleChromeClient chromeClient; private SimpleChromeClient chromeClient;
private Handler handler; private Handler handler;
private boolean timeoutFlag; private boolean timeoutFlag;
private boolean logTime;
private boolean pageDone; private boolean pageDone;
private Object pageDoneLock; private Object pageDoneLock;
private int pageStartCount; private int pageStartCount;
private int manualDelay; private int manualDelay;
private long startTime;
private long pageLoadTime;
private PageDoneRunner pageDoneRunner = new PageDoneRunner(); private PageDoneRunner pageDoneRunner = new PageDoneRunner();
@Override @Override
@@ -76,7 +81,8 @@ public class ReliabilityTestActivity extends Activity {
return; return;
case MSG_NAVIGATE: case MSG_NAVIGATE:
manualDelay = msg.arg2; manualDelay = msg.arg2;
navigate((String)msg.obj, msg.arg1); navigate(msg.getData().getString(MSG_NAV_URL), msg.arg1);
logTime = msg.getData().getBoolean(MSG_NAV_LOGTIME);
return; return;
} }
} }
@@ -100,6 +106,10 @@ public class ReliabilityTestActivity extends Activity {
finish(); finish();
} }
webView.stopLoading(); webView.stopLoading();
if(logTime) {
webView.clearCache(true);
}
startTime = System.currentTimeMillis();
Log.v(LOGTAG, "Navigating to URL: " + url); Log.v(LOGTAG, "Navigating to URL: " + url);
webView.loadUrl(url); webView.loadUrl(url);
@@ -162,6 +172,10 @@ public class ReliabilityTestActivity extends Activity {
} }
} }
public long getPageLoadTime() {
return pageLoadTime;
}
class SimpleWebViewClient extends WebViewClient { class SimpleWebViewClient extends WebViewClient {
@Override @Override
@@ -269,6 +283,7 @@ public class ReliabilityTestActivity extends Activity {
public void run() { public void run() {
Log.v(LOGTAG, "Finishing URL: " + webView.getUrl()); Log.v(LOGTAG, "Finishing URL: " + webView.getUrl());
pageLoadTime = System.currentTimeMillis() - startTime;
setPageDone(true); setPageDone(true);
} }
} }