diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2020-05-04 08:37:32 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-05-04 08:37:32 +0000 |
commit | c5ddb5d97b7f462e5b2167439e1a18fa494ae32f (patch) | |
tree | d7b133856080745f46bef7aa6716d0720e4cfc19 | |
parent | bbb3a1500793d874851872852a2c2f8c6a4ac284 (diff) | |
parent | f73a4a7ef8cdc51c29f3683b93eb9fada46c9762 (diff) | |
download | native-pie-gsi.tar.gz |
Merge "sf: Fix issue with makeCurrent when multiple display present" into pie-gsipie-gsi
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index d0207f9e5b..9c02886885 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -3011,6 +3011,7 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& displayDev const DisplayRenderArea renderArea(displayDevice); const auto hwcId = displayDevice->getHwcDisplayId(); const bool hasClientComposition = getBE().mHwc->hasClientComposition(hwcId); + const bool hasFlipClientTargetReq = getBE().mHwc->hasFlipClientTargetRequest(hwcId); ATRACE_INT("hasClientComposition", hasClientComposition); bool applyColorMatrix = false; @@ -3097,6 +3098,18 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& displayDev getBE().mRenderEngine->setScissor(scissor.left, height - scissor.bottom, scissor.getWidth(), scissor.getHeight()); } + } else if (hasFlipClientTargetReq) { + if (!displayDevice->makeCurrent()) { + ALOGW("DisplayDevice::makeCurrent failed. Aborting surface composition for display %s", + displayDevice->getDisplayName().string()); + getRenderEngine().resetCurrentSurface(); + + // |mStateLock| not needed as we are on the main thread + if(!getDefaultDisplayDeviceLocked()->makeCurrent()) { + ALOGE("DisplayDevice::makeCurrent on default display failed. Aborting."); + } + return false; + } } /* |