summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/content/Context.java10
-rw-r--r--services/core/java/com/android/server/am/ActiveServices.java5
-rw-r--r--services/core/java/com/android/server/am/ConnectionRecord.java3
-rw-r--r--services/core/java/com/android/server/am/OomAdjuster.java5
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java3
5 files changed, 25 insertions, 1 deletions
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index efb3bfc1f6d2..49a29f0ac80d 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -338,6 +338,16 @@ public abstract class Context {
public static final int BIND_ADJUST_BELOW_PERCEPTIBLE = 0x0100;
/**
+ * Flag for {@link #bindService}: This flag is intended to be used only by the system to adjust
+ * the scheduling policy for IMEs (and any other out-of-process user-visible components that
+ * work closely with the top app) so that UI hosted in such services can have the same
+ * scheduling policy (e.g. SCHED_FIFO when it is enabled and TOP_APP_PRIORITY_BOOST otherwise)
+ * as the actual top-app.
+ * @hide
+ */
+ public static final int BIND_SCHEDULE_LIKE_TOP_APP = 0x00080000;
+
+ /**
* Flag for {@link #bindService}: allow background activity starts from the bound service's
* process.
* This flag is only respected if the caller is holding
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 627010606b31..e357ce8ce929 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -1600,6 +1600,11 @@ public final class ActiveServices {
"BIND_TREAT_LIKE_ACTIVITY");
}
+ if ((flags & Context.BIND_SCHEDULE_LIKE_TOP_APP) != 0 && !isCallerSystem) {
+ throw new SecurityException("Non-system caller (pid=" + Binder.getCallingPid()
+ + ") set BIND_SCHEDULE_LIKE_TOP_APP when binding service " + service);
+ }
+
if ((flags & Context.BIND_ALLOW_WHITELIST_MANAGEMENT) != 0 && !isCallerSystem) {
throw new SecurityException(
"Non-system caller " + caller + " (pid=" + Binder.getCallingPid()
diff --git a/services/core/java/com/android/server/am/ConnectionRecord.java b/services/core/java/com/android/server/am/ConnectionRecord.java
index af1031e5b887..a1c941e085a6 100644
--- a/services/core/java/com/android/server/am/ConnectionRecord.java
+++ b/services/core/java/com/android/server/am/ConnectionRecord.java
@@ -192,6 +192,9 @@ final class ConnectionRecord {
if ((flags&Context.BIND_TREAT_LIKE_ACTIVITY) != 0) {
sb.append("LACT ");
}
+ if ((flags & Context.BIND_SCHEDULE_LIKE_TOP_APP) != 0) {
+ sb.append("SLTA ");
+ }
if ((flags&Context.BIND_VISIBLE) != 0) {
sb.append("VIS ");
}
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java
index 4e03b72e6ce6..9056f76c4086 100644
--- a/services/core/java/com/android/server/am/OomAdjuster.java
+++ b/services/core/java/com/android/server/am/OomAdjuster.java
@@ -1294,6 +1294,11 @@ public final class OomAdjuster {
ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND;
}
}
+ if (schedGroup < ProcessList.SCHED_GROUP_TOP_APP
+ && (cr.flags & Context.BIND_SCHEDULE_LIKE_TOP_APP) != 0) {
+ schedGroup = ProcessList.SCHED_GROUP_TOP_APP;
+ }
+
if (!trackedProcState) {
cr.trackProcState(clientProcState, mAdjSeq, now);
}
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 150303aa6a46..647e95284534 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -231,7 +231,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
Context.BIND_AUTO_CREATE
| Context.BIND_TREAT_LIKE_ACTIVITY
| Context.BIND_FOREGROUND_SERVICE
- | Context.BIND_SHOWING_UI;
+ | Context.BIND_SHOWING_UI
+ | Context.BIND_SCHEDULE_LIKE_TOP_APP;
@Retention(SOURCE)
@IntDef({HardKeyboardBehavior.WIRELESS_AFFORDANCE, HardKeyboardBehavior.WIRED_AFFORDANCE})