Merge \\"Redraw if dirty during stopped when resumed\\" into nyc-dev am: 5b4ff21a74

am: fc4c59a10c

Change-Id: Id572ab8137655b8f64e563d78897d2461442dd39
This commit is contained in:
John Reck
2016-06-14 14:58:56 +00:00
committed by android-build-merger
2 changed files with 10 additions and 0 deletions

View File

@@ -149,6 +149,8 @@ void CanvasContext::setStopped(bool stopped) {
if (mEglManager.isCurrent(mEglSurface)) {
mEglManager.makeCurrent(EGL_NO_SURFACE);
}
} else if (mIsDirty && hasSurface()) {
mRenderThread.postFrameCallback(this);
}
}
}
@@ -231,6 +233,8 @@ void CanvasContext::prepareTree(TreeInfo& info, int64_t* uiFrameInfo,
freePrefetchedLayers(info.observer);
GL_CHECKPOINT(MODERATE);
mIsDirty = true;
if (CC_UNLIKELY(!mNativeSurface.get())) {
mCurrentFrameInfo->addFlag(FrameInfoFlags::SkippedFrame);
info.out.canDrawThisFrame = false;
@@ -504,6 +508,7 @@ void CanvasContext::draw() {
// Even if we decided to cancel the frame, from the perspective of jank
// metrics the frame was swapped at this point
mCurrentFrameInfo->markSwapBuffers();
mIsDirty = false;
if (drew || mEglManager.damageRequiresSwap()) {
if (CC_UNLIKELY(!mEglManager.swapBuffers(frame, screenDirty))) {

View File

@@ -187,7 +187,12 @@ private:
EglManager& mEglManager;
sp<Surface> mNativeSurface;
EGLSurface mEglSurface = EGL_NO_SURFACE;
// stopped indicates the CanvasContext will reject actual redraw operations,
// and defer repaint until it is un-stopped
bool mStopped = false;
// CanvasContext is dirty if it has received an update that it has not
// painted onto its surface.
bool mIsDirty = false;
bool mBufferPreserved = false;
SwapBehavior mSwapBehavior = kSwap_default;
struct SwapHistory {