diff --git a/services/core/java/com/android/server/display/ColorFade.java b/services/core/java/com/android/server/display/ColorFade.java index 40ab10834ae47..7cb29215b5bf9 100644 --- a/services/core/java/com/android/server/display/ColorFade.java +++ b/services/core/java/com/android/server/display/ColorFade.java @@ -93,6 +93,7 @@ final class ColorFade { private int mDisplayHeight; // real height, not rotated private SurfaceControl mSurfaceControl; private Surface mSurface; + private SurfaceControl mBLASTSurfaceControl; private BLASTBufferQueue mBLASTBufferQueue; private NaturalSurfaceLayout mSurfaceLayout; private EGLDisplay mEglDisplay; @@ -576,7 +577,7 @@ final class ColorFade { if (mMode == MODE_FADE) { builder.setColorLayer(); } else { - builder.setBLASTLayer(); + builder.setContainerLayer(); } mSurfaceControl = builder.build(); } catch (OutOfResourcesException ex) { @@ -592,7 +593,14 @@ final class ColorFade { mTransaction.apply(); if (mMode != MODE_FADE) { - mBLASTBufferQueue = new BLASTBufferQueue("ColorFade", mSurfaceControl, + final SurfaceControl.Builder b = new SurfaceControl.Builder() + .setName("ColorFade BLAST") + .setParent(mSurfaceControl) + .setHidden(false) + .setSecure(isSecure) + .setBLASTLayer(); + mBLASTSurfaceControl = b.build(); + mBLASTBufferQueue = new BLASTBufferQueue("ColorFade", mBLASTSurfaceControl, mDisplayWidth, mDisplayHeight, PixelFormat.TRANSLUCENT); mSurface = mBLASTBufferQueue.createSurface(); } @@ -723,10 +731,16 @@ final class ColorFade { mTransaction.remove(mSurfaceControl).apply(); if (mSurface != null) { mSurface.release(); - mBLASTBufferQueue.destroy(); mSurface = null; + } + + if (mBLASTSurfaceControl != null) { + mBLASTSurfaceControl.release(); + mBLASTSurfaceControl = null; + mBLASTBufferQueue.destroy(); mBLASTBufferQueue = null; } + mSurfaceControl = null; mSurfaceVisible = false; mSurfaceAlpha = 0f;