Adding a new getThreadScheduler() method.
bug: 30226969
Change-Id: Icbd57e99740ebf6ba744a103e6fa69a3160c9422
diff --git a/api/test-current.txt b/api/test-current.txt
index 53f87f4..cedbea2 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -29225,6 +29225,7 @@
method public static final long getStartElapsedRealtime();
method public static final long getStartUptimeMillis();
method public static final int getThreadPriority(int) throws java.lang.IllegalArgumentException;
+ method public static final int getThreadScheduler(int) throws java.lang.IllegalArgumentException;
method public static final int getUidForName(java.lang.String);
method public static final boolean is64Bit();
method public static boolean isApplicationUid(int);
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 57b40e5..4ef882e 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -16,6 +16,7 @@
package android.os;
+import android.annotation.TestApi;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.system.Os;
@@ -1068,6 +1069,24 @@
throws IllegalArgumentException;
/**
+ * Return the current scheduling policy of a thread, based on Linux.
+ *
+ * @param tid The identifier of the thread/process to get the scheduling policy.
+ *
+ * @throws IllegalArgumentException Throws IllegalArgumentException if
+ * <var>tid</var> does not exist, or if <var>priority</var> is out of range for the policy.
+ * @throws SecurityException Throws SecurityException if your process does
+ * not have permission to modify the given thread, or to use the given
+ * scheduling policy or priority.
+ *
+ * {@hide}
+ */
+
+ @TestApi
+ public static final native int getThreadScheduler(int tid)
+ throws IllegalArgumentException;
+
+ /**
* Set the scheduling policy and priority of a thread, based on Linux.
*
* @param tid The identifier of the thread/process to change.
@@ -1082,6 +1101,7 @@
*
* {@hide}
*/
+
public static final native void setThreadScheduler(int tid, int policy, int priority)
throws IllegalArgumentException;
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index 3d952b0..a693f29 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -440,6 +440,23 @@
#endif
}
+jint android_os_Process_getThreadScheduler(JNIEnv* env, jclass clazz,
+ jint tid)
+{
+ int policy = 0;
+// linux has sched_getscheduler(), others don't.
+#if defined(__linux__)
+ errno = 0;
+ policy = sched_getscheduler(tid);
+ if (errno != 0) {
+ signalExceptionForPriorityError(env, errno);
+ }
+#else
+ signalExceptionForPriorityError(env, ENOSYS);
+#endif
+ return policy;
+}
+
void android_os_Process_setThreadScheduler(JNIEnv* env, jclass clazz,
jint tid, jint policy, jint pri)
{
@@ -1191,6 +1208,7 @@
{"setCanSelfBackground", "(Z)V", (void*)android_os_Process_setCanSelfBackground},
{"setThreadPriority", "(I)V", (void*)android_os_Process_setCallingThreadPriority},
{"getThreadPriority", "(I)I", (void*)android_os_Process_getThreadPriority},
+ {"getThreadScheduler", "(I)I", (void*)android_os_Process_getThreadScheduler},
{"setThreadGroup", "(II)V", (void*)android_os_Process_setThreadGroup},
{"setProcessGroup", "(II)V", (void*)android_os_Process_setProcessGroup},
{"getProcessGroup", "(I)I", (void*)android_os_Process_getProcessGroup},