Merge "Change swap chain stuffed detection logic" into nyc-mr1-dev

This commit is contained in:
Chris Craik
2016-07-21 00:26:14 +00:00
committed by Android (Google) Code Review
2 changed files with 13 additions and 5 deletions

View File

@@ -217,9 +217,9 @@ bool CanvasContext::isSwapChainStuffed() {
for (size_t i = 1; i < mSwapHistory.size(); i++) {
auto& swapB = mSwapHistory[i];
// If there's a frameInterval gap we effectively already dropped a frame,
// If there's a multi-frameInterval gap we effectively already dropped a frame,
// so consider the queue healthy.
if (swapA.swapCompletedTime - swapB.swapCompletedTime > frameInterval) {
if (swapA.swapCompletedTime - swapB.swapCompletedTime > frameInterval * 3) {
return false;
}
@@ -298,12 +298,17 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo,
// Already drew for this vsync pulse, UI draw request missed
// the deadline for RT animations
info.out.canDrawThisFrame = false;
} else if (vsyncDelta >= mRenderThread.timeLord().frameIntervalNanos()) {
// It's been at least an entire frame interval, assume
// the buffer queue is fine
} else if (vsyncDelta >= mRenderThread.timeLord().frameIntervalNanos() * 3
|| (latestVsync - mLastDropVsync) < 500_ms) {
// It's been several frame intervals, assume the buffer queue is fine
// or the last drop was too recent
info.out.canDrawThisFrame = true;
} else {
info.out.canDrawThisFrame = !isSwapChainStuffed();
if (!info.out.canDrawThisFrame) {
// dropping frame
mLastDropVsync = mRenderThread.timeLord().latestVsync();
}
}
} else {
info.out.canDrawThisFrame = true;

View File

@@ -208,6 +208,9 @@ private:
RingBuffer<SwapHistory, 3> mSwapHistory;
int64_t mFrameNumber = -1;
// last vsync for a dropped frame due to stuffed queue
nsecs_t mLastDropVsync = 0;
bool mOpaque;
#if HWUI_NEW_OPS
BakedOpRenderer::LightInfo mLightInfo;