From de19665154a7dbb66a4932f43f6499d67bede4b8 Mon Sep 17 00:00:00 2001 From: Lloyd Pique Date: Wed, 22 Jan 2020 17:29:58 -0800 Subject: CE: Remove compositionengine::Layer This was a mostly straightforward refactor that restructures the interface between SurfaceFlinger and CompositionEngine. 1) Instead of each SurfaceFlinger Layer creating and owning a compositionengine::Layer, each Layer instead creates and owns a compositionengine::LayerFECompositionState structure. Containing this state structure was the only real purpose for compositionengine::Layer. 2) Use the compositionengine::LayerFE interface in CompositionEngine in place of compositionengine::Layer. This includes passing a std::vector for the layers when SurfaceFlinger calls into CompositionEngine. 3) Alters the LayerFE interface to add the ability to get the state, as well as changing the existing "latchCompositionState" calls taking a state reference as the first argument into "prepareCompositionState" calls that do not need it, as the target of the call owns the state. 4) Alters the SurfaceFlinger Layer implementations to match the LayerFE interface changes. Test: atest libcompositionengine_test libsurfaceflinger_unittest Test: atest CtsColorModeTestCases Test: atest CtsDisplayTestCases Test: atest CtsGraphicsTestCases Test: atest CtsUiRenderingTestCases Test: atest CtsViewTestCases Test: atest android.media.cts.EncodeVirtualDisplayWithCompositionTest Test: go/wm-smoke Bug: 144117494 Change-Id: Id45df7c9cc389c8fd834ba379bc0d6360a984dac --- services/surfaceflinger/BufferLayer.cpp | 37 +++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'services/surfaceflinger/BufferLayer.cpp') diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp index 35d0215fa1..f4f45be49f 100644 --- a/services/surfaceflinger/BufferLayer.cpp +++ b/services/surfaceflinger/BufferLayer.cpp @@ -26,8 +26,6 @@ #include "BufferLayer.h" #include -#include -#include #include #include #include @@ -66,8 +64,7 @@ static constexpr float defaultMaxContentLuminance = 1000.0; BufferLayer::BufferLayer(const LayerCreationArgs& args) : Layer(args), mTextureName(args.textureName), - mCompositionLayer{mFlinger->getCompositionEngine().createLayer( - compositionengine::LayerCreationArgs{this})} { + mCompositionState{mFlinger->getCompositionEngine().createLayerFECompositionState()} { ALOGV("Creating Layer %s", getDebugName()); mPremultipliedAlpha = !(args.flags & ISurfaceComposerClient::eNonPremultiplied); @@ -184,7 +181,7 @@ std::optional BufferLayer::prepareCli bool blackOutLayer = (isProtected() && !targetSettings.supportsProtectedContent) || (isSecure() && !targetSettings.isSecure); const State& s(getDrawingState()); - LayerFE::LayerSettings& layer = *result; + compositionengine::LayerFE::LayerSettings& layer = *result; if (!blackOutLayer) { layer.source.buffer.buffer = mBufferInfo.mBuffer; layer.source.buffer.isOpaque = isOpaque(s); @@ -282,17 +279,29 @@ bool BufferLayer::isHdrY410() const { mBufferInfo.mBuffer->getPixelFormat() == HAL_PIXEL_FORMAT_RGBA_1010102); } -void BufferLayer::latchPerFrameState( - compositionengine::LayerFECompositionState& compositionState) const { - Layer::latchPerFrameState(compositionState); +sp BufferLayer::getCompositionEngineLayerFE() const { + return asLayerFE(); +} + +compositionengine::LayerFECompositionState* BufferLayer::editCompositionState() { + return mCompositionState.get(); +} + +const compositionengine::LayerFECompositionState* BufferLayer::getCompositionState() const { + return mCompositionState.get(); +} + +void BufferLayer::preparePerFrameCompositionState() { + Layer::preparePerFrameCompositionState(); // Sideband layers - if (compositionState.sidebandStream.get()) { - compositionState.compositionType = Hwc2::IComposerClient::Composition::SIDEBAND; + auto* compositionState = editCompositionState(); + if (compositionState->sidebandStream.get()) { + compositionState->compositionType = Hwc2::IComposerClient::Composition::SIDEBAND; } else { // Normal buffer layers - compositionState.hdrMetadata = mBufferInfo.mHdrMetadata; - compositionState.compositionType = mPotentialCursor + compositionState->hdrMetadata = mBufferInfo.mHdrMetadata; + compositionState->compositionType = mPotentialCursor ? Hwc2::IComposerClient::Composition::CURSOR : Hwc2::IComposerClient::Composition::DEVICE; } @@ -641,10 +650,6 @@ Rect BufferLayer::getBufferSize(const State& s) const { return Rect(bufWidth, bufHeight); } -std::shared_ptr BufferLayer::getCompositionLayer() const { - return mCompositionLayer; -} - FloatRect BufferLayer::computeSourceBounds(const FloatRect& parentBounds) const { const State& s(getDrawingState()); -- cgit v1.2.3-59-g8ed1b