OSDN Git Service

Set cpuset from surfaceflinger.
authorTim Murray <timmurray@google.com>
Tue, 10 Nov 2015 22:29:45 +0000 (14:29 -0800)
committerTim Murray <timmurray@google.com>
Wed, 18 Nov 2015 19:58:04 +0000 (19:58 +0000)
SurfaceFlinger shouldn't be limited to little cores exclusively, as the
binder threads should be placed on big cores when they are in the
critical path for a RenderThread.

bug 25745866

Change-Id: I9fb65f6d951733f91b4735ff27018411b58b2bfb

services/surfaceflinger/Android.mk
services/surfaceflinger/main_surfaceflinger.cpp

index 1eb2361..1901ef9 100644 (file)
@@ -122,6 +122,10 @@ LOCAL_LDFLAGS := -Wl,--version-script,art/sigchainlib/version-script.txt -Wl,--e
 LOCAL_CFLAGS := -DLOG_TAG=\"SurfaceFlinger\"
 LOCAL_CPPFLAGS := -std=c++11
 
+ifneq ($(ENABLE_CPUSETS),)
+    LOCAL_CFLAGS += -DENABLE_CPUSETS
+endif
+
 LOCAL_SRC_FILES := \
     main_surfaceflinger.cpp
 
index a74bc4c..6fa8b53 100644 (file)
@@ -41,6 +41,13 @@ int main(int, char**) {
 
     set_sched_policy(0, SP_FOREGROUND);
 
+#ifdef ENABLE_CPUSETS
+    // Put most SurfaceFlinger threads in the system-background cpuset
+    // Keeps us from unnecessarily using big cores
+    // Do this after the binder thread pool init
+    set_cpuset_policy(0, SP_SYSTEM);
+#endif
+
     // initialize before clients can connect
     flinger->init();