OSDN Git Service

Scheduling group cleanup
authorGlenn Kasten <gkasten@google.com>
Fri, 16 Mar 2012 14:15:23 +0000 (07:15 -0700)
committerGlenn Kasten <gkasten@google.com>
Thu, 19 Apr 2012 18:32:59 +0000 (11:32 -0700)
Remove C++ APIs androidSetThreadSchedulingGroup and
androidGetThreadSchedulingGroup, and the ANDROID_TGROUP_* constants.

Former callers of these should now use the C APIs set_sched_policy and
get_sched_policy, and the SP_* constants.

Note: debug.sys.noschedgroups is not supported by the C APIs,
this needs to be discussed.

Change-Id: I32bbfc539ef4090faf9ef0320380e8cca9eae07c

include/utils/AndroidThreads.h
include/utils/ThreadDefs.h
libs/binder/IPCThreadState.cpp
libs/utils/Threads.cpp

index 5bda0fd..f67648f 100644 (file)
@@ -74,12 +74,6 @@ extern void androidSetCreateThreadFunc(android_create_thread_fn func);
 extern pid_t androidGetTid();
 
 #ifdef HAVE_ANDROID_OS
-// Change the scheduling group of a particular thread.  The group
-// should be one of the ANDROID_TGROUP constants.  Returns BAD_VALUE if
-// grp is out of range, else another non-zero value with errno set if
-// the operation failed.  Thread ID zero means current thread.
-extern int androidSetThreadSchedulingGroup(pid_t tid, int grp);
-
 // Change the priority AND scheduling group of a particular thread.  The priority
 // should be one of the ANDROID_PRIORITY constants.  Returns INVALID_OPERATION
 // if the priority set failed, else another value if just the group set failed;
@@ -89,13 +83,6 @@ extern int androidSetThreadPriority(pid_t tid, int prio);
 // Get the current priority of a particular thread. Returns one of the
 // ANDROID_PRIORITY constants or a negative result in case of error.
 extern int androidGetThreadPriority(pid_t tid);
-
-// Get the current scheduling group of a particular thread. Normally returns
-// one of the ANDROID_TGROUP constants other than ANDROID_TGROUP_DEFAULT.
-// Returns ANDROID_TGROUP_DEFAULT if no pthread support (e.g. on host) or if
-// scheduling groups are disabled.  Returns INVALID_OPERATION if unexpected error.
-// Thread ID zero means current thread.
-extern int androidGetThreadSchedulingGroup(pid_t tid);
 #endif
 
 #ifdef __cplusplus
index 3e56373..a8f8eb3 100644 (file)
@@ -79,13 +79,6 @@ enum {
     ANDROID_PRIORITY_LESS_FAVORABLE = +1,
 };
 
-enum {
-    ANDROID_TGROUP_DEFAULT          = 0,
-    ANDROID_TGROUP_BG_NONINTERACT   = 1,
-    ANDROID_TGROUP_FG_BOOST         = 2,
-    ANDROID_TGROUP_MAX              = ANDROID_TGROUP_FG_BOOST,
-};
-
 #ifdef __cplusplus
 } // extern "C"
 #endif
index 96cef2c..7a3a3b9 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <binder/Binder.h>
 #include <binder/BpBinder.h>
+#include <cutils/sched_policy.h>
 #include <utils/Debug.h>
 #include <utils/Log.h>
 #include <utils/TextOutput.h>
@@ -428,9 +429,9 @@ void IPCThreadState::joinThreadPool(bool isMain)
     mOut.writeInt32(isMain ? BC_ENTER_LOOPER : BC_REGISTER_LOOPER);
     
     // This thread may have been spawned by a thread that was in the background
-    // scheduling group, so first we will make sure it is in the default/foreground
+    // scheduling group, so first we will make sure it is in the foreground
     // one to avoid performing an initial transaction in the background.
-    androidSetThreadSchedulingGroup(mMyThreadId, ANDROID_TGROUP_DEFAULT);
+    set_sched_policy(mMyThreadId, SP_FOREGROUND);
         
     status_t result;
     do {
@@ -473,13 +474,13 @@ void IPCThreadState::joinThreadPool(bool isMain)
         }
         
         // After executing the command, ensure that the thread is returned to the
-        // default cgroup before rejoining the pool.  The driver takes care of
+        // foreground cgroup before rejoining the pool.  The driver takes care of
         // restoring the priority, but doesn't do anything with cgroups so we
         // need to take care of that here in userspace.  Note that we do make
         // sure to go in the foreground after executing a transaction, but
         // there are other callbacks into user code that could have changed
         // our group so we want to make absolutely sure it is put back.
-        androidSetThreadSchedulingGroup(mMyThreadId, ANDROID_TGROUP_DEFAULT);
+        set_sched_policy(mMyThreadId, SP_FOREGROUND);
 
         // Let this thread exit the thread pool if it is no longer
         // needed and it is not the main process thread.
@@ -1010,8 +1011,7 @@ status_t IPCThreadState::executeCommand(int32_t cmd)
                     // since the driver won't modify scheduling classes for us.
                     // The scheduling group is reset to default by the caller
                     // once this method returns after the transaction is complete.
-                    androidSetThreadSchedulingGroup(mMyThreadId,
-                                                    ANDROID_TGROUP_BG_NONINTERACT);
+                    set_sched_policy(mMyThreadId, SP_BACKGROUND);
                 }
             }
 
index f9277de..bc1c285 100644 (file)
@@ -324,29 +324,6 @@ pid_t androidGetTid()
 }
 
 #ifdef HAVE_ANDROID_OS
-int androidSetThreadSchedulingGroup(pid_t tid, int grp)
-{
-    if (grp > ANDROID_TGROUP_MAX || grp < 0) { 
-        return BAD_VALUE;
-    }
-
-#if defined(HAVE_PTHREADS)
-    pthread_once(&gDoSchedulingGroupOnce, checkDoSchedulingGroup);
-    if (gDoSchedulingGroup) {
-        // set_sched_policy does not support tid == 0
-        if (tid == 0) {
-            tid = androidGetTid();
-        }
-        if (set_sched_policy(tid, (grp == ANDROID_TGROUP_BG_NONINTERACT) ?
-                                          SP_BACKGROUND : SP_FOREGROUND)) {
-            return PERMISSION_DENIED;
-        }
-    }
-#endif
-    
-    return NO_ERROR;
-}
-
 int androidSetThreadPriority(pid_t tid, int pri)
 {
     int rc = 0;
@@ -392,40 +369,6 @@ int androidGetThreadPriority(pid_t tid) {
 #endif
 }
 
-int androidGetThreadSchedulingGroup(pid_t tid)
-{
-    int ret = ANDROID_TGROUP_DEFAULT;
-
-#if defined(HAVE_PTHREADS)
-    // convention is to not call get/set_sched_policy methods if disabled by property
-    pthread_once(&gDoSchedulingGroupOnce, checkDoSchedulingGroup);
-    if (gDoSchedulingGroup) {
-        SchedPolicy policy;
-        // get_sched_policy does not support tid == 0
-        if (tid == 0) {
-            tid = androidGetTid();
-        }
-        if (get_sched_policy(tid, &policy) < 0) {
-            ret = INVALID_OPERATION;
-        } else {
-            switch (policy) {
-            case SP_BACKGROUND:
-                ret = ANDROID_TGROUP_BG_NONINTERACT;
-                break;
-            case SP_FOREGROUND:
-                ret = ANDROID_TGROUP_FG_BOOST;
-                break;
-            default:
-                // should not happen, as enum SchedPolicy does not have any other values
-                ret = INVALID_OPERATION;
-                break;
-            }
-        }
-    }
-#endif
-
-    return ret;
-}
 #endif
 
 namespace android {