diff options
| author | 2016-05-16 21:12:33 -0700 | |
|---|---|---|
| committer | 2016-05-19 08:27:19 +0000 | |
| commit | 880721b38b861d44af25b3384efffd69bbe47d0c (patch) | |
| tree | 815e5f69f6d0dcd19d2b3b3caecc60c06f3c607a | |
| parent | 005f9a73fbecdb8d0d05eb699d0f02d745110495 (diff) | |
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
| -rw-r--r-- | services/core/Android.mk | 6 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 24 |
2 files changed, 30 insertions, 0 deletions
diff --git a/services/core/Android.mk b/services/core/Android.mk index 860f60a01936..b965ce39e7d5 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 dec5e4184bff..3194d891a0e0 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<Integer> sIsBoosted = new ThreadLocal<Integer>() { + @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; |