OSDN Git Service

Wait for target package MessageQueue empty before continuing
authorArthur Eubanks <aeubanks@google.com>
Mon, 5 Feb 2018 22:53:04 +0000 (14:53 -0800)
committerArthur Eubanks <aeubanks@google.com>
Tue, 6 Feb 2018 00:12:02 +0000 (16:12 -0800)
By using Looper.myQueue().addIdleHandler(), the variance for perf tests
decreases dramatically.

Before:
registeredBroadcast_mean=12162588
registeredBroadcast_median=9496511
registeredBroadcast_stddev=10821157
manifestBroadcastRunning_mean=16673251
manifestBroadcastRunning_median=11859325
manifestBroadcastRunning_stddev=13329366
manifestBroadcastNotRunning_mean=59187569
manifestBroadcastNotRunning_median=55761932
manifestBroadcastNotRunning_stddev=14805616

Now:
registeredBroadcast_mean=940791
registeredBroadcast_median=889583
registeredBroadcast_stddev=157170
manifestBroadcastRunning_mean=1396281
manifestBroadcastRunning_median=1364531
manifestBroadcastRunning_stddev=189226
manifestBroadcastNotRunning_mean=59161472
manifestBroadcastNotRunning_median=56538781
manifestBroadcastNotRunning_stddev=14414728

Test: m ActivityManagerPerfTestsTestApp ActivityManagerPerfTests
Test: adb install \
$OUT/data/app/ActivityManagerPerfTestsTestApp/ActivityManagerPerfTestsTestApp.apk
Test: adb install \
$OUT/data/app/ActivityManagerPerfTests/ActivityManagerPerfTests.apk
Test: adb shell am instrument -w
com.android.frameworks.perftests.amtests/android.support.test.runner.AndroidJUnitRunner

Change-Id: I05714294c53f3d013a080dfaa617e1fc92fd14e0

tests/ActivityManagerPerfTests/test-app/src/com/android/frameworks/perftests/amteststestapp/TestActivity.java
tests/ActivityManagerPerfTests/tests/src/com/android/frameworks/perftests/am/util/TargetPackageUtils.java
tests/ActivityManagerPerfTests/utils/src/com/android/frameworks/perftests/am/util/Constants.java

index 7ea9ba3..1f06121 100644 (file)
 package com.android.frameworks.perftests.amteststestapp;
 
 import android.app.Activity;
-import android.os.Bundle;
+import android.os.Looper;
+import android.os.MessageQueue;
 
 import com.android.frameworks.perftests.am.util.Constants;
 import com.android.frameworks.perftests.am.util.Utils;
 
 public class TestActivity extends Activity {
     @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        Utils.sendTime(getIntent(), Constants.TYPE_ACTIVITY_CREATED);
+    protected void onResume() {
+        super.onResume();
+        Looper.myQueue().addIdleHandler(() -> {
+            Utils.sendTime(getIntent(), Constants.TYPE_TARGET_PACKAGE_START);
+            return false;
+        });
     }
 }
index c867141..26a8e7b 100644 (file)
@@ -62,7 +62,7 @@ public class TargetPackageUtils {
             sleep();
         }
         // make sure Application has run
-        timeReceiver.getReceivedTimeNs(Constants.TYPE_ACTIVITY_CREATED);
+        timeReceiver.getReceivedTimeNs(Constants.TYPE_TARGET_PACKAGE_START);
         Utils.drainBroadcastQueue();
     }
 
index 6528028..f35c2fd 100644 (file)
@@ -17,7 +17,7 @@
 package com.android.frameworks.perftests.am.util;
 
 public class Constants {
-    public static final String TYPE_ACTIVITY_CREATED = "activity_create";
+    public static final String TYPE_TARGET_PACKAGE_START = "target_package_start";
     public static final String TYPE_BROADCAST_RECEIVE = "broadcast_receive";
 
     public static final String ACTION_BROADCAST_MANIFEST_RECEIVE =