summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Murray <timmurray@google.com>2015-11-10 14:31:09 -0800
committerJustin Harrison <astyrrian@google.com>2015-11-18 22:36:23 +0000
commit6eee56ccabd89adb56edf45db587ef4db7c68722 (patch)
tree73ef10d0f5dec84329663d19c6073b9c39c7b772
parent1589fa1bda5d8e990c0a0f9a72841b8fa52899ed (diff)
downloadsystem_core-6eee56ccabd89adb56edf45db587ef4db7c68722.zip
system_core-6eee56ccabd89adb56edf45db587ef4db7c68722.tar.gz
system_core-6eee56ccabd89adb56edf45db587ef4db7c68722.tar.bz2
Improve cpuset support for surfaceflinger.
SurfaceFlinger needs some of its threads in the system-background cpuset and some of its threads (the binder pool) outside of the system-background cpuset in order to improve UI perf/power consumption. Remove surfaceflinger from the system-background cpuset in init.rc and allow a thread to place itself in the system-background cpuset given enough permissions. bug 25745866 Change-Id: I85f7e41c5439e6ad7cc2d355e51f5dfb3a0c7088
-rw-r--r--libcutils/sched_policy.c9
-rw-r--r--rootdir/init.rc7
2 files changed, 15 insertions, 1 deletions
diff --git a/libcutils/sched_policy.c b/libcutils/sched_policy.c
index 83222f4..8c26cdd 100644
--- a/libcutils/sched_policy.c
+++ b/libcutils/sched_policy.c
@@ -61,6 +61,7 @@ static int bg_cgroup_fd = -1;
static int fg_cgroup_fd = -1;
// File descriptors open to /dev/cpuset/../tasks, setup by initialize, or -1 on error
+static int system_bg_cpuset_fd = -1;
static int bg_cpuset_fd = -1;
static int fg_cpuset_fd = -1;
@@ -126,6 +127,11 @@ static void __initialize(void) {
fg_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC);
filename = "/dev/cpuset/background/tasks";
bg_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC);
+ filename = "/dev/cpuset/system-background/tasks";
+ system_bg_cpuset_fd = open(filename, O_WRONLY | O_CLOEXEC);
+ if (system_bg_cpuset_fd < 0) {
+ SLOGE("initialize of system-bg failed: %s\n", strerror(errno));
+ }
}
#endif
@@ -260,6 +266,9 @@ int set_cpuset_policy(int tid, SchedPolicy policy)
case SP_AUDIO_SYS:
fd = fg_cpuset_fd;
break;
+ case SP_SYSTEM:
+ fd = system_bg_cpuset_fd;
+ break;
default:
fd = -1;
break;
diff --git a/rootdir/init.rc b/rootdir/init.rc
index 317207c..4cc3f73 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -165,13 +165,19 @@ on init
chown system system /dev/cpuset/foreground
chown system system /dev/cpuset/foreground/boost
chown system system /dev/cpuset/background
+ chown system system /dev/cpuset/system-background
chown system system /dev/cpuset/tasks
chown system system /dev/cpuset/foreground/tasks
chown system system /dev/cpuset/foreground/boost/tasks
chown system system /dev/cpuset/background/tasks
+ chown system system /dev/cpuset/system-background/tasks
+
+ # set system-background to 0775 so SurfaceFlinger can touch it
+ chmod 0775 /dev/cpuset/system-background
chmod 0664 /dev/cpuset/foreground/tasks
chmod 0664 /dev/cpuset/foreground/boost/tasks
chmod 0664 /dev/cpuset/background/tasks
+ chmod 0664 /dev/cpuset/system-background/tasks
chmod 0664 /dev/cpuset/tasks
@@ -646,7 +652,6 @@ service surfaceflinger /system/bin/surfaceflinger
user system
group graphics drmrpc
onrestart restart zygote
- writepid /dev/cpuset/system-background/tasks
service drm /system/bin/drmserver
class main