summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorGuang Zhu <guangzhu@google.com>2009-12-02 20:48:40 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2009-12-02 20:48:40 -0800
commit6c03325573dbc428b46025047635253f7466fb1a (patch)
treebe2c9774b3283187e7f35fede2ef94b6cb484bb7 /tests
parentcc602381656b13dfc20e51ef1dc4302364ea82dc (diff)
parent26fd38401132ac13cf0c465bcfde27aa3ae989b5 (diff)
downloadframeworks_base-6c03325573dbc428b46025047635253f7466fb1a.zip
frameworks_base-6c03325573dbc428b46025047635253f7466fb1a.tar.gz
frameworks_base-6c03325573dbc428b46025047635253f7466fb1a.tar.bz2
am 26fd3840: am 7dd3337b: Merge change I8179742a into eclair-mr2
Merge commit '26fd38401132ac13cf0c465bcfde27aa3ae989b5' * commit '26fd38401132ac13cf0c465bcfde27aa3ae989b5': Add support for extracting render time and image in page cycler
Diffstat (limited to 'tests')
-rwxr-xr-xtests/DumpRenderTree/assets/run_page_cycler.py28
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/FsUtils.java40
-rwxr-xr-xtests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoRunner.java9
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/LoadTestsAutoTest.java9
-rw-r--r--tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java59
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 7dd4a88..8b8fb38 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 fea366c..1a265e8 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 283b98c..539d551 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 ba46197..2ef342f 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<TestShel
freeMem();
// Run tests
- runTestAndWaitUntilDone(activity, runner.mTestPath, runner.mTimeoutInMillis);
+ runTestAndWaitUntilDone(activity, runner.mTestPath, runner.mTimeoutInMillis,
+ runner.mGetDrawTime, runner.mSaveImagePath);
activity.clearCache();
try {
@@ -161,7 +162,8 @@ public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2<TestShel
}
// A convenient method to be called by another activity.
- private void runTestAndWaitUntilDone(TestShellActivity activity, String url, int timeout) {
+ private void runTestAndWaitUntilDone(TestShellActivity activity, String url, int timeout,
+ boolean getDrawTime, String saveImagePath) {
activity.setCallback(new TestShellCallback() {
public void finished() {
synchronized (LoadTestsAutoTest.this) {
@@ -181,6 +183,9 @@ 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.
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
index aeb55b4..b6b1661 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
@@ -25,6 +25,9 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Bitmap.CompressFormat;
+import android.graphics.Bitmap.Config;
import android.net.http.SslError;
import android.os.Bundle;
import android.os.Handler;
@@ -163,6 +166,8 @@ 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);
Log.v(LOGTAG, " Loading " + mTestUrl);
mWebView.loadUrl(mTestUrl);
@@ -459,6 +464,18 @@ 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.
if (finished()) {
@@ -691,6 +708,41 @@ public class TestShellActivity extends Activity implements LayoutTestController
mPageFinished = false;
mOneHundredPercentComplete = false;
mDumpWebKitData = false;
+ mGetDrawtime = false;
+ mSaveImagePath = null;
+ }
+
+ 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);
+ 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() {
@@ -730,7 +782,9 @@ 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;
// States
private boolean mTimedOut;
@@ -766,6 +820,11 @@ public class TestShellActivity extends Activity implements LayoutTestController
static final String RESULT_FILE = "ResultFile";
static final String TIMEOUT_IN_MILLIS = "TimeoutInMillis";
static final String UI_AUTO_TEST = "UiAutoTest";
+ static final String GET_DRAW_TIME = "GetDrawTime";
+ static final String SAVE_IMAGE = "SaveImage";
+
+ static final int DRAW_RUNS = 5;
+ static final String DRAW_TIME_LOG = "/sdcard/android/page_draw_time.txt";
private boolean mGeolocationPermissionSet;
private boolean mGeolocationPermission;