Merge change 972 into donut
* changes: Back-merge all changes done in master to DumpRenderTree to donut.
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user