diff options
-rw-r--r-- | libs/hwui/JankTracker.cpp | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/libs/hwui/JankTracker.cpp b/libs/hwui/JankTracker.cpp index c5c2d159bf03..4b0ddd2fa2ef 100644 --- a/libs/hwui/JankTracker.cpp +++ b/libs/hwui/JankTracker.cpp @@ -206,7 +206,6 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr<FrameMetricsRepo frame.set(FrameInfoIndex::FrameDeadline) = deadline; } - bool computeNextFrameStartUnstuffed = false; // If we hit the deadline, cool! if (frame[FrameInfoIndex::GpuCompleted] < deadline) { if (isTripleBuffered) { @@ -214,8 +213,7 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr<FrameMetricsRepo (*mGlobalData)->reportJankType(JankType::kHighInputLatency); // Buffer stuffing state gets carried over to next frame, unless there is a "pause" - // Instead of increase by frameInterval, recompute to catch up the drifting vsync - computeNextFrameStartUnstuffed = true; + mNextFrameStartUnstuffed += frameInterval; } } else { mData->reportJankType(JankType::kMissedDeadline); @@ -224,7 +222,14 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr<FrameMetricsRepo (*mGlobalData)->reportJank(); // Janked, store the adjust deadline to detect triple buffering in next frame correctly. - computeNextFrameStartUnstuffed = true; + 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; recomputeThresholds(frameInterval); for (auto& comparison : COMPARISONS) { @@ -249,16 +254,6 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr<FrameMetricsRepo } } - if (computeNextFrameStartUnstuffed) { - 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; - } - int64_t totalGPUDrawTime = frame.gpuDrawTime(); if (totalGPUDrawTime >= 0) { mData->reportGPUFrame(totalGPUDrawTime); |