From 5dc4f21ab6360b45f464c1451f8d403dd4df3c63 Mon Sep 17 00:00:00 2001 From: Guang Zhu Date: Thu, 29 Oct 2009 18:24:54 -0700 Subject: [PATCH] Add support for extracting render time and image in page cycler --- .../DumpRenderTree/assets/run_page_cycler.py | 28 +++++++-- .../com/android/dumprendertree/FsUtils.java | 40 +++++++++++++ .../dumprendertree/LayoutTestsAutoRunner.java | 9 ++- .../dumprendertree/LoadTestsAutoTest.java | 9 ++- .../dumprendertree/TestShellActivity.java | 59 +++++++++++++++++++ 5 files changed, 136 insertions(+), 9 deletions(-) diff --git a/tests/DumpRenderTree/assets/run_page_cycler.py b/tests/DumpRenderTree/assets/run_page_cycler.py index 7dd4a882fd804..8b8fb38cc688f 100755 --- a/tests/DumpRenderTree/assets/run_page_cycler.py +++ b/tests/DumpRenderTree/assets/run_page_cycler.py @@ -20,7 +20,7 @@ import time def main(options, args): """Run the tests. Will call sys.exit when complete. - + """ # Set up logging format. @@ -56,7 +56,15 @@ def main(options, args): run_load_test_cmd_postfix = " -w com.android.dumprendertree/.LayoutTestsAutoRunner" # Call LoadTestsAutoTest::runTest. - run_load_test_cmd = run_load_test_cmd_prefix + " -e class com.android.dumprendertree.LoadTestsAutoTest#runPageCyclerTest -e path \"" + path + "\" -e timeout " + timeout_ms + run_load_test_cmd_postfix + run_load_test_cmd = run_load_test_cmd_prefix + " -e class com.android.dumprendertree.LoadTestsAutoTest#runPageCyclerTest -e path \"" + path + "\" -e timeout " + timeout_ms + + if options.drawtime: + run_load_test_cmd += " -e drawtime true " + + if options.save_image: + run_load_test_cmd += " -e saveimage \"%s\"" % options.save_image + + run_load_test_cmd += run_load_test_cmd_postfix (adb_output, adb_error) = subprocess.Popen(run_load_test_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() fail_flag = False @@ -101,18 +109,26 @@ def main(options, args): if '__main__' == __name__: option_parser = optparse.OptionParser() - option_parser.add_option("", "--time-out-ms", + option_parser.add_option("-t", "--time-out-ms", default=None, help="set the timeout for each test") - option_parser.add_option("", "--verbose", action="store_true", + option_parser.add_option("-v", "--verbose", action="store_true", default=False, help="include debug-level logging") - option_parser.add_option("", "--adb-options", + option_parser.add_option("-a", "--adb-options", default=None, help="pass options to adb, such as -d -e, etc"); - option_parser.add_option("", "--results-directory", + option_parser.add_option("-r", "--results-directory", default="layout-test-results", help="directory which results are stored.") + option_parser.add_option("-d", "--drawtime", action="store_true", + default=False, + help="log draw time for each page rendered.") + + option_parser.add_option("-s", "--save-image", + default=None, + help="stores rendered page to a location on device.") + options, args = option_parser.parse_args(); main(options, args) diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java b/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java index fea366cff3748..1a265e807a58c 100644 --- a/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java +++ b/tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java @@ -25,6 +25,7 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; +import java.io.FileWriter; import java.io.IOException; import java.util.regex.Pattern; @@ -156,4 +157,43 @@ public class FsUtils { return same; } + public static boolean isTestPageUrl(String url) { + int qmPostion = url.indexOf('?'); + int slashPostion = url.lastIndexOf('/'); + if (slashPostion < qmPostion) { + String fileName = url.substring(slashPostion + 1, qmPostion); + if ("index.html".equals(fileName)) { + return true; + } + } + return false; + } + + public static String getLastSegmentInPath(String path) { + int endPos = path.lastIndexOf('/'); + path = path.substring(0, endPos); + endPos = path.lastIndexOf('/'); + return path.substring(endPos + 1); + } + + public static void writeDrawTime(String fileName, String url, long[] times) { + StringBuffer lineBuffer = new StringBuffer(); + // grab the last segment of path in url + lineBuffer.append(getLastSegmentInPath(url)); + for (long time : times) { + lineBuffer.append('\t'); + lineBuffer.append(time); + } + lineBuffer.append('\n'); + String line = lineBuffer.toString(); + Log.v(LOGTAG, "logging draw times: " + line); + try { + FileWriter fw = new FileWriter(fileName, true); + fw.write(line); + fw.close(); + } catch (IOException ioe) { + Log.e(LOGTAG, "Failed to log draw times", ioe); + } + } + } diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoRunner.java b/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoRunner.java index 283b98cdf3572..539d55105b230 100755 --- a/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoRunner.java +++ b/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoRunner.java @@ -73,13 +73,20 @@ public class LayoutTestsAutoRunner extends InstrumentationTestRunner { this.mLogtime = (logtime != null && logtime.toLowerCase().equals("true")); + String drawTime = (String) icicle.get("drawtime"); + this.mGetDrawTime = (drawTime != null + && drawTime.toLowerCase().equals("true")); + + mSaveImagePath = (String) icicle.get("saveimage"); + super.onCreate(icicle); } public String mTestPath = null; + public String mSaveImagePath = null; public int mTimeoutInMillis = 0; public int mDelay = 0; public boolean mRebaseline = false; public boolean mLogtime = false; + public boolean mGetDrawTime = false; } - diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/LoadTestsAutoTest.java b/tests/DumpRenderTree/src/com/android/dumprendertree/LoadTestsAutoTest.java index ba461973fbfb2..2ef342f6c5cd0 100644 --- a/tests/DumpRenderTree/src/com/android/dumprendertree/LoadTestsAutoTest.java +++ b/tests/DumpRenderTree/src/com/android/dumprendertree/LoadTestsAutoTest.java @@ -70,7 +70,8 @@ public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2