Adding a new getThreadScheduler() method.

bug:  30226969
Change-Id: Icbd57e99740ebf6ba744a103e6fa69a3160c9422
This commit is contained in:
Srinath Sridharan
2016-07-19 15:16:11 -07:00
parent 586f23c14b
commit 1b15d13243
3 changed files with 39 additions and 0 deletions

View File

@@ -29225,6 +29225,7 @@ package android.os {
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);

View File

@@ -16,6 +16,7 @@
package android.os;
import android.annotation.TestApi;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.system.Os;
@@ -1067,6 +1068,24 @@ public class Process {
public static final native int getThreadPriority(int tid)
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.
*
@@ -1082,6 +1101,7 @@ public class Process {
*
* {@hide}
*/
public static final native void setThreadScheduler(int tid, int policy, int priority)
throws IllegalArgumentException;

View File

@@ -440,6 +440,23 @@ static void android_os_Process_setCanSelfBackground(JNIEnv* env, jobject clazz,
#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 @@ static const JNINativeMethod methods[] = {
{"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},