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

Commit db57cfbd authored by Michael Lentine's avatar Michael Lentine Committed by Android (Google) Code Review
Browse files

Merge "When eglMakeCurrent fails we need to fix the egl state." into lmp-dev

parents dd230cb8 3f121fc6
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -1743,7 +1743,7 @@ void SurfaceFlinger::doDisplayComposition(const sp<const DisplayDevice>& hw,
    }

    if (CC_LIKELY(!mDaltonize && !mHasColorMatrix)) {
        doComposeSurfaces(hw, dirtyRegion);
        if (!doComposeSurfaces(hw, dirtyRegion)) return;
    } else {
        RenderEngine& engine(getRenderEngine());
        mat4 colorMatrix = mColorMatrix;
@@ -1762,7 +1762,7 @@ void SurfaceFlinger::doDisplayComposition(const sp<const DisplayDevice>& hw,
    hw->swapBuffers(getHwComposer());
}

void SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const Region& dirty)
bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const Region& dirty)
{
    RenderEngine& engine(getRenderEngine());
    const int32_t id = hw->getHwcDisplayId();
@@ -1775,7 +1775,11 @@ void SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const
        if (!hw->makeCurrent(mEGLDisplay, mEGLContext)) {
            ALOGW("DisplayDevice::makeCurrent failed. Aborting surface composition for display %s",
                  hw->getDisplayName().string());
            return;
            eglMakeCurrent(mEGLDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
            if(!getDefaultDisplayDevice()->makeCurrent(mEGLDisplay, mEGLContext)) {
              ALOGE("DisplayDevice::makeCurrent on default display failed. Aborting.");
            }
            return false;
        }

        // Never touch the framebuffer if we don't have any framebuffer layers
@@ -1883,6 +1887,7 @@ void SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const

    // disable scissor at the end of the frame
    engine.disableScissor();
    return true;
}

void SurfaceFlinger::drawWormhole(const sp<const DisplayDevice>& hw, const Region& region) const {
+4 −1
Original line number Diff line number Diff line
@@ -377,7 +377,10 @@ private:
    void doComposition();
    void doDebugFlashRegions();
    void doDisplayComposition(const sp<const DisplayDevice>& hw, const Region& dirtyRegion);
    void doComposeSurfaces(const sp<const DisplayDevice>& hw, const Region& dirty);

    // compose surfaces for display hw. this fails if using GL and the surface
    // has been destroyed and is no longer valid.
    bool doComposeSurfaces(const sp<const DisplayDevice>& hw, const Region& dirty);

    void postFramebuffer();
    void drawWormhole(const sp<const DisplayDevice>& hw, const Region& region) const;