Merge "Implement the ThreadPrioritySetter interface"

This commit is contained in:
Rick Yiu
2020-01-17 13:32:54 +00:00
committed by Gerrit Code Review

View File

@@ -35,6 +35,7 @@ import com.android.internal.logging.AndroidConfig;
import com.android.server.NetworkManagementSocketTagger;
import dalvik.system.RuntimeHooks;
import dalvik.system.ThreadPrioritySetter;
import dalvik.system.VMRuntime;
import libcore.content.type.MimeMap;
@@ -204,6 +205,7 @@ public class RuntimeInit {
*/
public static void preForkInit() {
if (DEBUG) Slog.d(TAG, "Entered preForkInit.");
RuntimeHooks.setThreadPrioritySetter(new RuntimeThreadPrioritySetter());
RuntimeInit.enableDdms();
// TODO(b/142019040#comment13): Decide whether to load the default instance eagerly, i.e.
// MimeMap.setDefault(DefaultMimeMapFactory.create());
@@ -216,6 +218,35 @@ public class RuntimeInit {
MimeMap.setDefaultSupplier(DefaultMimeMapFactory::create);
}
private static class RuntimeThreadPrioritySetter implements ThreadPrioritySetter {
// Should remain consistent with kNiceValues[] in system/libartpalette/palette_android.cc
private static final int[] NICE_VALUES = {
Process.THREAD_PRIORITY_LOWEST, // 1 (MIN_PRIORITY)
Process.THREAD_PRIORITY_BACKGROUND + 6,
Process.THREAD_PRIORITY_BACKGROUND + 3,
Process.THREAD_PRIORITY_BACKGROUND,
Process.THREAD_PRIORITY_DEFAULT, // 5 (NORM_PRIORITY)
Process.THREAD_PRIORITY_DEFAULT - 2,
Process.THREAD_PRIORITY_DEFAULT - 4,
Process.THREAD_PRIORITY_URGENT_DISPLAY + 3,
Process.THREAD_PRIORITY_URGENT_DISPLAY + 2,
Process.THREAD_PRIORITY_URGENT_DISPLAY // 10 (MAX_PRIORITY)
};
@Override
public void setPriority(int nativeTid, int priority) {
// Check NICE_VALUES[] length first.
if (NICE_VALUES.length != (1 + Thread.MAX_PRIORITY - Thread.MIN_PRIORITY)) {
throw new AssertionError("Unexpected NICE_VALUES.length=" + NICE_VALUES.length);
}
// Priority should be in the range of MIN_PRIORITY (1) to MAX_PRIORITY (10).
if (priority < Thread.MIN_PRIORITY || priority > Thread.MAX_PRIORITY) {
throw new IllegalArgumentException("Priority out of range: " + priority);
}
Process.setThreadPriority(nativeTid, NICE_VALUES[priority - Thread.MIN_PRIORITY]);
}
}
@UnsupportedAppUsage
protected static final void commonInit() {
if (DEBUG) Slog.d(TAG, "Entered RuntimeInit!");