diff options
| -rw-r--r-- | services/surfaceflinger/FrameTimeline/FrameTimeline.cpp | 10 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp | 16 |
2 files changed, 12 insertions, 14 deletions
diff --git a/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp b/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp index 2784861b4b..6485265c17 100644 --- a/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp +++ b/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp @@ -575,13 +575,9 @@ void SurfaceFrame::classifyJankLocked(int32_t displayFrameJankType, const Fps& r } } else if (mFrameReadyMetadata == FrameReadyMetadata::LateFinish) { // Finish late, Present late - if (displayFrameJankType == JankType::None) { - // Display frame is not janky, so purely app's fault - mJankType |= JankType::AppDeadlineMissed; - } else { - // Propagate DisplayFrame's jankType if it is janky - mJankType |= displayFrameJankType; - } + mJankType |= JankType::AppDeadlineMissed; + // Propagate DisplayFrame's jankType if it is janky + mJankType |= displayFrameJankType; } } } diff --git a/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp b/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp index d1385c0409..982252f0be 100644 --- a/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp +++ b/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp @@ -668,9 +668,10 @@ TEST_F(FrameTimelineTest, presentFenceSignaled_displayFramePredictionExpiredPres Fps renderRate = Fps::fromPeriodNsecs(30); EXPECT_CALL(*mTimeStats, - incrementJankyFrames(TimeStats::JankyFramesInfo{refreshRate, renderRate, sUidOne, - sLayerNameOne, JankType::Unknown, - -1, -1, 25})); + incrementJankyFrames( + TimeStats::JankyFramesInfo{refreshRate, renderRate, sUidOne, sLayerNameOne, + JankType::Unknown | JankType::AppDeadlineMissed, + -1, -1, 25})); auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE); int64_t surfaceFrameToken1 = mTokenManager->generateTokenForPredictions({10, 20, 60}); int64_t sfToken1 = mTokenManager->generateTokenForPredictions({82, 90, 90}); @@ -697,7 +698,7 @@ TEST_F(FrameTimelineTest, presentFenceSignaled_displayFramePredictionExpiredPres EXPECT_EQ(displayFrame->getFramePresentMetadata(), FramePresentMetadata::UnknownPresent); EXPECT_EQ(surfaceFrame1->getActuals().presentTime, 90); - EXPECT_EQ(surfaceFrame1->getJankType(), JankType::Unknown); + EXPECT_EQ(surfaceFrame1->getJankType(), JankType::Unknown | JankType::AppDeadlineMissed); } /* @@ -1699,9 +1700,9 @@ TEST_F(FrameTimelineTest, jankClassification_surfaceFrameLateFinishEarlyPresent) } TEST_F(FrameTimelineTest, jankClassification_surfaceFrameLateFinishLatePresent) { - // First frame - DisplayFrame is not janky. This should classify the SurfaceFrame as + // First frame - DisplayFrame is not janky. This should classify the SurfaceFrame as only // AppDeadlineMissed. Second frame - DisplayFrame is janky. This should propagate DisplayFrame's - // jank to the SurfaceFrame. + // jank to the SurfaceFrame along with AppDeadlineMissed. EXPECT_CALL(*mTimeStats, incrementJankyFrames(_)).Times(2); auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE); @@ -1771,7 +1772,8 @@ TEST_F(FrameTimelineTest, jankClassification_surfaceFrameLateFinishLatePresent) EXPECT_EQ(actuals2.presentTime, 60); EXPECT_EQ(presentedSurfaceFrame2.getFramePresentMetadata(), FramePresentMetadata::LatePresent); EXPECT_EQ(presentedSurfaceFrame2.getFrameReadyMetadata(), FrameReadyMetadata::LateFinish); - EXPECT_EQ(presentedSurfaceFrame2.getJankType(), JankType::SurfaceFlingerCpuDeadlineMissed); + EXPECT_EQ(presentedSurfaceFrame2.getJankType(), + JankType::SurfaceFlingerCpuDeadlineMissed | JankType::AppDeadlineMissed); } TEST_F(FrameTimelineTest, jankClassification_multiJankBufferStuffingAndAppDeadlineMissed) { |