Loading services/surfaceflinger/FrameTimeline/FrameTimeline.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -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; Loading services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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(); Loading @@ -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); Loading Loading
services/surfaceflinger/FrameTimeline/FrameTimeline.cpp +5 −3 Original line number Diff line number Diff line Loading @@ -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; Loading
services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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(); Loading @@ -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); Loading