Merge "Always swap buffers if using partial update extension" into nyc-dev

This commit is contained in:
John Reck
2016-02-26 23:53:21 +00:00
committed by Android (Google) Code Review
3 changed files with 9 additions and 1 deletions

View File

@@ -476,7 +476,7 @@ void CanvasContext::draw() {
// metrics the frame was swapped at this point
mCurrentFrameInfo->markSwapBuffers();
if (drew) {
if (drew || mEglManager.damageRequiresSwap()) {
if (CC_UNLIKELY(!mEglManager.swapBuffers(frame, screenDirty))) {
setSurface(nullptr);
}

View File

@@ -324,6 +324,10 @@ void EglManager::damageFrame(const Frame& frame, const SkRect& dirty) {
#endif
}
bool EglManager::damageRequiresSwap() {
return EglExtensions.setDamage && mSwapBehavior == SwapBehavior::BufferAge;
}
bool EglManager::swapBuffers(const Frame& frame, const SkRect& screenDirty) {
if (CC_UNLIKELY(Properties::waitForGpuCompletion)) {

View File

@@ -70,6 +70,10 @@ public:
bool makeCurrent(EGLSurface surface, EGLint* errOut = nullptr);
Frame beginFrame(EGLSurface surface);
void damageFrame(const Frame& frame, const SkRect& dirty);
// If this returns true it is mandatory that swapBuffers is called
// if damageFrame is called without subsequent calls to damageFrame().
// See EGL_KHR_partial_update for more information
bool damageRequiresSwap();
bool swapBuffers(const Frame& frame, const SkRect& screenDirty);
// Returns true iff the surface is now preserving buffers.