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

This commit is contained in:
Michael Lentine 2014-10-01 22:44:45 +00:00 committed by Android (Google) Code Review
commit db57cfbd6f
2 changed files with 12 additions and 4 deletions

View File

@ -1743,7 +1743,7 @@ void SurfaceFlinger::doDisplayComposition(const sp<const DisplayDevice>& hw,
} }
if (CC_LIKELY(!mDaltonize && !mHasColorMatrix)) { if (CC_LIKELY(!mDaltonize && !mHasColorMatrix)) {
doComposeSurfaces(hw, dirtyRegion); if (!doComposeSurfaces(hw, dirtyRegion)) return;
} else { } else {
RenderEngine& engine(getRenderEngine()); RenderEngine& engine(getRenderEngine());
mat4 colorMatrix = mColorMatrix; mat4 colorMatrix = mColorMatrix;
@ -1762,7 +1762,7 @@ void SurfaceFlinger::doDisplayComposition(const sp<const DisplayDevice>& hw,
hw->swapBuffers(getHwComposer()); 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()); RenderEngine& engine(getRenderEngine());
const int32_t id = hw->getHwcDisplayId(); const int32_t id = hw->getHwcDisplayId();
@ -1775,7 +1775,11 @@ void SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const
if (!hw->makeCurrent(mEGLDisplay, mEGLContext)) { if (!hw->makeCurrent(mEGLDisplay, mEGLContext)) {
ALOGW("DisplayDevice::makeCurrent failed. Aborting surface composition for display %s", ALOGW("DisplayDevice::makeCurrent failed. Aborting surface composition for display %s",
hw->getDisplayName().string()); 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 // 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 // disable scissor at the end of the frame
engine.disableScissor(); engine.disableScissor();
return true;
} }
void SurfaceFlinger::drawWormhole(const sp<const DisplayDevice>& hw, const Region& region) const { void SurfaceFlinger::drawWormhole(const sp<const DisplayDevice>& hw, const Region& region) const {

View File

@ -377,7 +377,10 @@ private:
void doComposition(); void doComposition();
void doDebugFlashRegions(); void doDebugFlashRegions();
void doDisplayComposition(const sp<const DisplayDevice>& hw, const Region& dirtyRegion); 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 postFramebuffer();
void drawWormhole(const sp<const DisplayDevice>& hw, const Region& region) const; void drawWormhole(const sp<const DisplayDevice>& hw, const Region& region) const;