Merge "Recompute the mNextFrameStartUnstuffed on every frame" into tm-qpr-dev
This commit is contained in:
@@ -206,6 +206,7 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr<FrameMetricsRepo
|
|||||||
frame.set(FrameInfoIndex::FrameDeadline) = deadline;
|
frame.set(FrameInfoIndex::FrameDeadline) = deadline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool computeNextFrameStartUnstuffed = false;
|
||||||
// If we hit the deadline, cool!
|
// If we hit the deadline, cool!
|
||||||
if (frame[FrameInfoIndex::GpuCompleted] < deadline) {
|
if (frame[FrameInfoIndex::GpuCompleted] < deadline) {
|
||||||
if (isTripleBuffered) {
|
if (isTripleBuffered) {
|
||||||
@@ -213,7 +214,8 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr<FrameMetricsRepo
|
|||||||
(*mGlobalData)->reportJankType(JankType::kHighInputLatency);
|
(*mGlobalData)->reportJankType(JankType::kHighInputLatency);
|
||||||
|
|
||||||
// Buffer stuffing state gets carried over to next frame, unless there is a "pause"
|
// 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 {
|
} else {
|
||||||
mData->reportJankType(JankType::kMissedDeadline);
|
mData->reportJankType(JankType::kMissedDeadline);
|
||||||
@@ -222,14 +224,7 @@ void JankTracker::finishFrame(FrameInfo& frame, std::unique_ptr<FrameMetricsRepo
|
|||||||
(*mGlobalData)->reportJank();
|
(*mGlobalData)->reportJank();
|
||||||
|
|
||||||
// Janked, store the adjust deadline to detect triple buffering in next frame correctly.
|
// Janked, store the adjust deadline to detect triple buffering in next frame correctly.
|
||||||
nsecs_t jitterNanos = frame[FrameInfoIndex::GpuCompleted]
|
computeNextFrameStartUnstuffed = true;
|
||||||
- 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);
|
recomputeThresholds(frameInterval);
|
||||||
for (auto& comparison : COMPARISONS) {
|
for (auto& comparison : COMPARISONS) {
|
||||||
@@ -254,6 +249,16 @@ 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();
|
int64_t totalGPUDrawTime = frame.gpuDrawTime();
|
||||||
if (totalGPUDrawTime >= 0) {
|
if (totalGPUDrawTime >= 0) {
|
||||||
mData->reportGPUFrame(totalGPUDrawTime);
|
mData->reportGPUFrame(totalGPUDrawTime);
|
||||||
|
|||||||
Reference in New Issue
Block a user