From 8d34c905f2311bd20f0101d2d0129338298007f5 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 16 Dec 2020 21:43:07 +0100 Subject: Fix jank classification Make sure to use the correct present fence. Test: Check jank classification in SysUI Change-Id: I7ac956486b5a037f852fd7d0e73cd12f1ce756b2 --- services/surfaceflinger/SurfaceFlinger.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 6967f69876..63201b080c 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1994,11 +1994,6 @@ void SurfaceFlinger::onMessageRefresh() { mScheduler->onDisplayRefreshed(presentTime); - // Set presentation information before calling postComposition, such that jank information from - // this' frame classification is already available when sending jank info to clients. - mFrameTimeline->setSfPresent(systemTime(), - std::make_shared(mPreviousPresentFences[0])); - postFrame(); postComposition(); @@ -2120,11 +2115,6 @@ void SurfaceFlinger::postComposition() { ATRACE_CALL(); ALOGV("postComposition"); - nsecs_t dequeueReadyTime = systemTime(); - for (const auto& layer : mLayersWithQueuedFrames) { - layer->releasePendingBuffer(dequeueReadyTime); - } - const auto* display = ON_MAIN_THREAD(getDefaultDisplayDeviceLocked()).get(); getBE().mGlCompositionDoneTimeline.updateSignalTimes(); @@ -2146,6 +2136,17 @@ void SurfaceFlinger::postComposition() { auto presentFenceTime = std::make_shared(mPreviousPresentFences[0]); getBE().mDisplayTimeline.push(presentFenceTime); + // Set presentation information before calling Layer::releasePendingBuffer, such that jank + // information from previous' frame classification is already available when sending jank info + // to clients, so they get jank classification as early as possible. + mFrameTimeline->setSfPresent(systemTime(), + std::make_shared(mPreviousPresentFences[0])); + + nsecs_t dequeueReadyTime = systemTime(); + for (const auto& layer : mLayersWithQueuedFrames) { + layer->releasePendingBuffer(dequeueReadyTime); + } + const DisplayStatInfo stats = mScheduler->getDisplayStatInfo(systemTime()); // We use the CompositionEngine::getLastFrameRefreshTimestamp() which might -- cgit v1.2.3-59-g8ed1b