From 880721b38b861d44af25b3384efffd69bbe47d0c Mon Sep 17 00:00:00 2001 From: Alan Leung Date: Mon, 16 May 2016 21:12:33 -0700 Subject: [PATCH] Enable boost-locked-region-priority Enable jack.transformations.boost-locked-region-priority compiler pass that had shown to increase performance in AmSlam by 10% or so. bug: 28610549 Change-Id: If1b76787acd272882647ede7e831cb1ba376e578 --- services/core/Android.mk | 6 +++++ .../server/am/ActivityManagerService.java | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/services/core/Android.mk b/services/core/Android.mk index 860f60a019365..b965ce39e7d59 100644 --- a/services/core/Android.mk +++ b/services/core/Android.mk @@ -24,4 +24,10 @@ ifneq ($(INCREMENTAL_BUILDS),) LOCAL_JACK_ENABLED := incremental endif +LOCAL_JACK_FLAGS := \ + -D jack.transformations.boost-locked-region-priority=true \ + -D jack.transformations.boost-locked-region-priority.classname=com.android.server.am.ActivityManagerService \ + -D jack.transformations.boost-locked-region-priority.request=com.android.server.am.ActivityManagerService\#boostPriorityForLockedSection \ + -D jack.transformations.boost-locked-region-priority.reset=com.android.server.am.ActivityManagerService\#resetPriorityAfterLockedSection + include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index dec5e4184bff2..3194d891a0e0b 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -628,6 +628,30 @@ public final class ActivityManagerService extends ActivityManagerNative return mShowDialogs && !mSleeping && !mShuttingDown; } + // it's a semaphore; boost when 0->1, reset when 1->0 + static ThreadLocal sIsBoosted = new ThreadLocal() { + @Override protected Integer initialValue() { + return 0; + } + }; + + static void boostPriorityForLockedSection() { + if (sIsBoosted.get() == 0) { + // boost to prio 118 while holding a global lock + Process.setThreadPriority(Process.myTid(), -2); + //Log.e(TAG, "PRIORITY BOOST: set priority on TID " + Process.myTid()); + } + int cur = sIsBoosted.get(); + sIsBoosted.set(cur + 1); + } + + static void resetPriorityAfterLockedSection() { + sIsBoosted.set(sIsBoosted.get() - 1); + if (sIsBoosted.get() == 0) { + //Log.e(TAG, "PRIORITY BOOST: reset priority on TID " + Process.myTid()); + Process.setThreadPriority(Process.myTid(), 0); + } + } public class PendingAssistExtras extends Binder implements Runnable { public final ActivityRecord activity; public final Bundle extras;