From acff43dca6a3c8a29f449706967d4de21c373d26 Mon Sep 17 00:00:00 2001 From: Tim Murray Date: Fri, 29 Jul 2016 13:57:24 -0700 Subject: [PATCH] Update SurfaceFlinger FIFO configuration. - move SurfaceFlinger main thread to prio 2 - drop EventThread from FIFO but not SFEventThread, which is still FIFO prio 1 - make DispSyncThread FIFO, prio 1 bug 30481949 Change-Id: Ifedccfbf3cf144ffad030109849a924dddae8d09 --- services/surfaceflinger/DispSync.cpp | 7 +++++++ services/surfaceflinger/SurfaceFlinger.cpp | 7 +------ services/surfaceflinger/SurfaceFlinger_hwc1.cpp | 6 +----- services/surfaceflinger/main_surfaceflinger.cpp | 2 +- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/services/surfaceflinger/DispSync.cpp b/services/surfaceflinger/DispSync.cpp index 37b642015f..c67feb30aa 100644 --- a/services/surfaceflinger/DispSync.cpp +++ b/services/surfaceflinger/DispSync.cpp @@ -383,6 +383,13 @@ DispSync::DispSync(const char* name) : mThread(new DispSyncThread(name)) { mThread->run("DispSync", PRIORITY_URGENT_DISPLAY + PRIORITY_MORE_FAVORABLE); + // set DispSync to SCHED_FIFO to minimize jitter + struct sched_param param = {0}; + param.sched_priority = 1; + if (sched_setscheduler(mThread->getTid(), SCHED_FIFO, ¶m) != 0) { + ALOGE("Couldn't set SCHED_FIFO for DispSyncThread"); + } + reset(); beginResync(); diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 5a0f7069ba..a36a8cdaf5 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -465,18 +465,13 @@ void SurfaceFlinger::init() { mSFEventThread = new EventThread(sfVsyncSrc, *this); mEventQueue.setEventThread(mSFEventThread); - // set EventThread and SFEventThread to SCHED_FIFO for minimum jitter + // set SFEventThread to SCHED_FIFO to minimize jitter struct sched_param param = {0}; param.sched_priority = 1; - if (sched_setscheduler(mEventThread->getTid(), SCHED_FIFO, ¶m) != 0) { - ALOGE("Couldn't set SCHED_FIFO for EventThread"); - } - if (sched_setscheduler(mSFEventThread->getTid(), SCHED_FIFO, ¶m) != 0) { ALOGE("Couldn't set SCHED_FIFO for SFEventThread"); } - // Get a RenderEngine for the given display / config (can't fail) mRenderEngine = RenderEngine::create(mEGLDisplay, HAL_PIXEL_FORMAT_RGBA_8888); diff --git a/services/surfaceflinger/SurfaceFlinger_hwc1.cpp b/services/surfaceflinger/SurfaceFlinger_hwc1.cpp index b20868a9e1..e7f911e129 100644 --- a/services/surfaceflinger/SurfaceFlinger_hwc1.cpp +++ b/services/surfaceflinger/SurfaceFlinger_hwc1.cpp @@ -461,13 +461,9 @@ void SurfaceFlinger::init() { mSFEventThread = new EventThread(sfVsyncSrc, *this); mEventQueue.setEventThread(mSFEventThread); - // set EventThread and SFEventThread to SCHED_FIFO for minimum jitter + // set SFEventThread to SCHED_FIFO to minimize jitter struct sched_param param = {0}; param.sched_priority = 1; - if (sched_setscheduler(mEventThread->getTid(), SCHED_FIFO, ¶m) != 0) { - ALOGE("Couldn't set SCHED_FIFO for EventThread"); - } - if (sched_setscheduler(mSFEventThread->getTid(), SCHED_FIFO, ¶m) != 0) { ALOGE("Couldn't set SCHED_FIFO for SFEventThread"); } diff --git a/services/surfaceflinger/main_surfaceflinger.cpp b/services/surfaceflinger/main_surfaceflinger.cpp index 543d0c7711..53a63bdd9b 100644 --- a/services/surfaceflinger/main_surfaceflinger.cpp +++ b/services/surfaceflinger/main_surfaceflinger.cpp @@ -64,7 +64,7 @@ int main(int, char**) { sm->addService(String16(GpuService::SERVICE_NAME), gpuservice, false); struct sched_param param = {0}; - param.sched_priority = 1; + param.sched_priority = 2; if (sched_setscheduler(0, SCHED_FIFO, ¶m) != 0) { ALOGE("Couldn't set SCHED_FIFO"); } -- 2.11.0