Permalink
Browse files

Add get_sched_policy_name() and use in ps and top

This will make it easier to add additional policies (cgroups) if needed.
Also added comments to the sched_policy APIs.

Change-Id: I33ce1cc4deae10983241f7391294b7a512d2c47c
  • Loading branch information...
1 parent 019524a commit 86c7cc81891a69ace7044de667b0624c284ee82b Glenn Kasten committed Mar 6, 2012
Showing with 36 additions and 16 deletions.
  1. +17 −0 include/cutils/sched_policy.h
  2. +12 −0 libcutils/sched_policy.c
  3. +2 −8 toolbox/ps.c
  4. +5 −8 toolbox/top.c
@@ -24,11 +24,28 @@ extern "C" {
typedef enum {
SP_BACKGROUND = 0,
SP_FOREGROUND = 1,
+ SP_CNT,
+ SP_MAX = SP_CNT - 1,
} SchedPolicy;
+/* Assign thread tid to the cgroup associated with the specified policy.
+ * If the thread is a thread group leader, that is it's gettid() == getpid(),
+ * then the other threads in the same thread group are _not_ affected.
+ * Return value: 0 for success, or -errno for error.
+ */
extern int set_sched_policy(int tid, SchedPolicy policy);
+
+/* Return the policy associated with the cgroup of thread tid via policy pointer.
+ * Return value: 0 for success, or -1 for error and set errno.
+ */
extern int get_sched_policy(int tid, SchedPolicy *policy);
+/* Return a displayable string corresponding to policy.
+ * Return value: non-NULL NUL-terminated name of unspecified length;
+ * the caller is responsible for displaying the useful part of the string.
+ */
+extern const char *get_sched_policy_name(SchedPolicy policy);
+
#ifdef __cplusplus
}
#endif
View
@@ -273,5 +273,17 @@ int set_sched_policy(int tid, SchedPolicy policy)
return 0;
}
+const char *get_sched_policy_name(SchedPolicy policy)
+{
+ static const char * const strings[SP_CNT] = {
+ [SP_BACKGROUND] = "bg",
+ [SP_FOREGROUND] = "fg",
+ };
+ if ((policy < SP_CNT) && (strings[policy] != NULL))
+ return strings[policy];
+ else
+ return "error";
+}
+
#endif /* HAVE_PTHREADS */
#endif /* HAVE_SCHED_H */
View
@@ -167,14 +167,8 @@ static int ps_line(int pid, int tid, char *namefilter)
SchedPolicy p;
if (get_sched_policy(pid, &p) < 0)
printf(" un ");
- else {
- if (p == SP_BACKGROUND)
- printf(" bg ");
- else if (p == SP_FOREGROUND)
- printf(" fg ");
- else
- printf(" er ");
- }
+ else
+ printf(" %.2s ", get_sched_policy_name(p));
}
printf(" %08x %08x %s %s", wchan, eip, state, cmdline[0] ? cmdline : name);
if(display_flags&SHOW_TIME)
View
@@ -48,6 +48,7 @@ struct cpu_info {
#define PROC_NAME_LEN 64
#define THREAD_NAME_LEN 32
+#define POLICY_NAME_LEN 4
struct proc_info {
struct proc_info *next;
@@ -67,7 +68,7 @@ struct proc_info {
long rss;
int prs;
int num_threads;
- char policy[32];
+ char policy[POLICY_NAME_LEN];
};
struct proc_list {
@@ -381,14 +382,10 @@ static int read_cmdline(char *filename, struct proc_info *proc) {
static void read_policy(int pid, struct proc_info *proc) {
SchedPolicy p;
if (get_sched_policy(pid, &p) < 0)
- strcpy(proc->policy, "unk");
+ strlcpy(proc->policy, "unk", POLICY_NAME_LEN);
else {
- if (p == SP_BACKGROUND)
- strcpy(proc->policy, "bg");
- else if (p == SP_FOREGROUND)
- strcpy(proc->policy, "fg");
- else
- strcpy(proc->policy, "er");
+ strlcpy(proc->policy, get_sched_policy_name(p), POLICY_NAME_LEN);
+ proc->policy[2] = '\0';
}
}

0 comments on commit 86c7cc8

Please sign in to comment.