Loading core/java/android/os/Process.java +16 −1 Original line number Diff line number Diff line Loading @@ -675,6 +675,21 @@ public class Process { public static final native void setThreadGroup(int tid, int group) throws IllegalArgumentException, SecurityException; /** * Sets the scheduling group and the corresponding cpuset group * @hide * @param tid The identifier of the thread to change. * @param group The target group for this thread from THREAD_GROUP_*. * * @throws IllegalArgumentException Throws IllegalArgumentException if * <var>tid</var> does not exist. * @throws SecurityException Throws SecurityException if your process does * not have permission to modify the given thread, or to use the given * priority. */ public static final native void setThreadGroupAndCpuset(int tid, int group) throws IllegalArgumentException, SecurityException; /** * Sets the scheduling group for a process and all child threads * @hide Loading core/jni/android_util_Process.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,22 @@ void android_os_Process_setThreadGroup(JNIEnv* env, jobject clazz, int tid, jint } } void android_os_Process_setThreadGroupAndCpuset(JNIEnv* env, jobject clazz, int tid, jint grp) { ALOGV("%s tid=%d grp=%" PRId32, __func__, tid, grp); SchedPolicy sp = (SchedPolicy) grp; int res = set_sched_policy(tid, sp); if (res != NO_ERROR) { signalExceptionForGroupError(env, -res, tid); } res = set_cpuset_policy(tid, sp); if (res != NO_ERROR) { signalExceptionForGroupError(env, -res, tid); } } void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jint grp) { ALOGV("%s pid=%d grp=%" PRId32, __func__, pid, grp); Loading Loading @@ -1207,6 +1223,7 @@ static const JNINativeMethod methods[] = { {"getThreadPriority", "(I)I", (void*)android_os_Process_getThreadPriority}, {"getThreadScheduler", "(I)I", (void*)android_os_Process_getThreadScheduler}, {"setThreadGroup", "(II)V", (void*)android_os_Process_setThreadGroup}, {"setThreadGroupAndCpuset", "(II)V", (void*)android_os_Process_setThreadGroupAndCpuset}, {"setProcessGroup", "(II)V", (void*)android_os_Process_setProcessGroup}, {"getProcessGroup", "(I)I", (void*)android_os_Process_getProcessGroup}, {"getExclusiveCores", "()[I", (void*)android_os_Process_getExclusiveCores}, Loading services/core/java/com/android/server/display/DisplayManagerService.java +11 −0 Original line number Diff line number Diff line Loading @@ -253,6 +253,17 @@ public final class DisplayManagerService extends SystemService { PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mGlobalDisplayBrightness = pm.getDefaultScreenBrightnessSetting(); } public void setupSchedulerPolicies() { /* * android.display is critical to user experience and we should * make sure it is not in the default foregroup groups, add it to * top-app to make sure it uses all the cores and scheduling * settings for top-app when it runs. */ Process.setThreadGroupAndCpuset(DisplayThread.get().getThreadId(), Process.THREAD_GROUP_TOP_APP); } @Override Loading services/java/com/android/server/SystemServer.java +4 −0 Original line number Diff line number Diff line Loading @@ -614,6 +614,10 @@ public final class SystemServer { mActivityManagerService.setSystemProcess(); traceEnd(); // DisplayManagerService needs to setup android.display scheduling related policies // since setSystemProcess() would have overridden policies due to setProcessGroup mDisplayManagerService.setupSchedulerPolicies(); // Manages Overlay packages traceBeginAndSlog("StartOverlayManagerService"); mSystemServiceManager.startService(new OverlayManagerService(mSystemContext, installer)); Loading Loading
core/java/android/os/Process.java +16 −1 Original line number Diff line number Diff line Loading @@ -675,6 +675,21 @@ public class Process { public static final native void setThreadGroup(int tid, int group) throws IllegalArgumentException, SecurityException; /** * Sets the scheduling group and the corresponding cpuset group * @hide * @param tid The identifier of the thread to change. * @param group The target group for this thread from THREAD_GROUP_*. * * @throws IllegalArgumentException Throws IllegalArgumentException if * <var>tid</var> does not exist. * @throws SecurityException Throws SecurityException if your process does * not have permission to modify the given thread, or to use the given * priority. */ public static final native void setThreadGroupAndCpuset(int tid, int group) throws IllegalArgumentException, SecurityException; /** * Sets the scheduling group for a process and all child threads * @hide Loading
core/jni/android_util_Process.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,22 @@ void android_os_Process_setThreadGroup(JNIEnv* env, jobject clazz, int tid, jint } } void android_os_Process_setThreadGroupAndCpuset(JNIEnv* env, jobject clazz, int tid, jint grp) { ALOGV("%s tid=%d grp=%" PRId32, __func__, tid, grp); SchedPolicy sp = (SchedPolicy) grp; int res = set_sched_policy(tid, sp); if (res != NO_ERROR) { signalExceptionForGroupError(env, -res, tid); } res = set_cpuset_policy(tid, sp); if (res != NO_ERROR) { signalExceptionForGroupError(env, -res, tid); } } void android_os_Process_setProcessGroup(JNIEnv* env, jobject clazz, int pid, jint grp) { ALOGV("%s pid=%d grp=%" PRId32, __func__, pid, grp); Loading Loading @@ -1207,6 +1223,7 @@ static const JNINativeMethod methods[] = { {"getThreadPriority", "(I)I", (void*)android_os_Process_getThreadPriority}, {"getThreadScheduler", "(I)I", (void*)android_os_Process_getThreadScheduler}, {"setThreadGroup", "(II)V", (void*)android_os_Process_setThreadGroup}, {"setThreadGroupAndCpuset", "(II)V", (void*)android_os_Process_setThreadGroupAndCpuset}, {"setProcessGroup", "(II)V", (void*)android_os_Process_setProcessGroup}, {"getProcessGroup", "(I)I", (void*)android_os_Process_getProcessGroup}, {"getExclusiveCores", "()[I", (void*)android_os_Process_getExclusiveCores}, Loading
services/core/java/com/android/server/display/DisplayManagerService.java +11 −0 Original line number Diff line number Diff line Loading @@ -253,6 +253,17 @@ public final class DisplayManagerService extends SystemService { PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mGlobalDisplayBrightness = pm.getDefaultScreenBrightnessSetting(); } public void setupSchedulerPolicies() { /* * android.display is critical to user experience and we should * make sure it is not in the default foregroup groups, add it to * top-app to make sure it uses all the cores and scheduling * settings for top-app when it runs. */ Process.setThreadGroupAndCpuset(DisplayThread.get().getThreadId(), Process.THREAD_GROUP_TOP_APP); } @Override Loading
services/java/com/android/server/SystemServer.java +4 −0 Original line number Diff line number Diff line Loading @@ -614,6 +614,10 @@ public final class SystemServer { mActivityManagerService.setSystemProcess(); traceEnd(); // DisplayManagerService needs to setup android.display scheduling related policies // since setSystemProcess() would have overridden policies due to setProcessGroup mDisplayManagerService.setupSchedulerPolicies(); // Manages Overlay packages traceBeginAndSlog("StartOverlayManagerService"); mSystemServiceManager.startService(new OverlayManagerService(mSystemContext, installer)); Loading