Merge change 3761 into donut
* changes: Added support to record page load time for each url.
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user