diff options
| -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; |