Merge \"Redraw if dirty during stopped when resumed\" into nyc-dev
am: 5b4ff21a74
Change-Id: If4eedb4a4c1ff6d4e96f8b0db4ddd846a2967a9f
This commit is contained in:
@@ -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))) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user