Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c96955d9 authored by John Reck's avatar John Reck
Browse files

Always swap buffers if using partial update extension

Bug: 27379093
Change-Id: Ifda18287248e4ae07d4bf2ae9642a9d23039e81f
parent f4db3d25
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
        }
+4 −0
Original line number Diff line number Diff line
@@ -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)) {
+4 −0
Original line number Diff line number Diff line
@@ -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.