diff --git a/libs/hwui/JankTracker.cpp b/libs/hwui/JankTracker.cpp index 4b0ddd2fa2eff..c5c2d159bf034 100644 --- a/libs/hwui/JankTracker.cpp +++ b/libs/hwui/JankTracker.cpp @@ -206,6 +206,7 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptrreportJankType(JankType::kHighInputLatency); // Buffer stuffing state gets carried over to next frame, unless there is a "pause" - mNextFrameStartUnstuffed += frameInterval; + // Instead of increase by frameInterval, recompute to catch up the drifting vsync + computeNextFrameStartUnstuffed = true; } } else { mData->reportJankType(JankType::kMissedDeadline); @@ -222,14 +224,7 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptrreportJank(); // Janked, store the adjust deadline to detect triple buffering in next frame correctly. - nsecs_t jitterNanos = frame[FrameInfoIndex::GpuCompleted] - - frame[FrameInfoIndex::Vsync]; - nsecs_t lastFrameOffset = jitterNanos % frameInterval; - - // Note the time when the next frame would start in an unstuffed situation. If it starts - // earlier, we are in a stuffed situation. - mNextFrameStartUnstuffed = frame[FrameInfoIndex::GpuCompleted] - - lastFrameOffset + frameInterval; + computeNextFrameStartUnstuffed = true; recomputeThresholds(frameInterval); for (auto& comparison : COMPARISONS) { @@ -254,6 +249,16 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr= 0) { mData->reportGPUFrame(totalGPUDrawTime);