Merge "add a self instrumentation into framework perf app" into ics-mr1
This commit is contained in:
@@ -7,6 +7,8 @@ LOCAL_SRC_FILES := $(call all-subdir-java-files)
|
|||||||
|
|
||||||
LOCAL_PACKAGE_NAME := FrameworkPerf
|
LOCAL_PACKAGE_NAME := FrameworkPerf
|
||||||
|
|
||||||
|
LOCAL_JAVA_LIBRARIES := android.test.runner
|
||||||
|
|
||||||
LOCAL_AAPT_FLAGS = -c 120dpi,240dpi,160dpi,161dpi,320dpi,nodpi
|
LOCAL_AAPT_FLAGS = -c 120dpi,240dpi,160dpi,161dpi,320dpi,nodpi
|
||||||
|
|
||||||
include $(BUILD_PACKAGE)
|
include $(BUILD_PACKAGE)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
<uses-sdk android:minSdkVersion="5" />
|
<uses-sdk android:minSdkVersion="5" />
|
||||||
|
|
||||||
<application android:hardwareAccelerated="false">
|
<application android:hardwareAccelerated="false">
|
||||||
|
<uses-library android:name="android.test.runner" />
|
||||||
<activity android:name="FrameworkPerfActivity" android:label="Framework Perf">
|
<activity android:name="FrameworkPerfActivity" android:label="Framework Perf">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
@@ -20,4 +21,9 @@
|
|||||||
<receiver android:name="Receiver" android:exported="true">
|
<receiver android:name="Receiver" android:exported="true">
|
||||||
</receiver>
|
</receiver>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
<instrumentation android:name="android.test.InstrumentationTestRunner"
|
||||||
|
android:targetPackage="com.android.frameworkperf"
|
||||||
|
android:label="Framework Perf Runner"
|
||||||
|
/>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ public class FrameworkPerfActivity extends Activity
|
|||||||
|
|
||||||
final ArrayList<RunResult> mResults = new ArrayList<RunResult>();
|
final ArrayList<RunResult> mResults = new ArrayList<RunResult>();
|
||||||
|
|
||||||
|
Object mResultNotifier = new Object();
|
||||||
|
|
||||||
class TestConnection implements ServiceConnection, IBinder.DeathRecipient {
|
class TestConnection implements ServiceConnection, IBinder.DeathRecipient {
|
||||||
Messenger mService;
|
Messenger mService;
|
||||||
boolean mLinked;
|
boolean mLinked;
|
||||||
@@ -266,7 +268,9 @@ public class FrameworkPerfActivity extends Activity
|
|||||||
log(String.format("%s: fg=%d*%gms/op (%dms) / bg=%d*%gms/op (%dms)",
|
log(String.format("%s: fg=%d*%gms/op (%dms) / bg=%d*%gms/op (%dms)",
|
||||||
result.name, result.fgOps, result.getFgMsPerOp(), result.fgTime,
|
result.name, result.fgOps, result.getFgMsPerOp(), result.fgTime,
|
||||||
result.bgOps, result.getBgMsPerOp(), result.bgTime));
|
result.bgOps, result.getBgMsPerOp(), result.bgTime));
|
||||||
mResults.add(result);
|
synchronized (mResults) {
|
||||||
|
mResults.add(result);
|
||||||
|
}
|
||||||
if (!mStarted) {
|
if (!mStarted) {
|
||||||
log("Stop");
|
log("Stop");
|
||||||
stopRunning();
|
stopRunning();
|
||||||
@@ -376,7 +380,9 @@ public class FrameworkPerfActivity extends Activity
|
|||||||
startService(new Intent(this, SchedulerService.class));
|
startService(new Intent(this, SchedulerService.class));
|
||||||
mCurOpIndex = 0;
|
mCurOpIndex = 0;
|
||||||
mMaxRunTime = Integer.parseInt(mTestTime.getText().toString());
|
mMaxRunTime = Integer.parseInt(mTestTime.getText().toString());
|
||||||
mResults.clear();
|
synchronized (mResults) {
|
||||||
|
mResults.clear();
|
||||||
|
}
|
||||||
startCurOp();
|
startCurOp();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -393,17 +399,22 @@ public class FrameworkPerfActivity extends Activity
|
|||||||
mBgSpinner.setEnabled(true);
|
mBgSpinner.setEnabled(true);
|
||||||
updateWakeLock();
|
updateWakeLock();
|
||||||
stopService(new Intent(this, SchedulerService.class));
|
stopService(new Intent(this, SchedulerService.class));
|
||||||
for (int i=0; i<mResults.size(); i++) {
|
synchronized (mResults) {
|
||||||
RunResult result = mResults.get(i);
|
for (int i=0; i<mResults.size(); i++) {
|
||||||
float fgMsPerOp = result.getFgMsPerOp();
|
RunResult result = mResults.get(i);
|
||||||
float bgMsPerOp = result.getBgMsPerOp();
|
float fgMsPerOp = result.getFgMsPerOp();
|
||||||
String fgMsPerOpStr = fgMsPerOp != 0 ? Float.toString(fgMsPerOp) : "";
|
float bgMsPerOp = result.getBgMsPerOp();
|
||||||
String bgMsPerOpStr = bgMsPerOp != 0 ? Float.toString(bgMsPerOp) : "";
|
String fgMsPerOpStr = fgMsPerOp != 0 ? Float.toString(fgMsPerOp) : "";
|
||||||
Log.i("PerfRes", "\t" + result.name + "\t" + result.fgOps
|
String bgMsPerOpStr = bgMsPerOp != 0 ? Float.toString(bgMsPerOp) : "";
|
||||||
+ "\t" + result.getFgMsPerOp() + "\t" + result.fgTime
|
Log.i("PerfRes", "\t" + result.name + "\t" + result.fgOps
|
||||||
+ "\t" + result.fgLongName + "\t" + result.bgOps
|
+ "\t" + result.getFgMsPerOp() + "\t" + result.fgTime
|
||||||
+ "\t" + result.getBgMsPerOp() + "\t" + result.bgTime
|
+ "\t" + result.fgLongName + "\t" + result.bgOps
|
||||||
+ "\t" + result.bgLongName);
|
+ "\t" + result.getBgMsPerOp() + "\t" + result.bgTime
|
||||||
|
+ "\t" + result.bgLongName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
synchronized (mResultNotifier) {
|
||||||
|
mResultNotifier.notifyAll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package com.android.frameworkperf;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.test.ActivityInstrumentationTestCase2;
|
||||||
|
|
||||||
|
public class FrameworkPerfTest extends ActivityInstrumentationTestCase2<FrameworkPerfActivity> {
|
||||||
|
|
||||||
|
private static final int TEST_TIMEOUT = 15 * 60 * 1000; //15 minutes
|
||||||
|
|
||||||
|
public FrameworkPerfTest() {
|
||||||
|
super("com.android.frameworkperf", FrameworkPerfActivity.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testFrameworkPerf() {
|
||||||
|
final FrameworkPerfActivity activity = getActivity();
|
||||||
|
synchronized (activity.mResultNotifier) {
|
||||||
|
getInstrumentation().runOnMainSync(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
activity.startRunning();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
activity.mResultNotifier.wait(TEST_TIMEOUT);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
fail("test interrupted.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Bundle testResult = new Bundle();
|
||||||
|
synchronized (activity.mResults) {
|
||||||
|
assertTrue("test results were empty.", activity.mResults.size() > 0);
|
||||||
|
for (RunResult result : activity.mResults) {
|
||||||
|
testResult.putString(result.name, String.format("%f,%d,%d,%f,%d,%d",
|
||||||
|
result.getFgMsPerOp(), result.fgOps, result.fgTime,
|
||||||
|
result.getBgMsPerOp(), result.bgOps, result.bgTime));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getInstrumentation().sendStatus(Activity.RESULT_OK, testResult);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user