make sure SF initialization is ran at target priority and correct thread group
SF can spawn threads (indirectly) during initialization and we want those to be spawned at URGENT_DISPLAY_PRIORITY (in theory they should set their own, but some code lives in vendor libraries and doesn't). Bug: 10430209 Change-Id: I5b3a8f979297de287614c8eafd8267bef1176e4b
This commit is contained in:
parent
464febc449
commit
9414d67f46
@ -82,6 +82,7 @@ LOCAL_SRC_FILES:= \
|
||||
|
||||
LOCAL_SHARED_LIBRARIES := \
|
||||
libsurfaceflinger \
|
||||
libcutils \
|
||||
liblog \
|
||||
libbinder \
|
||||
libutils
|
||||
|
@ -22,10 +22,6 @@
|
||||
#include <math.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#if defined(HAVE_PTHREADS)
|
||||
#include <sys/resource.h>
|
||||
#endif
|
||||
|
||||
#include <EGL/egl.h>
|
||||
|
||||
#include <cutils/log.h>
|
||||
@ -640,9 +636,6 @@ status_t SurfaceFlinger::postMessageSync(const sp<MessageBase>& msg,
|
||||
}
|
||||
|
||||
void SurfaceFlinger::run() {
|
||||
#if defined(HAVE_PTHREADS)
|
||||
setpriority(PRIO_PROCESS, 0, PRIORITY_URGENT_DISPLAY);
|
||||
#endif
|
||||
do {
|
||||
waitForEvent();
|
||||
} while (true);
|
||||
|
@ -14,6 +14,11 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(HAVE_PTHREADS)
|
||||
#include <sys/resource.h>
|
||||
#endif
|
||||
|
||||
#include <cutils/sched_policy.h>
|
||||
#include <binder/IServiceManager.h>
|
||||
#include <binder/IPCThreadState.h>
|
||||
#include <binder/ProcessState.h>
|
||||
@ -27,16 +32,21 @@ int main(int argc, char** argv) {
|
||||
// binder threads to 4.
|
||||
ProcessState::self()->setThreadPoolMaxThreadCount(4);
|
||||
|
||||
// instantiate surfaceflinger
|
||||
sp<SurfaceFlinger> flinger = new SurfaceFlinger();
|
||||
|
||||
// initialize before clients can connect
|
||||
flinger->init();
|
||||
|
||||
// start the thread pool
|
||||
sp<ProcessState> ps(ProcessState::self());
|
||||
ps->startThreadPool();
|
||||
|
||||
// instantiate surfaceflinger
|
||||
sp<SurfaceFlinger> flinger = new SurfaceFlinger();
|
||||
|
||||
#if defined(HAVE_PTHREADS)
|
||||
setpriority(PRIO_PROCESS, 0, PRIORITY_URGENT_DISPLAY);
|
||||
#endif
|
||||
set_sched_policy(0, SP_FOREGROUND);
|
||||
|
||||
// initialize before clients can connect
|
||||
flinger->init();
|
||||
|
||||
// publish surface flinger
|
||||
sp<IServiceManager> sm(defaultServiceManager());
|
||||
sm->addService(String16(SurfaceFlinger::getServiceName()), flinger, false);
|
||||
|
Loading…
Reference in New Issue
Block a user