From 5eefd7711f63bc1b67ec927a8c43363f426121cc Mon Sep 17 00:00:00 2001 From: Guang Zhu Date: Thu, 17 Nov 2011 14:32:41 -0800 Subject: add a self instrumentation into framework perf app It's essentially a test app on itself to facilitate running the perf automatically. Change-Id: I5aad3565e64719d219e76969a989ca80aa6df286 --- tests/FrameworkPerf/Android.mk | 2 ++ tests/FrameworkPerf/AndroidManifest.xml | 6 ++++ .../frameworkperf/FrameworkPerfActivity.java | 37 ++++++++++++------- .../android/frameworkperf/FrameworkPerfTest.java | 41 ++++++++++++++++++++++ 4 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 tests/FrameworkPerf/src/com/android/frameworkperf/FrameworkPerfTest.java (limited to 'tests/FrameworkPerf') diff --git a/tests/FrameworkPerf/Android.mk b/tests/FrameworkPerf/Android.mk index 03893d6..2eb52f0 100644 --- a/tests/FrameworkPerf/Android.mk +++ b/tests/FrameworkPerf/Android.mk @@ -7,6 +7,8 @@ LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := FrameworkPerf +LOCAL_JAVA_LIBRARIES := android.test.runner + LOCAL_AAPT_FLAGS = -c 120dpi,240dpi,160dpi,161dpi,320dpi,nodpi include $(BUILD_PACKAGE) diff --git a/tests/FrameworkPerf/AndroidManifest.xml b/tests/FrameworkPerf/AndroidManifest.xml index e88f4fb..2591aaf 100644 --- a/tests/FrameworkPerf/AndroidManifest.xml +++ b/tests/FrameworkPerf/AndroidManifest.xml @@ -4,6 +4,7 @@ + @@ -20,4 +21,9 @@ + + diff --git a/tests/FrameworkPerf/src/com/android/frameworkperf/FrameworkPerfActivity.java b/tests/FrameworkPerf/src/com/android/frameworkperf/FrameworkPerfActivity.java index 175f227..8ee5978 100644 --- a/tests/FrameworkPerf/src/com/android/frameworkperf/FrameworkPerfActivity.java +++ b/tests/FrameworkPerf/src/com/android/frameworkperf/FrameworkPerfActivity.java @@ -73,6 +73,8 @@ public class FrameworkPerfActivity extends Activity final ArrayList mResults = new ArrayList(); + Object mResultNotifier = new Object(); + class TestConnection implements ServiceConnection, IBinder.DeathRecipient { Messenger mService; 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)", result.name, result.fgOps, result.getFgMsPerOp(), result.fgTime, result.bgOps, result.getBgMsPerOp(), result.bgTime)); - mResults.add(result); + synchronized (mResults) { + mResults.add(result); + } if (!mStarted) { log("Stop"); stopRunning(); @@ -376,7 +380,9 @@ public class FrameworkPerfActivity extends Activity startService(new Intent(this, SchedulerService.class)); mCurOpIndex = 0; mMaxRunTime = Integer.parseInt(mTestTime.getText().toString()); - mResults.clear(); + synchronized (mResults) { + mResults.clear(); + } startCurOp(); } } @@ -393,17 +399,22 @@ public class FrameworkPerfActivity extends Activity mBgSpinner.setEnabled(true); updateWakeLock(); stopService(new Intent(this, SchedulerService.class)); - for (int i=0; i { + + 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); + } +} -- cgit v1.1