diff options
-rw-r--r-- | services/surfaceflinger/FrameTimeline/FrameTimeline.cpp | 8 | ||||
-rw-r--r-- | services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp | 7 |
2 files changed, 9 insertions, 6 deletions
diff --git a/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp b/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp index 925f111dc6..ded734efad 100644 --- a/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp +++ b/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp @@ -885,15 +885,17 @@ void FrameTimeline::DisplayFrame::setGpuFence(const std::shared_ptr<FenceTime>& void FrameTimeline::DisplayFrame::classifyJank(nsecs_t& deadlineDelta, nsecs_t& deltaToVsync, nsecs_t previousPresentTime) { - if (mPredictionState == PredictionState::Expired || - mSurfaceFlingerActuals.presentTime == Fence::SIGNAL_TIME_INVALID) { + const bool presentTimeValid = + mSurfaceFlingerActuals.presentTime >= mSurfaceFlingerActuals.startTime; + if (mPredictionState == PredictionState::Expired || !presentTimeValid) { // Cannot do jank classification with expired predictions or invalid signal times. Set the // deltas to 0 as both negative and positive deltas are used as real values. mJankType = JankType::Unknown; deadlineDelta = 0; deltaToVsync = 0; - if (mSurfaceFlingerActuals.presentTime == Fence::SIGNAL_TIME_INVALID) { + if (!presentTimeValid) { mSurfaceFlingerActuals.presentTime = mSurfaceFlingerActuals.endTime; + mJankType |= JankType::DisplayHAL; } return; diff --git a/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp b/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp index abd77894af..d26ef3c821 100644 --- a/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp +++ b/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp @@ -489,7 +489,7 @@ TEST_F(FrameTimelineTest, presentFenceSignaled_invalidSignalTime) { auto displayFrame0 = getDisplayFrame(0); EXPECT_EQ(displayFrame0->getActuals().presentTime, 59); - EXPECT_EQ(displayFrame0->getJankType(), JankType::Unknown); + EXPECT_EQ(displayFrame0->getJankType(), JankType::Unknown | JankType::DisplayHAL); EXPECT_EQ(surfaceFrame1->getActuals().presentTime, -1); EXPECT_EQ(surfaceFrame1->getJankType(), JankType::Unknown); } @@ -2259,6 +2259,7 @@ TEST_F(FrameTimelineTest, jankClassification_presentFenceError) { mFrameTimeline->setSfWakeUp(sfToken3, 72, Fps::fromPeriodNsecs(11)); mFrameTimeline->setSfPresent(80, validPresentFence); + erroneousPresentFence2->signalForTest(2); validPresentFence->signalForTest(80); addEmptyDisplayFrame(); @@ -2268,14 +2269,14 @@ TEST_F(FrameTimelineTest, jankClassification_presentFenceError) { EXPECT_EQ(displayFrame->getActuals().presentTime, 26); EXPECT_EQ(displayFrame->getFramePresentMetadata(), FramePresentMetadata::UnknownPresent); EXPECT_EQ(displayFrame->getFrameReadyMetadata(), FrameReadyMetadata::UnknownFinish); - EXPECT_EQ(displayFrame->getJankType(), JankType::Unknown); + EXPECT_EQ(displayFrame->getJankType(), JankType::Unknown | JankType::DisplayHAL); } { auto displayFrame = getDisplayFrame(1); EXPECT_EQ(displayFrame->getActuals().presentTime, 60); EXPECT_EQ(displayFrame->getFramePresentMetadata(), FramePresentMetadata::UnknownPresent); EXPECT_EQ(displayFrame->getFrameReadyMetadata(), FrameReadyMetadata::UnknownFinish); - EXPECT_EQ(displayFrame->getJankType(), JankType::Unknown); + EXPECT_EQ(displayFrame->getJankType(), JankType::Unknown | JankType::DisplayHAL); } { auto displayFrame = getDisplayFrame(2); |