Merge change 972 into donut
* changes:
Back-merge all changes done in master to DumpRenderTree to donut.
diff --git a/tests/DumpRenderTree/run_page_cycler.py b/tests/DumpRenderTree/assets/run_page_cycler.py
similarity index 92%
rename from tests/DumpRenderTree/run_page_cycler.py
rename to tests/DumpRenderTree/assets/run_page_cycler.py
index 9a099b5..2325047 100755
--- a/tests/DumpRenderTree/run_page_cycler.py
+++ b/tests/DumpRenderTree/assets/run_page_cycler.py
@@ -56,10 +56,11 @@
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#runTest -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 + run_load_test_cmd_postfix
(adb_output, adb_error) = subprocess.Popen(run_load_test_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
- if adb_output.find('INSTRUMENTATION_FAILED') != -1:
+ if adb_output.find('INSTRUMENTATION_FAILED') != -1 or \
+ adb_output.find('Process crashed.') != -1:
logging.error("Error happened : " + adb_output)
sys.exit(1)
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoTest.java b/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoTest.java
index 39eae02..562b1f3 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoTest.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/LayoutTestsAutoTest.java
@@ -16,24 +16,11 @@
package com.android.dumprendertree;
-import android.app.Activity;
import android.app.Instrumentation;
-import android.app.Instrumentation.ActivityMonitor;
-import android.content.ContentResolver;
-import android.content.ContentValues;
import android.content.Intent;
-
-import android.util.Log;
-import android.view.KeyEvent;
-import android.webkit.WebSettings;
-
import android.os.Bundle;
-import android.os.Message;
import android.test.ActivityInstrumentationTestCase2;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-import com.android.dumprendertree.TestShellActivity;
+import android.util.Log;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
@@ -141,6 +128,7 @@
private Vector<String> mTestList;
private boolean mRebaselineResults;
private String mTestPathPrefix;
+ private boolean mFinished;
public LayoutTestsAutoTest() {
super("com.android.dumprendertree", TestShellActivity.class);
@@ -290,6 +278,7 @@
activity.setCallback(new TestShellCallback() {
public void finished() {
synchronized (LayoutTestsAutoTest.this) {
+ mFinished = true;
LayoutTestsAutoTest.this.notifyAll();
}
}
@@ -306,6 +295,7 @@
resultFile = getAndroidExpectedResultFile(expectedResultFile);
}
+ mFinished = false;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClass(activity, TestShellActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
@@ -316,9 +306,11 @@
// Wait until done.
synchronized (this) {
- try {
- this.wait();
- } catch (InterruptedException e) { }
+ while(!mFinished){
+ try {
+ this.wait();
+ } catch (InterruptedException e) { }
+ }
}
if (!mRebaselineResults) {
@@ -478,7 +470,7 @@
byte[] buf = new byte[2048];
int len;
- while ((len = in.read(buf)) > 0 ) {
+ while ((len = in.read(buf)) >= 0 ) {
out.write(buf, 0, len);
}
out.close();
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/LoadTestsAutoTest.java b/tests/DumpRenderTree/src/com/android/dumprendertree/LoadTestsAutoTest.java
index b064dbb..5cb5155 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/LoadTestsAutoTest.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/LoadTestsAutoTest.java
@@ -16,52 +16,34 @@
package com.android.dumprendertree;
-import android.app.Activity;
import android.app.Instrumentation;
-import android.app.Instrumentation.ActivityMonitor;
import android.content.Intent;
import android.util.Log;
import android.os.Bundle;
+import android.os.Debug;
+import android.os.Debug.MemoryInfo;
import android.test.ActivityInstrumentationTestCase2;
import com.android.dumprendertree.TestShellActivity;
import com.android.dumprendertree.TestShellCallback;
-import java.io.InputStream;
-import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
-
-class StreamPipe extends Thread {
- InputStream in;
- OutputStream out;
-
- StreamPipe(InputStream in, OutputStream out) {
- this.in = in;
- this.out = out;
- }
-
- public void run() {
- try {
- byte[] buf = new byte[1024];
- int nofb = this.in.read(buf);
- while (nofb != -1) {
- this.out.write(buf, 0, nofb);
- nofb = this.in.read(buf);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2<TestShellActivity> {
private final static String LOGTAG = "LoadTest";
private final static String LOAD_TEST_RESULT = "/sdcard/load_test_result.txt";
-
+ private boolean mFinished;
+ static final String LOAD_TEST_RUNNER_FILES[] = {
+ "run_page_cycler.py"
+ };
+
public LoadTestsAutoTest() {
super("com.android.dumprendertree", TestShellActivity.class);
}
@@ -74,17 +56,17 @@
bundle.putBoolean(file, result);
inst.sendStatus(0, bundle);
}
-
+
// Invokes running of layout tests
// and waits till it has finished running.
- public void runTest() {
+ public void runPageCyclerTest() {
LayoutTestsAutoRunner runner = (LayoutTestsAutoRunner) getInstrumentation();
if (runner.mTestPath == null) {
Log.e(LOGTAG, "No test specified");
return;
}
-
+
TestShellActivity activity = (TestShellActivity) getActivity();
// Run tests
@@ -92,48 +74,69 @@
// TODO(fqian): let am instrumentation pass in the command line, currently
// am instrument does not allow spaces in the command.
- runPostShellCommand("/system/bin/dumpsys meminfo");
-
+ dumpMemoryInfo();
+
// Kill activity
activity.finish();
}
- private void runPostShellCommand(String cmd) {
- if (cmd == null || cmd.length() == 0)
- return;
-
+ private void dumpMemoryInfo() {
try {
- // Call dumpsys meminfo
- Process proc = Runtime.getRuntime().exec(cmd);
- // Append output to LOAD_TEST_RESULT
- InputStream input = proc.getInputStream();
- InputStream error = proc.getErrorStream();
- FileOutputStream out = new FileOutputStream(LOAD_TEST_RESULT, true);
+ Log.v(LOGTAG, "Dumping memory information.");
- StreamPipe p_in = new StreamPipe(input, out);
- StreamPipe p_err = new StreamPipe(error, System.err);
-
- p_in.start();
- p_err.start();
-
- proc.waitFor();
+ FileOutputStream out = new FileOutputStream(LOAD_TEST_RESULT, true);
+ PrintStream ps = new PrintStream(out);
+
+ MemoryInfo mi = new MemoryInfo();
+ Debug.getMemoryInfo(mi);
+
+ //try to fake the dumpsys format
+ //this will eventually be changed to XML
+ String format = "%15s:%9d%9d%9d%9d";
+ String pss =
+ String.format(format, "(Pss)",
+ mi.nativePss, mi.dalvikPss, mi.otherPss,
+ mi.nativePss + mi.dalvikPss + mi.otherPss);
+ String sd =
+ String.format(format, "(shared dirty)",
+ mi.nativeSharedDirty, mi.dalvikSharedDirty, mi.otherSharedDirty,
+ mi.nativeSharedDirty + mi.dalvikSharedDirty + mi.otherSharedDirty);
+ String pd =
+ String.format(format, "(priv dirty)",
+ mi.nativePrivateDirty, mi.dalvikPrivateDirty, mi.otherPrivateDirty,
+ mi.nativePrivateDirty + mi.dalvikPrivateDirty + mi.otherPrivateDirty);
+
+ ps.print("\n\n\n");
+ ps.println("** MEMINFO in pid 0 [com.android.dumprendertree] **");
+ ps.println(" native dalvik other total");
+ ps.println(" size: 12060 5255 N/A 17315");
+ ps.println(" allocated: 12060 5255 N/A 17315");
+ ps.println(" free: 12060 5255 N/A 17315");
+ ps.println(pss);
+ ps.println(sd);
+ ps.println(pd);
+ ps.print("\n\n\n");
+ ps.flush();
+ ps.close();
+ out.flush();
+ out.close();
} catch (IOException e) {
Log.e(LOGTAG, e.getMessage());
- } catch (InterruptedException e) {
- Log.e(LOGTAG, e.getMessage());
- }
+ }
}
-
+
// A convenient method to be called by another activity.
private void runTestAndWaitUntilDone(TestShellActivity activity, String url, int timeout) {
activity.setCallback(new TestShellCallback() {
public void finished() {
synchronized (LoadTestsAutoTest.this) {
+ mFinished = true;
LoadTestsAutoTest.this.notifyAll();
}
- }
+ }
});
-
+
+ mFinished = false;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClass(activity, TestShellActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
@@ -141,12 +144,41 @@
intent.putExtra(TestShellActivity.TIMEOUT_IN_MILLIS, timeout);
intent.putExtra(TestShellActivity.RESULT_FILE, LOAD_TEST_RESULT);
activity.startActivity(intent);
-
+
// Wait until done.
synchronized (this) {
- try {
- this.wait();
- } catch (InterruptedException e) { }
+ while(!mFinished) {
+ try {
+ this.wait();
+ } catch (InterruptedException e) { }
+ }
}
- }
+ }
+
+ public void copyRunnerAssetsToCache() {
+ try {
+ String out_dir = getActivity().getApplicationContext()
+ .getCacheDir().getPath() + "/";
+
+ for( int i=0; i< LOAD_TEST_RUNNER_FILES.length; i++) {
+ InputStream in = getActivity().getAssets().open(
+ LOAD_TEST_RUNNER_FILES[i]);
+ OutputStream out = new FileOutputStream(
+ out_dir + LOAD_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) {
+ e.printStackTrace();
+ }
+
+ }
+
}
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
index bf8a3b3..404d101 100644
--- a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
+++ b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java
@@ -165,7 +165,8 @@
if (mDialogStrings != null)
os.write(mDialogStrings.toString().getBytes());
mDialogStrings = null;
- os.write(webkitData.getBytes());
+ if (webkitData != null)
+ os.write(webkitData.getBytes());
os.flush();
os.close();
} catch (IOException ex) {