Skip to content
Snippets Groups Projects
Commit 4e226a50 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick Committed by Android Git Automerger
Browse files

am ba9025ce: am 253e27ac: Optimize set_sched_policy(), which gets called in every binder call.

Merge commit 'ba9025ce' into kraken

* commit 'ba9025ce':
  Optimize set_sched_policy(), which gets called in every binder call.
parents 7a9f4c26 ba9025ce
No related branches found
No related tags found
No related merge requests found
...@@ -44,22 +44,27 @@ ...@@ -44,22 +44,27 @@
static int __sys_supports_schedgroups = -1; static int __sys_supports_schedgroups = -1;
static int add_tid_to_cgroup(int tid, const char *grp_name) /* Add tid to the group defined by dev_path ("/dev/cpuctl/.../tasks") */
static int add_tid_to_cgroup(int tid, const char *dev_path)
{ {
int fd; int fd;
char path[255]; if ((fd = open(dev_path, O_WRONLY)) < 0) {
char text[64]; SLOGE("add_tid_to_cgroup failed to open '%s' (%s)\n", dev_path,
sprintf(path, "/dev/cpuctl/%s/tasks", grp_name);
if ((fd = open(path, O_WRONLY)) < 0) {
SLOGE("add_tid_to_cgroup failed to open '%s' (%s)\n", path,
strerror(errno)); strerror(errno));
return -1; return -1;
} }
sprintf(text, "%d", tid); // specialized itoa -- works for tid > 0
if (write(fd, text, strlen(text)) < 0) { char text[22];
char *end = text + sizeof(text) - 1;
char *ptr = end;
*ptr = '\0';
while (tid > 0) {
*--ptr = '0' + (tid % 10);
tid = tid / 10;
}
if (write(fd, ptr, end - ptr) < 0) {
close(fd); close(fd);
/* /*
* If the thread is in the process of exiting, * If the thread is in the process of exiting,
...@@ -67,8 +72,8 @@ static int add_tid_to_cgroup(int tid, const char *grp_name) ...@@ -67,8 +72,8 @@ static int add_tid_to_cgroup(int tid, const char *grp_name)
*/ */
if (errno == ESRCH) if (errno == ESRCH)
return 0; return 0;
SLOGW("add_tid_to_cgroup failed to write '%s' (%s)\n", path, SLOGW("add_tid_to_cgroup failed to write '%s' to '%s' (%s)\n",
strerror(errno)); ptr, dev_path, strerror(errno));
return -1; return -1;
} }
...@@ -228,13 +233,14 @@ int set_sched_policy(int tid, SchedPolicy policy) ...@@ -228,13 +233,14 @@ int set_sched_policy(int tid, SchedPolicy policy)
#endif #endif
if (__sys_supports_schedgroups) { if (__sys_supports_schedgroups) {
const char *grp = ""; const char *dev_path;
if (policy == SP_BACKGROUND) { if (policy == SP_BACKGROUND) {
grp = "bg_non_interactive"; dev_path = "/dev/cpuctl/bg_non_interactive/tasks";
} else {
dev_path = "/dev/cpuctl/tasks";
} }
if (add_tid_to_cgroup(tid, grp)) { if (add_tid_to_cgroup(tid, dev_path)) {
if (errno != ESRCH && errno != ENOENT) if (errno != ESRCH && errno != ENOENT)
return -errno; return -errno;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment