Merge "add a self instrumentation into framework perf app" into ics-mr1

This commit is contained in:
Guang Zhu
2011-11-17 18:04:23 -08:00
committed by Android (Google) Code Review
4 changed files with 73 additions and 13 deletions

View File

@@ -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)

View File

@@ -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>

View File

@@ -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();
} }
} }
} }

View File

@@ -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);
}
}