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 := \
|
LOCAL_SHARED_LIBRARIES := \
|
||||||
libsurfaceflinger \
|
libsurfaceflinger \
|
||||||
|
libcutils \
|
||||||
liblog \
|
liblog \
|
||||||
libbinder \
|
libbinder \
|
||||||
libutils
|
libutils
|
||||||
|
@ -22,10 +22,6 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
|
||||||
#if defined(HAVE_PTHREADS)
|
|
||||||
#include <sys/resource.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <EGL/egl.h>
|
#include <EGL/egl.h>
|
||||||
|
|
||||||
#include <cutils/log.h>
|
#include <cutils/log.h>
|
||||||
@ -640,9 +636,6 @@ status_t SurfaceFlinger::postMessageSync(const sp<MessageBase>& msg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SurfaceFlinger::run() {
|
void SurfaceFlinger::run() {
|
||||||
#if defined(HAVE_PTHREADS)
|
|
||||||
setpriority(PRIO_PROCESS, 0, PRIORITY_URGENT_DISPLAY);
|
|
||||||
#endif
|
|
||||||
do {
|
do {
|
||||||
waitForEvent();
|
waitForEvent();
|
||||||
} while (true);
|
} while (true);
|
||||||
|
@ -14,6 +14,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_PTHREADS)
|
||||||
|
#include <sys/resource.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <cutils/sched_policy.h>
|
||||||
#include <binder/IServiceManager.h>
|
#include <binder/IServiceManager.h>
|
||||||
#include <binder/IPCThreadState.h>
|
#include <binder/IPCThreadState.h>
|
||||||
#include <binder/ProcessState.h>
|
#include <binder/ProcessState.h>
|
||||||
@ -27,16 +32,21 @@ int main(int argc, char** argv) {
|
|||||||
// binder threads to 4.
|
// binder threads to 4.
|
||||||
ProcessState::self()->setThreadPoolMaxThreadCount(4);
|
ProcessState::self()->setThreadPoolMaxThreadCount(4);
|
||||||
|
|
||||||
// instantiate surfaceflinger
|
|
||||||
sp<SurfaceFlinger> flinger = new SurfaceFlinger();
|
|
||||||
|
|
||||||
// initialize before clients can connect
|
|
||||||
flinger->init();
|
|
||||||
|
|
||||||
// start the thread pool
|
// start the thread pool
|
||||||
sp<ProcessState> ps(ProcessState::self());
|
sp<ProcessState> ps(ProcessState::self());
|
||||||
ps->startThreadPool();
|
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
|
// publish surface flinger
|
||||||
sp<IServiceManager> sm(defaultServiceManager());
|
sp<IServiceManager> sm(defaultServiceManager());
|
||||||
sm->addService(String16(SurfaceFlinger::getServiceName()), flinger, false);
|
sm->addService(String16(SurfaceFlinger::getServiceName()), flinger, false);
|
||||||
|
Loading…
Reference in New Issue
Block a user