Merge change 972 into donut

* changes:
  Back-merge all changes done in master to DumpRenderTree to donut.
This commit is contained in:
Android (Google) Code Review
2009-05-05 11:16:17 -07:00
4 changed files with 108 additions and 82 deletions

View File

@@ -56,10 +56,11 @@ def main(options, args):
run_load_test_cmd_postfix = " -w com.android.dumprendertree/.LayoutTestsAutoRunner" run_load_test_cmd_postfix = " -w com.android.dumprendertree/.LayoutTestsAutoRunner"
# Call LoadTestsAutoTest::runTest. # 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() (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) logging.error("Error happened : " + adb_output)
sys.exit(1) sys.exit(1)

View File

@@ -16,24 +16,11 @@
package com.android.dumprendertree; package com.android.dumprendertree;
import android.app.Activity;
import android.app.Instrumentation; import android.app.Instrumentation;
import android.app.Instrumentation.ActivityMonitor;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent; import android.content.Intent;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.os.Bundle; import android.os.Bundle;
import android.os.Message;
import android.test.ActivityInstrumentationTestCase2; import android.test.ActivityInstrumentationTestCase2;
import android.test.AndroidTestCase; import android.util.Log;
import android.test.suitebuilder.annotation.LargeTest;
import com.android.dumprendertree.TestShellActivity;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.io.BufferedReader; import java.io.BufferedReader;
@@ -141,6 +128,7 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
private Vector<String> mTestList; private Vector<String> mTestList;
private boolean mRebaselineResults; private boolean mRebaselineResults;
private String mTestPathPrefix; private String mTestPathPrefix;
private boolean mFinished;
public LayoutTestsAutoTest() { public LayoutTestsAutoTest() {
super("com.android.dumprendertree", TestShellActivity.class); super("com.android.dumprendertree", TestShellActivity.class);
@@ -290,6 +278,7 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
activity.setCallback(new TestShellCallback() { activity.setCallback(new TestShellCallback() {
public void finished() { public void finished() {
synchronized (LayoutTestsAutoTest.this) { synchronized (LayoutTestsAutoTest.this) {
mFinished = true;
LayoutTestsAutoTest.this.notifyAll(); LayoutTestsAutoTest.this.notifyAll();
} }
} }
@@ -306,6 +295,7 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
resultFile = getAndroidExpectedResultFile(expectedResultFile); resultFile = getAndroidExpectedResultFile(expectedResultFile);
} }
mFinished = false;
Intent intent = new Intent(Intent.ACTION_VIEW); Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClass(activity, TestShellActivity.class); intent.setClass(activity, TestShellActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
@@ -316,9 +306,11 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
// Wait until done. // Wait until done.
synchronized (this) { synchronized (this) {
try { while(!mFinished){
this.wait(); try {
} catch (InterruptedException e) { } this.wait();
} catch (InterruptedException e) { }
}
} }
if (!mRebaselineResults) { if (!mRebaselineResults) {
@@ -478,7 +470,7 @@ public class LayoutTestsAutoTest extends ActivityInstrumentationTestCase2<TestSh
byte[] buf = new byte[2048]; byte[] buf = new byte[2048];
int len; int len;
while ((len = in.read(buf)) > 0 ) { while ((len = in.read(buf)) >= 0 ) {
out.write(buf, 0, len); out.write(buf, 0, len);
} }
out.close(); out.close();

View File

@@ -16,52 +16,34 @@
package com.android.dumprendertree; package com.android.dumprendertree;
import android.app.Activity;
import android.app.Instrumentation; import android.app.Instrumentation;
import android.app.Instrumentation.ActivityMonitor;
import android.content.Intent; import android.content.Intent;
import android.util.Log; import android.util.Log;
import android.os.Bundle; import android.os.Bundle;
import android.os.Debug;
import android.os.Debug.MemoryInfo;
import android.test.ActivityInstrumentationTestCase2; import android.test.ActivityInstrumentationTestCase2;
import com.android.dumprendertree.TestShellActivity; import com.android.dumprendertree.TestShellActivity;
import com.android.dumprendertree.TestShellCallback; import com.android.dumprendertree.TestShellCallback;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
class StreamPipe extends Thread { import java.io.OutputStream;
InputStream in; import java.io.PrintStream;
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();
}
}
}
public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2<TestShellActivity> { public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2<TestShellActivity> {
private final static String LOGTAG = "LoadTest"; private final static String LOGTAG = "LoadTest";
private final static String LOAD_TEST_RESULT = "/sdcard/load_test_result.txt"; 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() { public LoadTestsAutoTest() {
super("com.android.dumprendertree", TestShellActivity.class); super("com.android.dumprendertree", TestShellActivity.class);
} }
@@ -74,17 +56,17 @@ public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2<TestShel
bundle.putBoolean(file, result); bundle.putBoolean(file, result);
inst.sendStatus(0, bundle); inst.sendStatus(0, bundle);
} }
// Invokes running of layout tests // Invokes running of layout tests
// and waits till it has finished running. // and waits till it has finished running.
public void runTest() { public void runPageCyclerTest() {
LayoutTestsAutoRunner runner = (LayoutTestsAutoRunner) getInstrumentation(); LayoutTestsAutoRunner runner = (LayoutTestsAutoRunner) getInstrumentation();
if (runner.mTestPath == null) { if (runner.mTestPath == null) {
Log.e(LOGTAG, "No test specified"); Log.e(LOGTAG, "No test specified");
return; return;
} }
TestShellActivity activity = (TestShellActivity) getActivity(); TestShellActivity activity = (TestShellActivity) getActivity();
// Run tests // Run tests
@@ -92,48 +74,69 @@ public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2<TestShel
// TODO(fqian): let am instrumentation pass in the command line, currently // TODO(fqian): let am instrumentation pass in the command line, currently
// am instrument does not allow spaces in the command. // am instrument does not allow spaces in the command.
runPostShellCommand("/system/bin/dumpsys meminfo"); dumpMemoryInfo();
// Kill activity // Kill activity
activity.finish(); activity.finish();
} }
private void runPostShellCommand(String cmd) { private void dumpMemoryInfo() {
if (cmd == null || cmd.length() == 0)
return;
try { try {
// Call dumpsys meminfo Log.v(LOGTAG, "Dumping memory information.");
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);
StreamPipe p_in = new StreamPipe(input, out); FileOutputStream out = new FileOutputStream(LOAD_TEST_RESULT, true);
StreamPipe p_err = new StreamPipe(error, System.err); PrintStream ps = new PrintStream(out);
p_in.start(); MemoryInfo mi = new MemoryInfo();
p_err.start(); Debug.getMemoryInfo(mi);
proc.waitFor(); //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) { } catch (IOException e) {
Log.e(LOGTAG, e.getMessage()); Log.e(LOGTAG, e.getMessage());
} catch (InterruptedException e) { }
Log.e(LOGTAG, e.getMessage());
}
} }
// A convenient method to be called by another activity. // 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) {
activity.setCallback(new TestShellCallback() { activity.setCallback(new TestShellCallback() {
public void finished() { public void finished() {
synchronized (LoadTestsAutoTest.this) { synchronized (LoadTestsAutoTest.this) {
mFinished = true;
LoadTestsAutoTest.this.notifyAll(); LoadTestsAutoTest.this.notifyAll();
} }
} }
}); });
mFinished = false;
Intent intent = new Intent(Intent.ACTION_VIEW); Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClass(activity, TestShellActivity.class); intent.setClass(activity, TestShellActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
@@ -141,12 +144,41 @@ public class LoadTestsAutoTest extends ActivityInstrumentationTestCase2<TestShel
intent.putExtra(TestShellActivity.TIMEOUT_IN_MILLIS, timeout); intent.putExtra(TestShellActivity.TIMEOUT_IN_MILLIS, timeout);
intent.putExtra(TestShellActivity.RESULT_FILE, LOAD_TEST_RESULT); intent.putExtra(TestShellActivity.RESULT_FILE, LOAD_TEST_RESULT);
activity.startActivity(intent); activity.startActivity(intent);
// Wait until done. // Wait until done.
synchronized (this) { synchronized (this) {
try { while(!mFinished) {
this.wait(); try {
} catch (InterruptedException e) { } 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();
}
}
} }

View File

@@ -165,7 +165,8 @@ public class TestShellActivity extends Activity implements LayoutTestController
if (mDialogStrings != null) if (mDialogStrings != null)
os.write(mDialogStrings.toString().getBytes()); os.write(mDialogStrings.toString().getBytes());
mDialogStrings = null; mDialogStrings = null;
os.write(webkitData.getBytes()); if (webkitData != null)
os.write(webkitData.getBytes());
os.flush(); os.flush();
os.close(); os.close();
} catch (IOException ex) { } catch (IOException ex) {