From 7fb9e5a047292114552ba6523bd790269b6cf937 Mon Sep 17 00:00:00 2001 From: Vishnu Nair Date: Mon, 8 Nov 2021 12:44:05 -0800 Subject: SF: Create layers with layerid When recreating layer states from transaction traces we need to create layers with a specific layer id. Add the layer id as part of LayerCreationArgs and pass the struct around instead of individual args. Test: presubmit Bug: 200284593 Change-Id: I029cdb5362d1926deaf2ce64f70a1882a418705b --- services/surfaceflinger/EffectLayer.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'services/surfaceflinger/EffectLayer.cpp') diff --git a/services/surfaceflinger/EffectLayer.cpp b/services/surfaceflinger/EffectLayer.cpp index 86c6b2161c..845176c112 100644 --- a/services/surfaceflinger/EffectLayer.cpp +++ b/services/surfaceflinger/EffectLayer.cpp @@ -136,8 +136,7 @@ ui::Dataspace EffectLayer::getDataSpace() const { sp EffectLayer::createClone() { sp layer = mFlinger->getFactory().createEffectLayer( - LayerCreationArgs(mFlinger.get(), nullptr, mName + " (Mirror)", 0, 0, 0, - LayerMetadata())); + LayerCreationArgs(mFlinger.get(), nullptr, mName + " (Mirror)", 0, LayerMetadata())); layer->setInitialValuesForClone(this); return layer; } -- cgit v1.2.3-59-g8ed1b From 2e1aa18498c9e7139c17849407d4743074632e9b Mon Sep 17 00:00:00 2001 From: Leon Scroggins III Date: Wed, 1 Dec 2021 17:33:12 -0500 Subject: Switch from HIDL Composition type to AIDL In preparation for adding a new Composition type which is only in AIDL. This change is almost completely mechanical, and should have no impact on behavior. Bug: 193170859 Test: existing tests Change-Id: I1f923fcc8d8e6dff388493a76e31d435638b5255 --- services/surfaceflinger/BufferLayer.cpp | 7 +- .../compositionengine/LayerFECompositionState.h | 5 +- .../include/compositionengine/OutputLayer.h | 5 +- .../include/compositionengine/impl/OutputLayer.h | 20 +- .../impl/OutputLayerCompositionState.h | 6 +- .../compositionengine/impl/planner/LayerState.h | 27 +-- .../compositionengine/impl/planner/Predictor.h | 4 +- .../include/compositionengine/mock/OutputLayer.h | 3 +- .../CompositionEngine/src/Display.cpp | 3 +- .../CompositionEngine/src/OutputLayer.cpp | 61 +++--- .../CompositionEngine/src/planner/Flattener.cpp | 3 +- .../CompositionEngine/src/planner/LayerState.cpp | 3 +- .../CompositionEngine/src/planner/Planner.cpp | 2 +- .../CompositionEngine/src/planner/Predictor.cpp | 36 ++-- .../CompositionEngine/tests/DisplayTest.cpp | 18 +- .../CompositionEngine/tests/MockHWC2.h | 5 +- .../CompositionEngine/tests/OutputLayerTest.cpp | 99 ++++----- .../tests/planner/LayerStateTest.cpp | 31 ++- .../tests/planner/PredictorTest.cpp | 20 +- .../DisplayHardware/AidlComposerHal.cpp | 14 +- .../DisplayHardware/AidlComposerHal.h | 13 +- .../surfaceflinger/DisplayHardware/ComposerHal.h | 9 +- services/surfaceflinger/DisplayHardware/HWC2.cpp | 4 +- services/surfaceflinger/DisplayHardware/HWC2.h | 15 +- .../surfaceflinger/DisplayHardware/HWComposer.h | 6 +- services/surfaceflinger/DisplayHardware/Hal.h | 18 +- .../DisplayHardware/HidlComposerHal.cpp | 19 +- .../DisplayHardware/HidlComposerHal.h | 20 +- services/surfaceflinger/EffectLayer.cpp | 3 +- services/surfaceflinger/Layer.cpp | 9 +- services/surfaceflinger/Layer.h | 3 +- .../tests/unittests/CompositionTest.cpp | 235 ++++++++++++--------- .../tests/unittests/TestableSurfaceFlinger.h | 3 +- .../unittests/mock/DisplayHardware/MockComposer.h | 6 +- .../unittests/mock/DisplayHardware/MockHWC2.h | 7 +- 35 files changed, 424 insertions(+), 318 deletions(-) (limited to 'services/surfaceflinger/EffectLayer.cpp') diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp index 64ddd687ad..e26c763f4e 100644 --- a/services/surfaceflinger/BufferLayer.cpp +++ b/services/surfaceflinger/BufferLayer.cpp @@ -292,14 +292,15 @@ void BufferLayer::preparePerFrameCompositionState() { // Sideband layers auto* compositionState = editCompositionState(); if (compositionState->sidebandStream.get() && !compositionState->sidebandStreamHasFrame) { - compositionState->compositionType = Hwc2::IComposerClient::Composition::SIDEBAND; + compositionState->compositionType = + aidl::android::hardware::graphics::composer3::Composition::SIDEBAND; return; } else { // Normal buffer layers compositionState->hdrMetadata = mBufferInfo.mHdrMetadata; compositionState->compositionType = mPotentialCursor - ? Hwc2::IComposerClient::Composition::CURSOR - : Hwc2::IComposerClient::Composition::DEVICE; + ? aidl::android::hardware::graphics::composer3::Composition::CURSOR + : aidl::android::hardware::graphics::composer3::Composition::DEVICE; } compositionState->buffer = mBufferInfo.mBuffer->getBuffer(); diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFECompositionState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFECompositionState.h index 7e605f9d59..8bf7f8fbfa 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFECompositionState.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFECompositionState.h @@ -39,6 +39,8 @@ #include "DisplayHardware/Hal.h" +#include + // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic pop // ignored "-Wconversion -Wextra" @@ -156,7 +158,8 @@ struct LayerFECompositionState { */ // The type of composition for this layer - hal::Composition compositionType{hal::Composition::INVALID}; + aidl::android::hardware::graphics::composer3::Composition compositionType{ + aidl::android::hardware::graphics::composer3::Composition::INVALID}; // The buffer and related state sp buffer; diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/OutputLayer.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/OutputLayer.h index ead941d1f9..a2824f5f9a 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/OutputLayer.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/OutputLayer.h @@ -33,6 +33,8 @@ #include "LayerFE.h" +#include + // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic pop // ignored "-Wconversion -Wextra" @@ -112,7 +114,8 @@ public: virtual bool isHardwareCursor() const = 0; // Applies a HWC device requested composition type change - virtual void applyDeviceCompositionTypeChange(Hwc2::IComposerClient::Composition) = 0; + virtual void applyDeviceCompositionTypeChange( + aidl::android::hardware::graphics::composer3::Composition) = 0; // Prepares to apply any HWC device layer requests virtual void prepareForDeviceLayerRequests() = 0; diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h index c15249d297..0082dac978 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h @@ -27,6 +27,8 @@ #include "DisplayHardware/DisplayIdentification.h" +#include + namespace android::compositionengine { struct LayerFECompositionState; @@ -50,7 +52,8 @@ public: HWC2::Layer* getHwcLayer() const override; bool requiresClientComposition() const override; bool isHardwareCursor() const override; - void applyDeviceCompositionTypeChange(Hwc2::IComposerClient::Composition) override; + void applyDeviceCompositionTypeChange( + aidl::android::hardware::graphics::composer3::Composition) override; void prepareForDeviceLayerRequests() override; void applyDeviceLayerRequest(Hwc2::IComposerClient::LayerRequest request) override; bool needsFiltering() const override; @@ -68,21 +71,24 @@ protected: private: Rect calculateInitialCrop() const; - void writeOutputDependentGeometryStateToHWC(HWC2::Layer*, Hwc2::IComposerClient::Composition, - uint32_t z); + void writeOutputDependentGeometryStateToHWC( + HWC2::Layer*, aidl::android::hardware::graphics::composer3::Composition, uint32_t z); void writeOutputIndependentGeometryStateToHWC(HWC2::Layer*, const LayerFECompositionState&, bool skipLayer); void writeOutputDependentPerFrameStateToHWC(HWC2::Layer*); void writeOutputIndependentPerFrameStateToHWC( HWC2::Layer*, const LayerFECompositionState&, - Hwc2::IComposerClient::Composition compositionType, bool skipLayer); + aidl::android::hardware::graphics::composer3::Composition compositionType, + bool skipLayer); void writeSolidColorStateToHWC(HWC2::Layer*, const LayerFECompositionState&); void writeSidebandStateToHWC(HWC2::Layer*, const LayerFECompositionState&); void writeBufferStateToHWC(HWC2::Layer*, const LayerFECompositionState&, bool skipLayer); - void writeCompositionTypeToHWC(HWC2::Layer*, Hwc2::IComposerClient::Composition, + void writeCompositionTypeToHWC(HWC2::Layer*, + aidl::android::hardware::graphics::composer3::Composition, bool isPeekingThrough, bool skipLayer); - void detectDisallowedCompositionTypeChange(Hwc2::IComposerClient::Composition from, - Hwc2::IComposerClient::Composition to) const; + void detectDisallowedCompositionTypeChange( + aidl::android::hardware::graphics::composer3::Composition from, + aidl::android::hardware::graphics::composer3::Composition to) const; bool isClientCompositionForced(bool isPeekingThrough) const; }; diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h index 627b80bcc2..49cb91291f 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h @@ -35,6 +35,8 @@ #include "DisplayHardware/ComposerHal.h" +#include + // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic pop // ignored "-Wconversion -Wextra" @@ -123,8 +125,8 @@ struct OutputLayerCompositionState { std::shared_ptr hwcLayer; // The most recently set HWC composition type for this layer - Hwc2::IComposerClient::Composition hwcCompositionType{ - Hwc2::IComposerClient::Composition::INVALID}; + aidl::android::hardware::graphics::composer3::Composition hwcCompositionType{ + aidl::android::hardware::graphics::composer3::Composition::INVALID}; // The buffer cache for this layer. This is used to lower the // cost of sending reused buffers to the HWC. diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h index 7397c19837..14324de7ce 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h @@ -28,6 +28,8 @@ #include "DisplayHardware/Hal.h" #include "math/HashCombine.h" +#include + namespace std { template struct hash> { @@ -232,7 +234,7 @@ public: return mBackgroundBlurRadius.get() > 0 || !mBlurRegions.get().empty(); } int32_t getBackgroundBlurRadius() const { return mBackgroundBlurRadius.get(); } - hardware::graphics::composer::hal::Composition getCompositionType() const { + aidl::android::hardware::graphics::composer3::Composition getCompositionType() const { return mCompositionType.get(); } @@ -370,17 +372,18 @@ private: OutputLayerState mColorTransform; - using CompositionTypeState = OutputLayerState; - CompositionTypeState - mCompositionType{[](auto layer) { - return layer->getState().forceClientComposition - ? hardware::graphics::composer::hal::Composition::CLIENT - : layer->getLayerFE() - .getCompositionState() - ->compositionType; - }, - CompositionTypeState::getHalToStrings()}; + using CompositionTypeState = + OutputLayerState; + CompositionTypeState mCompositionType{[](auto layer) { + return layer->getState().forceClientComposition + ? aidl::android::hardware::graphics:: + composer3::Composition::CLIENT + : layer->getLayerFE() + .getCompositionState() + ->compositionType; + }, + CompositionTypeState::getHalToStrings()}; OutputLayerState mSidebandStream{[](auto layer) { diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Predictor.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Predictor.h index fe486d3327..ef1560e23d 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Predictor.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Predictor.h @@ -109,7 +109,7 @@ public: static std::optional fromString(const std::string&); void reset() { mLayerTypes.clear(); } - void addLayerType(hardware::graphics::composer::hal::Composition type) { + void addLayerType(aidl::android::hardware::graphics::composer3::Composition type) { mLayerTypes.emplace_back(type); } @@ -125,7 +125,7 @@ public: } private: - std::vector mLayerTypes; + std::vector mLayerTypes; }; } // namespace android::compositionengine::impl::planner diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/OutputLayer.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/OutputLayer.h index 358ed5a0b9..a6cb811468 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/OutputLayer.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/OutputLayer.h @@ -46,7 +46,8 @@ public: MOCK_CONST_METHOD0(getHwcLayer, HWC2::Layer*()); MOCK_CONST_METHOD0(requiresClientComposition, bool()); MOCK_CONST_METHOD0(isHardwareCursor, bool()); - MOCK_METHOD1(applyDeviceCompositionTypeChange, void(Hwc2::IComposerClient::Composition)); + MOCK_METHOD1(applyDeviceCompositionTypeChange, + void(aidl::android::hardware::graphics::composer3::Composition)); MOCK_METHOD0(prepareForDeviceLayerRequests, void()); MOCK_METHOD1(applyDeviceLayerRequest, void(Hwc2::IComposerClient::LayerRequest request)); MOCK_CONST_METHOD0(needsFiltering, bool()); diff --git a/services/surfaceflinger/CompositionEngine/src/Display.cpp b/services/surfaceflinger/CompositionEngine/src/Display.cpp index 4603e6bc3e..35713192e0 100644 --- a/services/surfaceflinger/CompositionEngine/src/Display.cpp +++ b/services/surfaceflinger/CompositionEngine/src/Display.cpp @@ -282,7 +282,8 @@ void Display::applyChangedTypesToLayers(const ChangedTypes& changedTypes) { if (auto it = changedTypes.find(hwcLayer); it != changedTypes.end()) { layer->applyDeviceCompositionTypeChange( - static_cast(it->second)); + static_cast( + it->second)); } } } diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp index b010d9f965..e6bcec869e 100644 --- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp @@ -37,6 +37,8 @@ // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic pop // ignored "-Wconversion" +using aidl::android::hardware::graphics::composer3::Composition; + namespace android::compositionengine { OutputLayer::~OutputLayer() = default; @@ -358,8 +360,8 @@ void OutputLayer::writeStateToHWC(bool includeGeometry, bool skipLayer, uint32_t auto requestedCompositionType = outputIndependentState->compositionType; - if (requestedCompositionType == hal::Composition::SOLID_COLOR && state.overrideInfo.buffer) { - requestedCompositionType = hal::Composition::DEVICE; + if (requestedCompositionType == Composition::SOLID_COLOR && state.overrideInfo.buffer) { + requestedCompositionType = Composition::DEVICE; } // TODO(b/181172795): We now update geometry for all flattened layers. We should update it @@ -380,7 +382,7 @@ void OutputLayer::writeStateToHWC(bool includeGeometry, bool skipLayer, uint32_t writeCompositionTypeToHWC(hwcLayer.get(), requestedCompositionType, isPeekingThrough, skipLayer); - if (requestedCompositionType == hal::Composition::SOLID_COLOR) { + if (requestedCompositionType == Composition::SOLID_COLOR) { writeSolidColorStateToHWC(hwcLayer.get(), *outputIndependentState); } @@ -389,7 +391,7 @@ void OutputLayer::writeStateToHWC(bool includeGeometry, bool skipLayer, uint32_t } void OutputLayer::writeOutputDependentGeometryStateToHWC(HWC2::Layer* hwcLayer, - hal::Composition requestedCompositionType, + Composition requestedCompositionType, uint32_t z) { const auto& outputDependentState = getState(); @@ -423,7 +425,7 @@ void OutputLayer::writeOutputDependentGeometryStateToHWC(HWC2::Layer* hwcLayer, } // Solid-color layers and overridden buffers should always use an identity transform. - const auto bufferTransform = (requestedCompositionType != hal::Composition::SOLID_COLOR && + const auto bufferTransform = (requestedCompositionType != Composition::SOLID_COLOR && getState().overrideInfo.buffer == nullptr) ? outputDependentState.bufferTransform : static_cast(0); @@ -504,7 +506,7 @@ void OutputLayer::writeOutputDependentPerFrameStateToHWC(HWC2::Layer* hwcLayer) void OutputLayer::writeOutputIndependentPerFrameStateToHWC( HWC2::Layer* hwcLayer, const LayerFECompositionState& outputIndependentState, - hal::Composition compositionType, bool skipLayer) { + Composition compositionType, bool skipLayer) { switch (auto error = hwcLayer->setColorTransform(outputIndependentState.colorTransform)) { case hal::Error::NONE: break; @@ -529,18 +531,18 @@ void OutputLayer::writeOutputIndependentPerFrameStateToHWC( // Content-specific per-frame state switch (compositionType) { - case hal::Composition::SOLID_COLOR: + case Composition::SOLID_COLOR: // For compatibility, should be written AFTER the composition type. break; - case hal::Composition::SIDEBAND: + case Composition::SIDEBAND: writeSidebandStateToHWC(hwcLayer, outputIndependentState); break; - case hal::Composition::CURSOR: - case hal::Composition::DEVICE: + case Composition::CURSOR: + case Composition::DEVICE: writeBufferStateToHWC(hwcLayer, outputIndependentState, skipLayer); break; - case hal::Composition::INVALID: - case hal::Composition::CLIENT: + case Composition::INVALID: + case Composition::CLIENT: // Ignored break; } @@ -606,13 +608,13 @@ void OutputLayer::writeBufferStateToHWC(HWC2::Layer* hwcLayer, } void OutputLayer::writeCompositionTypeToHWC(HWC2::Layer* hwcLayer, - hal::Composition requestedCompositionType, + Composition requestedCompositionType, bool isPeekingThrough, bool skipLayer) { auto& outputDependentState = editState(); if (isClientCompositionForced(isPeekingThrough)) { // If we are forcing client composition, we need to tell the HWC - requestedCompositionType = hal::Composition::CLIENT; + requestedCompositionType = Composition::CLIENT; } // Set the requested composition type with the HWC whenever it changes @@ -625,7 +627,7 @@ void OutputLayer::writeCompositionTypeToHWC(HWC2::Layer* hwcLayer, if (auto error = hwcLayer->setCompositionType(requestedCompositionType); error != hal::Error::NONE) { ALOGE("[%s] Failed to set composition type %s: %s (%d)", getLayerFE().getDebugName(), - toString(requestedCompositionType).c_str(), to_string(error).c_str(), + to_string(requestedCompositionType).c_str(), to_string(error).c_str(), static_cast(error)); } } @@ -664,38 +666,37 @@ HWC2::Layer* OutputLayer::getHwcLayer() const { bool OutputLayer::requiresClientComposition() const { const auto& state = getState(); - return !state.hwc || state.hwc->hwcCompositionType == hal::Composition::CLIENT; + return !state.hwc || state.hwc->hwcCompositionType == Composition::CLIENT; } bool OutputLayer::isHardwareCursor() const { const auto& state = getState(); - return state.hwc && state.hwc->hwcCompositionType == hal::Composition::CURSOR; + return state.hwc && state.hwc->hwcCompositionType == Composition::CURSOR; } -void OutputLayer::detectDisallowedCompositionTypeChange(hal::Composition from, - hal::Composition to) const { +void OutputLayer::detectDisallowedCompositionTypeChange(Composition from, Composition to) const { bool result = false; switch (from) { - case hal::Composition::INVALID: - case hal::Composition::CLIENT: + case Composition::INVALID: + case Composition::CLIENT: result = false; break; - case hal::Composition::DEVICE: - case hal::Composition::SOLID_COLOR: - result = (to == hal::Composition::CLIENT); + case Composition::DEVICE: + case Composition::SOLID_COLOR: + result = (to == Composition::CLIENT); break; - case hal::Composition::CURSOR: - case hal::Composition::SIDEBAND: - result = (to == hal::Composition::CLIENT || to == hal::Composition::DEVICE); + case Composition::CURSOR: + case Composition::SIDEBAND: + result = (to == Composition::CLIENT || to == Composition::DEVICE); break; } if (!result) { ALOGE("[%s] Invalid device requested composition type change: %s (%d) --> %s (%d)", - getLayerFE().getDebugName(), toString(from).c_str(), static_cast(from), - toString(to).c_str(), static_cast(to)); + getLayerFE().getDebugName(), to_string(from).c_str(), static_cast(from), + to_string(to).c_str(), static_cast(to)); } } @@ -704,7 +705,7 @@ bool OutputLayer::isClientCompositionForced(bool isPeekingThrough) const { (!isPeekingThrough && getLayerFE().hasRoundedCorners()); } -void OutputLayer::applyDeviceCompositionTypeChange(hal::Composition compositionType) { +void OutputLayer::applyDeviceCompositionTypeChange(Composition compositionType) { auto& state = editState(); LOG_FATAL_IF(!state.hwc); auto& hwcState = *state.hwc; diff --git a/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp b/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp index c14effccc3..0918510eef 100644 --- a/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp +++ b/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp @@ -211,7 +211,8 @@ size_t Flattener::calculateDisplayCost(const std::vector& lay displayCost += static_cast(layer->getDisplayFrame().width() * layer->getDisplayFrame().height()); - hasClientComposition |= layer->getCompositionType() == hal::Composition::CLIENT; + hasClientComposition |= layer->getCompositionType() == + aidl::android::hardware::graphics::composer3::Composition::CLIENT; } if (hasClientComposition) { diff --git a/services/surfaceflinger/CompositionEngine/src/planner/LayerState.cpp b/services/surfaceflinger/CompositionEngine/src/planner/LayerState.cpp index 2532e3df5d..c79ca0d959 100644 --- a/services/surfaceflinger/CompositionEngine/src/planner/LayerState.cpp +++ b/services/surfaceflinger/CompositionEngine/src/planner/LayerState.cpp @@ -160,7 +160,8 @@ bool operator==(const LayerState& lhs, const LayerState& rhs) { lhs.mColorTransform == rhs.mColorTransform && lhs.mCompositionType == rhs.mCompositionType && lhs.mSidebandStream == rhs.mSidebandStream && lhs.mBuffer == rhs.mBuffer && - (lhs.mCompositionType.get() != hal::Composition::SOLID_COLOR || + (lhs.mCompositionType.get() != + aidl::android::hardware::graphics::composer3::Composition::SOLID_COLOR || lhs.mSolidColor == rhs.mSolidColor); } diff --git a/services/surfaceflinger/CompositionEngine/src/planner/Planner.cpp b/services/surfaceflinger/CompositionEngine/src/planner/Planner.cpp index f5b1cee469..74d27015d7 100644 --- a/services/surfaceflinger/CompositionEngine/src/planner/Planner.cpp +++ b/services/surfaceflinger/CompositionEngine/src/planner/Planner.cpp @@ -193,7 +193,7 @@ void Planner::reportFinalPlan( finalPlan.addLayerType( forcedOrRequestedClient - ? hardware::graphics::composer::hal::Composition::CLIENT + ? aidl::android::hardware::graphics::composer3::Composition::CLIENT : layer->getLayerFE().getCompositionState()->compositionType); } diff --git a/services/surfaceflinger/CompositionEngine/src/planner/Predictor.cpp b/services/surfaceflinger/CompositionEngine/src/planner/Predictor.cpp index 8226ef7b4c..074673e550 100644 --- a/services/surfaceflinger/CompositionEngine/src/planner/Predictor.cpp +++ b/services/surfaceflinger/CompositionEngine/src/planner/Predictor.cpp @@ -39,8 +39,10 @@ std::optional LayerStack::getApproximateMatch( // Skip layers where both are client-composited, since that doesn't change the // composition plan - if (mLayers[i].getCompositionType() == hal::Composition::CLIENT && - other[i]->getCompositionType() == hal::Composition::CLIENT) { + if (mLayers[i].getCompositionType() == + aidl::android::hardware::graphics::composer3::Composition::CLIENT && + other[i]->getCompositionType() == + aidl::android::hardware::graphics::composer3::Composition::CLIENT) { continue; } @@ -89,22 +91,28 @@ std::optional Plan::fromString(const std::string& string) { for (char c : string) { switch (c) { case 'C': - plan.addLayerType(hal::Composition::CLIENT); + plan.addLayerType( + aidl::android::hardware::graphics::composer3::Composition::CLIENT); continue; case 'U': - plan.addLayerType(hal::Composition::CURSOR); + plan.addLayerType( + aidl::android::hardware::graphics::composer3::Composition::CURSOR); continue; case 'D': - plan.addLayerType(hal::Composition::DEVICE); + plan.addLayerType( + aidl::android::hardware::graphics::composer3::Composition::DEVICE); continue; case 'I': - plan.addLayerType(hal::Composition::INVALID); + plan.addLayerType( + aidl::android::hardware::graphics::composer3::Composition::INVALID); continue; case 'B': - plan.addLayerType(hal::Composition::SIDEBAND); + plan.addLayerType( + aidl::android::hardware::graphics::composer3::Composition::SIDEBAND); continue; case 'S': - plan.addLayerType(hal::Composition::SOLID_COLOR); + plan.addLayerType( + aidl::android::hardware::graphics::composer3::Composition::SOLID_COLOR); continue; default: return std::nullopt; @@ -117,22 +125,22 @@ std::string to_string(const Plan& plan) { std::string result; for (auto type : plan.mLayerTypes) { switch (type) { - case hal::Composition::CLIENT: + case aidl::android::hardware::graphics::composer3::Composition::CLIENT: result.append("C"); break; - case hal::Composition::CURSOR: + case aidl::android::hardware::graphics::composer3::Composition::CURSOR: result.append("U"); break; - case hal::Composition::DEVICE: + case aidl::android::hardware::graphics::composer3::Composition::DEVICE: result.append("D"); break; - case hal::Composition::INVALID: + case aidl::android::hardware::graphics::composer3::Composition::INVALID: result.append("I"); break; - case hal::Composition::SIDEBAND: + case aidl::android::hardware::graphics::composer3::Composition::SIDEBAND: result.append("B"); break; - case hal::Composition::SOLID_COLOR: + case aidl::android::hardware::graphics::composer3::Composition::SOLID_COLOR: result.append("S"); break; } diff --git a/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp b/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp index 568efce8b3..3bdb2c03d1 100644 --- a/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp @@ -38,6 +38,10 @@ #include "MockHWComposer.h" #include "MockPowerAdvisor.h" +#include + +using aidl::android::hardware::graphics::composer3::Composition; + namespace android::compositionengine { namespace { @@ -592,7 +596,7 @@ TEST_F(DisplayChooseCompositionStrategyTest, normalOperation) { TEST_F(DisplayChooseCompositionStrategyTest, normalOperationWithChanges) { android::HWComposer::DeviceRequestedChanges changes{ - {{nullptr, hal::Composition::CLIENT}}, + {{nullptr, Composition::CLIENT}}, hal::DisplayRequest::FLIP_CLIENT_TARGET, {{nullptr, hal::LayerRequest::CLEAR_CLIENT_TARGET}}, {hal::PixelFormat::RGBA_8888, hal::Dataspace::UNKNOWN}, @@ -700,17 +704,15 @@ TEST_F(DisplayApplyChangedTypesToLayersTest, takesEarlyOutIfNoChangedLayers) { } TEST_F(DisplayApplyChangedTypesToLayersTest, appliesChanges) { - EXPECT_CALL(*mLayer1.outputLayer, - applyDeviceCompositionTypeChange(Hwc2::IComposerClient::Composition::CLIENT)) + EXPECT_CALL(*mLayer1.outputLayer, applyDeviceCompositionTypeChange(Composition::CLIENT)) .Times(1); - EXPECT_CALL(*mLayer2.outputLayer, - applyDeviceCompositionTypeChange(Hwc2::IComposerClient::Composition::DEVICE)) + EXPECT_CALL(*mLayer2.outputLayer, applyDeviceCompositionTypeChange(Composition::DEVICE)) .Times(1); mDisplay->applyChangedTypesToLayers(impl::Display::ChangedTypes{ - {&mLayer1.hwc2Layer, hal::Composition::CLIENT}, - {&mLayer2.hwc2Layer, hal::Composition::DEVICE}, - {&hwc2LayerUnknown, hal::Composition::SOLID_COLOR}, + {&mLayer1.hwc2Layer, Composition::CLIENT}, + {&mLayer2.hwc2Layer, Composition::DEVICE}, + {&hwc2LayerUnknown, Composition::SOLID_COLOR}, }); } diff --git a/services/surfaceflinger/CompositionEngine/tests/MockHWC2.h b/services/surfaceflinger/CompositionEngine/tests/MockHWC2.h index 9e08f9eddc..ff680533ea 100644 --- a/services/surfaceflinger/CompositionEngine/tests/MockHWC2.h +++ b/services/surfaceflinger/CompositionEngine/tests/MockHWC2.h @@ -32,6 +32,8 @@ #include #include "DisplayHardware/HWC2.h" +#include + // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic pop // ignored "-Wconversion -Wextra" @@ -57,7 +59,8 @@ public: MOCK_METHOD1(setSurfaceDamage, Error(const android::Region&)); MOCK_METHOD1(setBlendMode, Error(hal::BlendMode)); MOCK_METHOD1(setColor, Error(hal::Color)); - MOCK_METHOD1(setCompositionType, Error(hal::Composition)); + MOCK_METHOD1(setCompositionType, + Error(aidl::android::hardware::graphics::composer3::Composition)); MOCK_METHOD1(setDataspace, Error(android::ui::Dataspace)); MOCK_METHOD2(setPerFrameMetadata, Error(const int32_t, const android::HdrMetadata&)); MOCK_METHOD1(setDisplayFrame, Error(const android::Rect&)); diff --git a/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp b/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp index 207c31e756..ad7976f64c 100644 --- a/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp @@ -30,6 +30,10 @@ #include "MockHWComposer.h" #include "RegionMatcher.h" +#include + +using aidl::android::hardware::graphics::composer3::Composition; + namespace android::compositionengine { namespace { @@ -851,7 +855,7 @@ struct OutputLayerWriteStateToHWCTest : public OutputLayerTest { EXPECT_CALL(*mHwcLayer, setSurfaceDamage(RegionEq(surfaceDamage))).WillOnce(Return(kError)); } - void expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition compositionType) { + void expectSetCompositionTypeCall(Composition compositionType) { EXPECT_CALL(*mHwcLayer, setCompositionType(compositionType)).WillOnce(Return(kError)); } @@ -975,7 +979,7 @@ TEST_F(OutputLayerTest, displayInstallOrientationBufferTransformSetTo90) { } TEST_F(OutputLayerWriteStateToHWCTest, canSetPerFrameStateForSolidColor) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::SOLID_COLOR; + mLayerFEState.compositionType = Composition::SOLID_COLOR; expectPerFrameCommonCalls(); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); @@ -984,7 +988,7 @@ TEST_F(OutputLayerWriteStateToHWCTest, canSetPerFrameStateForSolidColor) { // check this in this test only by setting up an testing::InSeqeuence // instance before setting up the two expectations. InSequence s; - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::SOLID_COLOR); + expectSetCompositionTypeCall(Composition::SOLID_COLOR); expectSetColorCall(); mOutputLayer.writeStateToHWC(/*includeGeometry*/ false, /*skipLayer*/ false, 0, @@ -992,11 +996,11 @@ TEST_F(OutputLayerWriteStateToHWCTest, canSetPerFrameStateForSolidColor) { } TEST_F(OutputLayerWriteStateToHWCTest, canSetPerFrameStateForSideband) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::SIDEBAND; + mLayerFEState.compositionType = Composition::SIDEBAND; expectPerFrameCommonCalls(); expectSetSidebandHandleCall(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::SIDEBAND); + expectSetCompositionTypeCall(Composition::SIDEBAND); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); @@ -1005,11 +1009,11 @@ TEST_F(OutputLayerWriteStateToHWCTest, canSetPerFrameStateForSideband) { } TEST_F(OutputLayerWriteStateToHWCTest, canSetPerFrameStateForCursor) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::CURSOR; + mLayerFEState.compositionType = Composition::CURSOR; expectPerFrameCommonCalls(); expectSetHdrMetadataAndBufferCalls(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::CURSOR); + expectSetCompositionTypeCall(Composition::CURSOR); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); @@ -1018,11 +1022,11 @@ TEST_F(OutputLayerWriteStateToHWCTest, canSetPerFrameStateForCursor) { } TEST_F(OutputLayerWriteStateToHWCTest, canSetPerFrameStateForDevice) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; + mLayerFEState.compositionType = Composition::DEVICE; expectPerFrameCommonCalls(); expectSetHdrMetadataAndBufferCalls(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); + expectSetCompositionTypeCall(Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); @@ -1031,10 +1035,9 @@ TEST_F(OutputLayerWriteStateToHWCTest, canSetPerFrameStateForDevice) { } TEST_F(OutputLayerWriteStateToHWCTest, compositionTypeIsNotSetIfUnchanged) { - (*mOutputLayer.editState().hwc).hwcCompositionType = - Hwc2::IComposerClient::Composition::SOLID_COLOR; + (*mOutputLayer.editState().hwc).hwcCompositionType = Composition::SOLID_COLOR; - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::SOLID_COLOR; + mLayerFEState.compositionType = Composition::SOLID_COLOR; expectPerFrameCommonCalls(); expectSetColorCall(); @@ -1047,11 +1050,11 @@ TEST_F(OutputLayerWriteStateToHWCTest, compositionTypeIsNotSetIfUnchanged) { } TEST_F(OutputLayerWriteStateToHWCTest, compositionTypeIsSetToClientIfColorTransformNotSupported) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::SOLID_COLOR; + mLayerFEState.compositionType = Composition::SOLID_COLOR; expectPerFrameCommonCalls(SimulateUnsupported::ColorTransform); expectSetColorCall(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::CLIENT); + expectSetCompositionTypeCall(Composition::CLIENT); mOutputLayer.writeStateToHWC(/*includeGeometry*/ false, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ false); @@ -1060,25 +1063,25 @@ TEST_F(OutputLayerWriteStateToHWCTest, compositionTypeIsSetToClientIfColorTransf TEST_F(OutputLayerWriteStateToHWCTest, compositionTypeIsSetToClientIfClientCompositionForced) { mOutputLayer.editState().forceClientComposition = true; - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::SOLID_COLOR; + mLayerFEState.compositionType = Composition::SOLID_COLOR; expectPerFrameCommonCalls(); expectSetColorCall(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::CLIENT); + expectSetCompositionTypeCall(Composition::CLIENT); mOutputLayer.writeStateToHWC(/*includeGeometry*/ false, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ false); } TEST_F(OutputLayerWriteStateToHWCTest, allStateIncludesMetadataIfPresent) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; + mLayerFEState.compositionType = Composition::DEVICE; includeGenericLayerMetadataInState(); expectGeometryCommonCalls(); expectPerFrameCommonCalls(); expectSetHdrMetadataAndBufferCalls(); expectGenericLayerMetadataCalls(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); + expectSetCompositionTypeCall(Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); @@ -1087,12 +1090,12 @@ TEST_F(OutputLayerWriteStateToHWCTest, allStateIncludesMetadataIfPresent) { } TEST_F(OutputLayerWriteStateToHWCTest, perFrameStateDoesNotIncludeMetadataIfPresent) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; + mLayerFEState.compositionType = Composition::DEVICE; includeGenericLayerMetadataInState(); expectPerFrameCommonCalls(); expectSetHdrMetadataAndBufferCalls(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); + expectSetCompositionTypeCall(Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); @@ -1101,7 +1104,7 @@ TEST_F(OutputLayerWriteStateToHWCTest, perFrameStateDoesNotIncludeMetadataIfPres } TEST_F(OutputLayerWriteStateToHWCTest, overriddenSkipLayerDoesNotSendBuffer) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; + mLayerFEState.compositionType = Composition::DEVICE; includeOverrideInfo(); expectGeometryCommonCalls(kOverrideDisplayFrame, kOverrideSourceCrop, kOverrideBufferTransform, @@ -1109,7 +1112,7 @@ TEST_F(OutputLayerWriteStateToHWCTest, overriddenSkipLayerDoesNotSendBuffer) { expectPerFrameCommonCalls(SimulateUnsupported::None, kOverrideDataspace, kOverrideVisibleRegion, kOverrideSurfaceDamage, kDisplayBrightnessNits); expectSetHdrMetadataAndBufferCalls(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); + expectSetCompositionTypeCall(Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillRepeatedly(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ true, 0, @@ -1117,7 +1120,7 @@ TEST_F(OutputLayerWriteStateToHWCTest, overriddenSkipLayerDoesNotSendBuffer) { } TEST_F(OutputLayerWriteStateToHWCTest, overriddenSkipLayerForSolidColorDoesNotSendBuffer) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::SOLID_COLOR; + mLayerFEState.compositionType = Composition::SOLID_COLOR; includeOverrideInfo(); expectGeometryCommonCalls(kOverrideDisplayFrame, kOverrideSourceCrop, kOverrideBufferTransform, @@ -1125,7 +1128,7 @@ TEST_F(OutputLayerWriteStateToHWCTest, overriddenSkipLayerForSolidColorDoesNotSe expectPerFrameCommonCalls(SimulateUnsupported::None, kOverrideDataspace, kOverrideVisibleRegion, kOverrideSurfaceDamage, kDisplayBrightnessNits); expectSetHdrMetadataAndBufferCalls(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); + expectSetCompositionTypeCall(Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillRepeatedly(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ true, 0, @@ -1133,7 +1136,7 @@ TEST_F(OutputLayerWriteStateToHWCTest, overriddenSkipLayerForSolidColorDoesNotSe } TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoIfPresent) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; + mLayerFEState.compositionType = Composition::DEVICE; includeOverrideInfo(); expectGeometryCommonCalls(kOverrideDisplayFrame, kOverrideSourceCrop, kOverrideBufferTransform, @@ -1141,7 +1144,7 @@ TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoIfPresent) { expectPerFrameCommonCalls(SimulateUnsupported::None, kOverrideDataspace, kOverrideVisibleRegion, kOverrideSurfaceDamage, kDisplayBrightnessNits); expectSetHdrMetadataAndBufferCalls(kOverrideHwcSlot, kOverrideBuffer, kOverrideFence); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); + expectSetCompositionTypeCall(Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillRepeatedly(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, @@ -1149,7 +1152,7 @@ TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoIfPresent) { } TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoForSolidColorIfPresent) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::SOLID_COLOR; + mLayerFEState.compositionType = Composition::SOLID_COLOR; includeOverrideInfo(); expectGeometryCommonCalls(kOverrideDisplayFrame, kOverrideSourceCrop, kOverrideBufferTransform, @@ -1157,7 +1160,7 @@ TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoForSolidColorIfPresen expectPerFrameCommonCalls(SimulateUnsupported::None, kOverrideDataspace, kOverrideVisibleRegion, kOverrideSurfaceDamage, kDisplayBrightnessNits); expectSetHdrMetadataAndBufferCalls(kOverrideHwcSlot, kOverrideBuffer, kOverrideFence); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); + expectSetCompositionTypeCall(Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillRepeatedly(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, @@ -1165,14 +1168,14 @@ TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoForSolidColorIfPresen } TEST_F(OutputLayerWriteStateToHWCTest, previousOverriddenLayerSendsSurfaceDamage) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; + mLayerFEState.compositionType = Composition::DEVICE; mOutputLayer.editState().hwc->stateOverridden = true; expectGeometryCommonCalls(); expectPerFrameCommonCalls(SimulateUnsupported::None, kDataspace, kOutputSpaceVisibleRegion, Region::INVALID_REGION); expectSetHdrMetadataAndBufferCalls(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); + expectSetCompositionTypeCall(Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillRepeatedly(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, @@ -1180,16 +1183,16 @@ TEST_F(OutputLayerWriteStateToHWCTest, previousOverriddenLayerSendsSurfaceDamage } TEST_F(OutputLayerWriteStateToHWCTest, previousSkipLayerSendsUpdatedDeviceCompositionInfo) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; + mLayerFEState.compositionType = Composition::DEVICE; mOutputLayer.editState().hwc->stateOverridden = true; mOutputLayer.editState().hwc->layerSkipped = true; - mOutputLayer.editState().hwc->hwcCompositionType = Hwc2::IComposerClient::Composition::DEVICE; + mOutputLayer.editState().hwc->hwcCompositionType = Composition::DEVICE; expectGeometryCommonCalls(); expectPerFrameCommonCalls(SimulateUnsupported::None, kDataspace, kOutputSpaceVisibleRegion, Region::INVALID_REGION); expectSetHdrMetadataAndBufferCalls(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); + expectSetCompositionTypeCall(Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, @@ -1197,17 +1200,17 @@ TEST_F(OutputLayerWriteStateToHWCTest, previousSkipLayerSendsUpdatedDeviceCompos } TEST_F(OutputLayerWriteStateToHWCTest, previousSkipLayerSendsUpdatedClientCompositionInfo) { - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; + mLayerFEState.compositionType = Composition::DEVICE; mOutputLayer.editState().forceClientComposition = true; mOutputLayer.editState().hwc->stateOverridden = true; mOutputLayer.editState().hwc->layerSkipped = true; - mOutputLayer.editState().hwc->hwcCompositionType = Hwc2::IComposerClient::Composition::CLIENT; + mOutputLayer.editState().hwc->hwcCompositionType = Composition::CLIENT; expectGeometryCommonCalls(); expectPerFrameCommonCalls(SimulateUnsupported::None, kDataspace, kOutputSpaceVisibleRegion, Region::INVALID_REGION); expectSetHdrMetadataAndBufferCalls(); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::CLIENT); + expectSetCompositionTypeCall(Composition::CLIENT); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillRepeatedly(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, @@ -1253,7 +1256,7 @@ TEST_F(OutputLayerWriteStateToHWCTest, roundedCornersForceClientComposition) { expectGeometryCommonCalls(); expectPerFrameCommonCalls(); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(true)); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::CLIENT); + expectSetCompositionTypeCall(Composition::CLIENT); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ @@ -1265,14 +1268,13 @@ TEST_F(OutputLayerWriteStateToHWCTest, roundedCornersPeekingThroughAllowsDeviceC expectPerFrameCommonCalls(); expectSetHdrMetadataAndBufferCalls(); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillRepeatedly(Return(true)); - expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); + expectSetCompositionTypeCall(Composition::DEVICE); - mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; + mLayerFEState.compositionType = Composition::DEVICE; mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ true); - EXPECT_EQ(Hwc2::IComposerClient::Composition::DEVICE, - mOutputLayer.getState().hwc->hwcCompositionType); + EXPECT_EQ(Composition::DEVICE, mOutputLayer.getState().hwc->hwcCompositionType); } /* @@ -1371,14 +1373,14 @@ TEST_F(OutputLayerTest, requiresClientCompositionReturnsTrueIfNoHWC2State) { TEST_F(OutputLayerTest, requiresClientCompositionReturnsTrueIfSetToClientComposition) { mOutputLayer.editState().hwc = impl::OutputLayerCompositionState::Hwc{nullptr}; - mOutputLayer.editState().hwc->hwcCompositionType = Hwc2::IComposerClient::Composition::CLIENT; + mOutputLayer.editState().hwc->hwcCompositionType = Composition::CLIENT; EXPECT_TRUE(mOutputLayer.requiresClientComposition()); } TEST_F(OutputLayerTest, requiresClientCompositionReturnsFalseIfSetToDeviceComposition) { mOutputLayer.editState().hwc = impl::OutputLayerCompositionState::Hwc{nullptr}; - mOutputLayer.editState().hwc->hwcCompositionType = Hwc2::IComposerClient::Composition::DEVICE; + mOutputLayer.editState().hwc->hwcCompositionType = Composition::DEVICE; EXPECT_FALSE(mOutputLayer.requiresClientComposition()); } @@ -1395,14 +1397,14 @@ TEST_F(OutputLayerTest, isHardwareCursorReturnsFalseIfNoHWC2State) { TEST_F(OutputLayerTest, isHardwareCursorReturnsTrueIfSetToCursorComposition) { mOutputLayer.editState().hwc = impl::OutputLayerCompositionState::Hwc{nullptr}; - mOutputLayer.editState().hwc->hwcCompositionType = Hwc2::IComposerClient::Composition::CURSOR; + mOutputLayer.editState().hwc->hwcCompositionType = Composition::CURSOR; EXPECT_TRUE(mOutputLayer.isHardwareCursor()); } TEST_F(OutputLayerTest, isHardwareCursorReturnsFalseIfSetToDeviceComposition) { mOutputLayer.editState().hwc = impl::OutputLayerCompositionState::Hwc{nullptr}; - mOutputLayer.editState().hwc->hwcCompositionType = Hwc2::IComposerClient::Composition::DEVICE; + mOutputLayer.editState().hwc->hwcCompositionType = Composition::DEVICE; EXPECT_FALSE(mOutputLayer.isHardwareCursor()); } @@ -1413,13 +1415,12 @@ TEST_F(OutputLayerTest, isHardwareCursorReturnsFalseIfSetToDeviceComposition) { TEST_F(OutputLayerTest, applyDeviceCompositionTypeChangeSetsNewType) { mOutputLayer.editState().hwc = impl::OutputLayerCompositionState::Hwc{nullptr}; - mOutputLayer.editState().hwc->hwcCompositionType = Hwc2::IComposerClient::Composition::DEVICE; + mOutputLayer.editState().hwc->hwcCompositionType = Composition::DEVICE; - mOutputLayer.applyDeviceCompositionTypeChange(Hwc2::IComposerClient::Composition::CLIENT); + mOutputLayer.applyDeviceCompositionTypeChange(Composition::CLIENT); ASSERT_TRUE(mOutputLayer.getState().hwc); - EXPECT_EQ(Hwc2::IComposerClient::Composition::CLIENT, - mOutputLayer.getState().hwc->hwcCompositionType); + EXPECT_EQ(Composition::CLIENT, mOutputLayer.getState().hwc->hwcCompositionType); } /* diff --git a/services/surfaceflinger/CompositionEngine/tests/planner/LayerStateTest.cpp b/services/surfaceflinger/CompositionEngine/tests/planner/LayerStateTest.cpp index 9ad3ab4057..84b3fc5698 100644 --- a/services/surfaceflinger/CompositionEngine/tests/planner/LayerStateTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/planner/LayerStateTest.cpp @@ -27,6 +27,10 @@ #include "android/hardware_buffer.h" #include "compositionengine/LayerFECompositionState.h" +#include + +using aidl::android::hardware::graphics::composer3::Composition; + namespace android::compositionengine::impl::planner { namespace { @@ -277,33 +281,28 @@ TEST_F(LayerStateTest, compareDisplayFrame) { TEST_F(LayerStateTest, getCompositionType) { OutputLayerCompositionState outputLayerCompositionState; LayerFECompositionState layerFECompositionState; - layerFECompositionState.compositionType = - hardware::graphics::composer::hal::Composition::DEVICE; + layerFECompositionState.compositionType = Composition::DEVICE; setupMocksForLayer(mOutputLayer, mLayerFE, outputLayerCompositionState, layerFECompositionState); mLayerState = std::make_unique(&mOutputLayer); - EXPECT_EQ(hardware::graphics::composer::hal::Composition::DEVICE, - mLayerState->getCompositionType()); + EXPECT_EQ(Composition::DEVICE, mLayerState->getCompositionType()); } TEST_F(LayerStateTest, getCompositionType_forcedClient) { OutputLayerCompositionState outputLayerCompositionState; outputLayerCompositionState.forceClientComposition = true; LayerFECompositionState layerFECompositionState; - layerFECompositionState.compositionType = - hardware::graphics::composer::hal::Composition::DEVICE; + layerFECompositionState.compositionType = Composition::DEVICE; setupMocksForLayer(mOutputLayer, mLayerFE, outputLayerCompositionState, layerFECompositionState); mLayerState = std::make_unique(&mOutputLayer); - EXPECT_EQ(hardware::graphics::composer::hal::Composition::CLIENT, - mLayerState->getCompositionType()); + EXPECT_EQ(Composition::CLIENT, mLayerState->getCompositionType()); } TEST_F(LayerStateTest, updateCompositionType) { OutputLayerCompositionState outputLayerCompositionState; LayerFECompositionState layerFECompositionState; - layerFECompositionState.compositionType = - hardware::graphics::composer::hal::Composition::DEVICE; + layerFECompositionState.compositionType = Composition::DEVICE; setupMocksForLayer(mOutputLayer, mLayerFE, outputLayerCompositionState, layerFECompositionState); mLayerState = std::make_unique(&mOutputLayer); @@ -311,29 +310,25 @@ TEST_F(LayerStateTest, updateCompositionType) { mock::OutputLayer newOutputLayer; mock::LayerFE newLayerFE; LayerFECompositionState layerFECompositionStateTwo; - layerFECompositionStateTwo.compositionType = - hardware::graphics::composer::hal::Composition::SOLID_COLOR; + layerFECompositionStateTwo.compositionType = Composition::SOLID_COLOR; setupMocksForLayer(newOutputLayer, newLayerFE, outputLayerCompositionState, layerFECompositionStateTwo); Flags updates = mLayerState->update(&newOutputLayer); - EXPECT_EQ(hardware::graphics::composer::hal::Composition::SOLID_COLOR, - mLayerState->getCompositionType()); + EXPECT_EQ(Composition::SOLID_COLOR, mLayerState->getCompositionType()); EXPECT_EQ(Flags(LayerStateField::CompositionType), updates); } TEST_F(LayerStateTest, compareCompositionType) { OutputLayerCompositionState outputLayerCompositionState; LayerFECompositionState layerFECompositionState; - layerFECompositionState.compositionType = - hardware::graphics::composer::hal::Composition::DEVICE; + layerFECompositionState.compositionType = Composition::DEVICE; setupMocksForLayer(mOutputLayer, mLayerFE, outputLayerCompositionState, layerFECompositionState); mLayerState = std::make_unique(&mOutputLayer); mock::OutputLayer newOutputLayer; mock::LayerFE newLayerFE; LayerFECompositionState layerFECompositionStateTwo; - layerFECompositionStateTwo.compositionType = - hardware::graphics::composer::hal::Composition::SOLID_COLOR; + layerFECompositionStateTwo.compositionType = Composition::SOLID_COLOR; setupMocksForLayer(newOutputLayer, newLayerFE, outputLayerCompositionState, layerFECompositionStateTwo); auto otherLayerState = std::make_unique(&newOutputLayer); diff --git a/services/surfaceflinger/CompositionEngine/tests/planner/PredictorTest.cpp b/services/surfaceflinger/CompositionEngine/tests/planner/PredictorTest.cpp index 1492707ad2..6038268a8c 100644 --- a/services/surfaceflinger/CompositionEngine/tests/planner/PredictorTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/planner/PredictorTest.cpp @@ -24,6 +24,10 @@ #include #include +#include + +using aidl::android::hardware::graphics::composer3::Composition; + namespace android::compositionengine::impl::planner { namespace { @@ -103,7 +107,7 @@ TEST_F(LayerStackTest, getApproximateMatch_doesNotMatchDifferentCompositionTypes mock::LayerFE layerFEOne; OutputLayerCompositionState outputLayerCompositionStateOne; LayerFECompositionState layerFECompositionStateOne; - layerFECompositionStateOne.compositionType = hal::Composition::DEVICE; + layerFECompositionStateOne.compositionType = Composition::DEVICE; setupMocksForLayer(outputLayerOne, layerFEOne, outputLayerCompositionStateOne, layerFECompositionStateOne); LayerState layerStateOne(&outputLayerOne); @@ -112,7 +116,7 @@ TEST_F(LayerStackTest, getApproximateMatch_doesNotMatchDifferentCompositionTypes mock::LayerFE layerFETwo; OutputLayerCompositionState outputLayerCompositionStateTwo; LayerFECompositionState layerFECompositionStateTwo; - layerFECompositionStateTwo.compositionType = hal::Composition::SOLID_COLOR; + layerFECompositionStateTwo.compositionType = Composition::SOLID_COLOR; setupMocksForLayer(outputLayerTwo, layerFETwo, outputLayerCompositionStateTwo, layerFECompositionStateTwo); LayerState layerStateTwo(&outputLayerTwo); @@ -370,7 +374,7 @@ TEST_F(LayerStackTest, reorderingChangesNonBufferHash) { TEST_F(PredictionTest, constructPrediction) { Plan plan; - plan.addLayerType(hal::Composition::DEVICE); + plan.addLayerType(Composition::DEVICE); Prediction prediction({}, plan); @@ -442,13 +446,13 @@ TEST_F(PredictorTest, getPredictedPlan_recordCandidateAndRetrieveExactMatch) { mock::LayerFE layerFEOne; OutputLayerCompositionState outputLayerCompositionStateOne; LayerFECompositionState layerFECompositionStateOne; - layerFECompositionStateOne.compositionType = hal::Composition::DEVICE; + layerFECompositionStateOne.compositionType = Composition::DEVICE; setupMocksForLayer(outputLayerOne, layerFEOne, outputLayerCompositionStateOne, layerFECompositionStateOne); LayerState layerStateOne(&outputLayerOne); Plan plan; - plan.addLayerType(hal::Composition::DEVICE); + plan.addLayerType(Composition::DEVICE); Predictor predictor; @@ -484,7 +488,7 @@ TEST_F(PredictorTest, getPredictedPlan_recordCandidateAndRetrieveApproximateMatc LayerState layerStateTwo(&outputLayerTwo); Plan plan; - plan.addLayerType(hal::Composition::DEVICE); + plan.addLayerType(Composition::DEVICE); Predictor predictor; @@ -521,7 +525,7 @@ TEST_F(PredictorTest, recordMissedPlan_skipsApproximateMatch) { LayerState layerStateTwo(&outputLayerTwo); Plan plan; - plan.addLayerType(hal::Composition::DEVICE); + plan.addLayerType(Composition::DEVICE); Predictor predictor; @@ -535,7 +539,7 @@ TEST_F(PredictorTest, recordMissedPlan_skipsApproximateMatch) { EXPECT_EQ(Prediction::Type::Approximate, predictedPlan->type); Plan planTwo; - planTwo.addLayerType(hal::Composition::CLIENT); + planTwo.addLayerType(Composition::CLIENT); predictor.recordResult(predictedPlan, hashTwo, {&layerStateTwo}, false, planTwo); // Now trying to retrieve the predicted plan again returns a nullopt instead. // TODO(b/158790260): Even though this is enforced in this test, we might want to reassess this. diff --git a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp index 29e5a7464d..87635797be 100644 --- a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp +++ b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp @@ -375,13 +375,11 @@ Error AidlComposer::getActiveConfig(Display display, Config* outConfig) { Error AidlComposer::getChangedCompositionTypes( Display display, std::vector* outLayers, - std::vector* outTypes) { + std::vector* outTypes) { std::vector layers; - std::vector types; - mReader.takeChangedCompositionTypes(translate(display), &layers, &types); + mReader.takeChangedCompositionTypes(translate(display), &layers, outTypes); *outLayers = translate(layers); - *outTypes = translate(types); return Error::NONE; } @@ -649,10 +647,10 @@ Error AidlComposer::setLayerColor(Display display, Layer layer, return Error::NONE; } -Error AidlComposer::setLayerCompositionType(Display display, Layer layer, - IComposerClient::Composition type) { - mWriter.setLayerCompositionType(translate(display), translate(layer), - translate(type)); +Error AidlComposer::setLayerCompositionType( + Display display, Layer layer, + aidl::android::hardware::graphics::composer3::Composition type) { + mWriter.setLayerCompositionType(translate(display), translate(layer), type); return Error::NONE; } diff --git a/services/surfaceflinger/DisplayHardware/AidlComposerHal.h b/services/surfaceflinger/DisplayHardware/AidlComposerHal.h index 8cae25f742..d82d815cda 100644 --- a/services/surfaceflinger/DisplayHardware/AidlComposerHal.h +++ b/services/surfaceflinger/DisplayHardware/AidlComposerHal.h @@ -36,6 +36,8 @@ #include #include +#include + // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic pop // ignored "-Wconversion -Wextra" @@ -78,8 +80,10 @@ public: Error destroyLayer(Display display, Layer layer) override; Error getActiveConfig(Display display, Config* outConfig) override; - Error getChangedCompositionTypes(Display display, std::vector* outLayers, - std::vector* outTypes) override; + Error getChangedCompositionTypes( + Display display, std::vector* outLayers, + std::vector* outTypes) + override; Error getColorModes(Display display, std::vector* outModes) override; Error getDisplayAttribute(Display display, Config config, IComposerClient::Attribute attribute, int32_t* outValue) override; @@ -132,8 +136,9 @@ public: const std::vector& damage) override; Error setLayerBlendMode(Display display, Layer layer, IComposerClient::BlendMode mode) override; Error setLayerColor(Display display, Layer layer, const IComposerClient::Color& color) override; - Error setLayerCompositionType(Display display, Layer layer, - IComposerClient::Composition type) override; + Error setLayerCompositionType( + Display display, Layer layer, + aidl::android::hardware::graphics::composer3::Composition type) override; Error setLayerDataspace(Display display, Layer layer, Dataspace dataspace) override; Error setLayerDisplayFrame(Display display, Layer layer, const IComposerClient::Rect& frame) override; diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.h b/services/surfaceflinger/DisplayHardware/ComposerHal.h index 3cc5e5e360..b4ba8abac7 100644 --- a/services/surfaceflinger/DisplayHardware/ComposerHal.h +++ b/services/surfaceflinger/DisplayHardware/ComposerHal.h @@ -31,6 +31,8 @@ #include #include +#include + // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic pop // ignored "-Wconversion -Wextra" @@ -98,7 +100,7 @@ public: virtual Error getActiveConfig(Display display, Config* outConfig) = 0; virtual Error getChangedCompositionTypes( Display display, std::vector* outLayers, - std::vector* outTypes) = 0; + std::vector* outTypes) = 0; virtual Error getColorModes(Display display, std::vector* outModes) = 0; virtual Error getDisplayAttribute(Display display, Config config, IComposerClient::Attribute attribute, int32_t* outValue) = 0; @@ -155,8 +157,9 @@ public: IComposerClient::BlendMode mode) = 0; virtual Error setLayerColor(Display display, Layer layer, const IComposerClient::Color& color) = 0; - virtual Error setLayerCompositionType(Display display, Layer layer, - IComposerClient::Composition type) = 0; + virtual Error setLayerCompositionType( + Display display, Layer layer, + aidl::android::hardware::graphics::composer3::Composition type) = 0; virtual Error setLayerDataspace(Display display, Layer layer, Dataspace dataspace) = 0; virtual Error setLayerDisplayFrame(Display display, Layer layer, const IComposerClient::Rect& frame) = 0; diff --git a/services/surfaceflinger/DisplayHardware/HWC2.cpp b/services/surfaceflinger/DisplayHardware/HWC2.cpp index 596666c3f7..82f463eafa 100644 --- a/services/surfaceflinger/DisplayHardware/HWC2.cpp +++ b/services/surfaceflinger/DisplayHardware/HWC2.cpp @@ -39,6 +39,8 @@ #include "ComposerHal.h" +using aidl::android::hardware::graphics::composer3::Composition; + namespace android { using android::Fence; @@ -147,7 +149,7 @@ bool Display::isVsyncPeriodSwitchSupported() const { Error Display::getChangedCompositionTypes(std::unordered_map* outTypes) { std::vector layerIds; - std::vector types; + std::vector types; auto intError = mComposer.getChangedCompositionTypes( mId, &layerIds, &types); uint32_t numElements = layerIds.size(); diff --git a/services/surfaceflinger/DisplayHardware/HWC2.h b/services/surfaceflinger/DisplayHardware/HWC2.h index 5e0ba06a0e..1425c61b00 100644 --- a/services/surfaceflinger/DisplayHardware/HWC2.h +++ b/services/surfaceflinger/DisplayHardware/HWC2.h @@ -36,6 +36,8 @@ #include "Hal.h" +#include + namespace android { class Fence; @@ -88,7 +90,8 @@ public: [[clang::warn_unused_result]] virtual base::expected, hal::Error> createLayer() = 0; [[clang::warn_unused_result]] virtual hal::Error getChangedCompositionTypes( - std::unordered_map* outTypes) = 0; + std::unordered_map* + outTypes) = 0; [[clang::warn_unused_result]] virtual hal::Error getColorModes( std::vector* outModes) const = 0; // Returns a bitmask which contains HdrMetadata::Type::*. @@ -163,7 +166,9 @@ public: hal::Error acceptChanges() override; base::expected, hal::Error> createLayer() override; hal::Error getChangedCompositionTypes( - std::unordered_map* outTypes) override; + std::unordered_map* outTypes) + override; hal::Error getColorModes(std::vector* outModes) const override; // Returns a bitmask which contains HdrMetadata::Type::*. int32_t getSupportedPerFrameMetadata() const override; @@ -266,7 +271,8 @@ public: [[clang::warn_unused_result]] virtual hal::Error setBlendMode(hal::BlendMode mode) = 0; [[clang::warn_unused_result]] virtual hal::Error setColor(hal::Color color) = 0; - [[clang::warn_unused_result]] virtual hal::Error setCompositionType(hal::Composition type) = 0; + [[clang::warn_unused_result]] virtual hal::Error setCompositionType( + aidl::android::hardware::graphics::composer3::Composition type) = 0; [[clang::warn_unused_result]] virtual hal::Error setDataspace(hal::Dataspace dataspace) = 0; [[clang::warn_unused_result]] virtual hal::Error setPerFrameMetadata( const int32_t supportedPerFrameMetadata, const android::HdrMetadata& metadata) = 0; @@ -316,7 +322,8 @@ public: hal::Error setBlendMode(hal::BlendMode mode) override; hal::Error setColor(hal::Color color) override; - hal::Error setCompositionType(hal::Composition type) override; + hal::Error setCompositionType( + aidl::android::hardware::graphics::composer3::Composition type) override; hal::Error setDataspace(hal::Dataspace dataspace) override; hal::Error setPerFrameMetadata(const int32_t supportedPerFrameMetadata, const android::HdrMetadata& metadata) override; diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h index bd79977bc9..aa4abdff48 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.h +++ b/services/surfaceflinger/DisplayHardware/HWComposer.h @@ -43,6 +43,8 @@ #include "HWC2.h" #include "Hal.h" +#include + namespace android { namespace hal = hardware::graphics::composer::hal; @@ -70,7 +72,9 @@ struct KnownHWCGenericLayerMetadata { class HWComposer { public: struct DeviceRequestedChanges { - using ChangedTypes = std::unordered_map; + using ChangedTypes = + std::unordered_map; using ClientTargetProperty = hal::ClientTargetProperty; using DisplayRequests = hal::DisplayRequest; using LayerRequests = std::unordered_map; diff --git a/services/surfaceflinger/DisplayHardware/Hal.h b/services/surfaceflinger/DisplayHardware/Hal.h index 02d065881b..77e704fa03 100644 --- a/services/surfaceflinger/DisplayHardware/Hal.h +++ b/services/surfaceflinger/DisplayHardware/Hal.h @@ -20,6 +20,8 @@ #include #include +#include + #define ERROR_HAS_CHANGES 5 namespace android { @@ -49,7 +51,6 @@ using V2_4::VsyncPeriodNanos; using Attribute = IComposerClient::Attribute; using BlendMode = IComposerClient::BlendMode; using Color = IComposerClient::Color; -using Composition = IComposerClient::Composition; using Connection = IComposerCallback::Connection; using ContentType = IComposerClient::ContentType; using Capability = IComposer::Capability; @@ -95,19 +96,20 @@ inline std::string to_string(hardware::graphics::composer::hal::Attribute attrib } } -inline std::string to_string(hardware::graphics::composer::hal::Composition composition) { +inline std::string to_string( + aidl::android::hardware::graphics::composer3::Composition composition) { switch (composition) { - case hardware::graphics::composer::hal::Composition::INVALID: + case aidl::android::hardware::graphics::composer3::Composition::INVALID: return "Invalid"; - case hardware::graphics::composer::hal::Composition::CLIENT: + case aidl::android::hardware::graphics::composer3::Composition::CLIENT: return "Client"; - case hardware::graphics::composer::hal::Composition::DEVICE: + case aidl::android::hardware::graphics::composer3::Composition::DEVICE: return "Device"; - case hardware::graphics::composer::hal::Composition::SOLID_COLOR: + case aidl::android::hardware::graphics::composer3::Composition::SOLID_COLOR: return "SolidColor"; - case hardware::graphics::composer::hal::Composition::CURSOR: + case aidl::android::hardware::graphics::composer3::Composition::CURSOR: return "Cursor"; - case hardware::graphics::composer::hal::Composition::SIDEBAND: + case aidl::android::hardware::graphics::composer3::Composition::SIDEBAND: return "Sideband"; default: return "Unknown"; diff --git a/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp b/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp index 11d41c063e..18f24c1dcd 100644 --- a/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp +++ b/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp @@ -278,7 +278,7 @@ Error HidlComposer::getActiveConfig(Display display, Config* outConfig) { Error HidlComposer::getChangedCompositionTypes( Display display, std::vector* outLayers, - std::vector* outTypes) { + std::vector* outTypes) { mReader.takeChangedCompositionTypes(display, outLayers, outTypes); return Error::NONE; } @@ -618,11 +618,17 @@ Error HidlComposer::setLayerColor(Display display, Layer layer, return Error::NONE; } -Error HidlComposer::setLayerCompositionType(Display display, Layer layer, - IComposerClient::Composition type) { +static IComposerClient::Composition to_hidl_type( + aidl::android::hardware::graphics::composer3::Composition type) { + return static_cast(type); +} + +Error HidlComposer::setLayerCompositionType( + Display display, Layer layer, + aidl::android::hardware::graphics::composer3::Composition type) { mWriter.selectDisplay(display); mWriter.selectLayer(layer); - mWriter.setLayerCompositionType(type); + mWriter.setLayerCompositionType(to_hidl_type(type)); return Error::NONE; } @@ -1266,7 +1272,8 @@ bool CommandReader::parseSetChangedCompositionTypes(uint16_t length) { mCurrentReturnData->compositionTypes.reserve(count); while (count > 0) { auto layer = read64(); - auto type = static_cast(readSigned()); + auto type = static_cast( + readSigned()); mCurrentReturnData->changedLayers.push_back(layer); mCurrentReturnData->compositionTypes.push_back(type); @@ -1394,7 +1401,7 @@ bool CommandReader::hasChanges(Display display, uint32_t* outNumChangedCompositi void CommandReader::takeChangedCompositionTypes( Display display, std::vector* outLayers, - std::vector* outTypes) { + std::vector* outTypes) { auto found = mReturnData.find(display); if (found == mReturnData.end()) { outLayers->clear(); diff --git a/services/surfaceflinger/DisplayHardware/HidlComposerHal.h b/services/surfaceflinger/DisplayHardware/HidlComposerHal.h index 18c0635dd2..5b2219e45b 100644 --- a/services/surfaceflinger/DisplayHardware/HidlComposerHal.h +++ b/services/surfaceflinger/DisplayHardware/HidlComposerHal.h @@ -37,6 +37,8 @@ #include #include +#include + // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic pop // ignored "-Wconversion -Wextra" @@ -92,8 +94,9 @@ public: uint32_t* outNumLayerRequestMasks) const; // Get and clear saved changed composition types. - void takeChangedCompositionTypes(Display display, std::vector* outLayers, - std::vector* outTypes); + void takeChangedCompositionTypes( + Display display, std::vector* outLayers, + std::vector* outTypes); // Get and clear saved display requests. void takeDisplayRequests(Display display, uint32_t* outDisplayRequestMask, @@ -130,7 +133,7 @@ private: uint32_t displayRequests = 0; std::vector changedLayers; - std::vector compositionTypes; + std::vector compositionTypes; std::vector requestedLayers; std::vector requestMasks; @@ -188,8 +191,10 @@ public: Error destroyLayer(Display display, Layer layer) override; Error getActiveConfig(Display display, Config* outConfig) override; - Error getChangedCompositionTypes(Display display, std::vector* outLayers, - std::vector* outTypes) override; + Error getChangedCompositionTypes( + Display display, std::vector* outLayers, + std::vector* outTypes) + override; Error getColorModes(Display display, std::vector* outModes) override; Error getDisplayAttribute(Display display, Config config, IComposerClient::Attribute attribute, int32_t* outValue) override; @@ -242,8 +247,9 @@ public: const std::vector& damage) override; Error setLayerBlendMode(Display display, Layer layer, IComposerClient::BlendMode mode) override; Error setLayerColor(Display display, Layer layer, const IComposerClient::Color& color) override; - Error setLayerCompositionType(Display display, Layer layer, - IComposerClient::Composition type) override; + Error setLayerCompositionType( + Display display, Layer layer, + aidl::android::hardware::graphics::composer3::Composition type) override; Error setLayerDataspace(Display display, Layer layer, Dataspace dataspace) override; Error setLayerDisplayFrame(Display display, Layer layer, const IComposerClient::Rect& frame) override; diff --git a/services/surfaceflinger/EffectLayer.cpp b/services/surfaceflinger/EffectLayer.cpp index 845176c112..cc85352dc7 100644 --- a/services/surfaceflinger/EffectLayer.cpp +++ b/services/surfaceflinger/EffectLayer.cpp @@ -109,7 +109,8 @@ void EffectLayer::preparePerFrameCompositionState() { auto* compositionState = editCompositionState(); compositionState->color = getColor(); - compositionState->compositionType = Hwc2::IComposerClient::Composition::SOLID_COLOR; + compositionState->compositionType = + aidl::android::hardware::graphics::composer3::Composition::SOLID_COLOR; } sp EffectLayer::getCompositionEngineLayerFE() const { diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index b39515955c..6e9138c119 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -650,15 +650,16 @@ std::vector Layer::prepareClientCompo return {*layerSettings}; } -Hwc2::IComposerClient::Composition Layer::getCompositionType(const DisplayDevice& display) const { +aidl::android::hardware::graphics::composer3::Composition Layer::getCompositionType( + const DisplayDevice& display) const { const auto outputLayer = findOutputLayerForDisplay(&display); if (outputLayer == nullptr) { - return Hwc2::IComposerClient::Composition::INVALID; + return aidl::android::hardware::graphics::composer3::Composition::INVALID; } if (outputLayer->getState().hwc) { return (*outputLayer->getState().hwc).hwcCompositionType; } else { - return Hwc2::IComposerClient::Composition::CLIENT; + return aidl::android::hardware::graphics::composer3::Composition::CLIENT; } } @@ -2004,7 +2005,7 @@ LayerProto* Layer::writeToProto(LayersProto& layersProto, uint32_t traceFlags, if (traceFlags & LayerTracing::TRACE_COMPOSITION) { // Only populate for the primary display. if (display) { - const Hwc2::IComposerClient::Composition compositionType = getCompositionType(*display); + const auto compositionType = getCompositionType(*display); layerProto->set_hwc_composition_type(static_cast(compositionType)); } } diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index 3f4d48be63..31cdf0b3e4 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -1037,7 +1037,8 @@ private: // Returns true if the layer can draw shadows on its border. virtual bool canDrawShadows() const { return true; } - Hwc2::IComposerClient::Composition getCompositionType(const DisplayDevice&) const; + aidl::android::hardware::graphics::composer3::Composition getCompositionType( + const DisplayDevice&) const; /** * Returns an unsorted vector of all layers that are part of this tree. diff --git a/services/surfaceflinger/tests/unittests/CompositionTest.cpp b/services/surfaceflinger/tests/unittests/CompositionTest.cpp index f1e6e48049..554e454183 100644 --- a/services/surfaceflinger/tests/unittests/CompositionTest.cpp +++ b/services/surfaceflinger/tests/unittests/CompositionTest.cpp @@ -1029,9 +1029,10 @@ struct NoCompositionTypeVariant { } }; -template +template struct KeepCompositionTypeVariant { - static constexpr hal::Composition TYPE = CompositionType; + static constexpr aidl::android::hardware::graphics::composer3::Composition TYPE = + CompositionType; static void setupHwcSetCallExpectations(CompositionTest* test) { if (!test->mDisplayOff) { @@ -1046,10 +1047,11 @@ struct KeepCompositionTypeVariant { } }; -template +template struct ChangeCompositionTypeVariant { - static constexpr hal::Composition TYPE = FinalCompositionType; + static constexpr aidl::android::hardware::graphics::composer3::Composition TYPE = + FinalCompositionType; static void setupHwcSetCallExpectations(CompositionTest* test) { if (!test->mDisplayOff) { @@ -1063,8 +1065,9 @@ struct ChangeCompositionTypeVariant { EXPECT_CALL(*test->mComposer, getChangedCompositionTypes(HWC_DISPLAY, _, _)) .WillOnce(DoAll(SetArgPointee<1>(std::vector{ static_cast(HWC_LAYER)}), - SetArgPointee<2>(std::vector{ - FinalCompositionType}), + SetArgPointee<2>( + std::vector{FinalCompositionType}), Return(Error::NONE))); } }; @@ -1258,25 +1261,28 @@ TEST_F(CompositionTest, noLayersDoesMinimalWorkToCaptureScreen) { */ TEST_F(CompositionTest, HWCComposedNormalBufferLayerWithDirtyGeometry) { - displayRefreshCompositionDirtyGeometry< - CompositionCase, - KeepCompositionTypeVariant, - HwcCompositionResultVariant>>(); + displayRefreshCompositionDirtyGeometry, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::DEVICE>, + HwcCompositionResultVariant>>(); } TEST_F(CompositionTest, HWCComposedNormalBufferLayerWithDirtyFrame) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - KeepCompositionTypeVariant, - HwcCompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::DEVICE>, + HwcCompositionResultVariant>>(); } TEST_F(CompositionTest, REComposedNormalBufferLayer) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - ChangeCompositionTypeVariant, - RECompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + ChangeCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::DEVICE, + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, + RECompositionResultVariant>>(); } TEST_F(CompositionTest, captureScreenNormalBufferLayer) { @@ -1290,25 +1296,28 @@ TEST_F(CompositionTest, captureScreenNormalBufferLayer) { */ TEST_F(CompositionTest, HWCComposedEffectLayerWithDirtyGeometry) { - displayRefreshCompositionDirtyGeometry< - CompositionCase, - KeepCompositionTypeVariant, - HwcCompositionResultVariant>>(); + displayRefreshCompositionDirtyGeometry, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::SOLID_COLOR>, + HwcCompositionResultVariant>>(); } TEST_F(CompositionTest, HWCComposedEffectLayerWithDirtyFrame) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - KeepCompositionTypeVariant, - HwcCompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::SOLID_COLOR>, + HwcCompositionResultVariant>>(); } TEST_F(CompositionTest, REComposedEffectLayer) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - ChangeCompositionTypeVariant, - RECompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + ChangeCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::SOLID_COLOR, + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, + RECompositionResultVariant>>(); } TEST_F(CompositionTest, captureScreenEffectLayer) { @@ -1322,25 +1331,28 @@ TEST_F(CompositionTest, captureScreenEffectLayer) { */ TEST_F(CompositionTest, HWCComposedSidebandBufferLayerWithDirtyGeometry) { - displayRefreshCompositionDirtyGeometry< - CompositionCase, - KeepCompositionTypeVariant, - HwcCompositionResultVariant>>(); + displayRefreshCompositionDirtyGeometry, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::SIDEBAND>, + HwcCompositionResultVariant>>(); } TEST_F(CompositionTest, HWCComposedSidebandBufferLayerWithDirtyFrame) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - KeepCompositionTypeVariant, - HwcCompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::SIDEBAND>, + HwcCompositionResultVariant>>(); } TEST_F(CompositionTest, REComposedSidebandBufferLayer) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - ChangeCompositionTypeVariant, - RECompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + ChangeCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::SIDEBAND, + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, + RECompositionResultVariant>>(); } TEST_F(CompositionTest, captureScreenSidebandBufferLayer) { @@ -1354,25 +1366,28 @@ TEST_F(CompositionTest, captureScreenSidebandBufferLayer) { */ TEST_F(CompositionTest, HWCComposedSecureBufferLayerWithDirtyGeometry) { - displayRefreshCompositionDirtyGeometry< - CompositionCase, - KeepCompositionTypeVariant, - HwcCompositionResultVariant>>(); + displayRefreshCompositionDirtyGeometry, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::DEVICE>, + HwcCompositionResultVariant>>(); } TEST_F(CompositionTest, HWCComposedSecureBufferLayerWithDirtyFrame) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - KeepCompositionTypeVariant, - HwcCompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::DEVICE>, + HwcCompositionResultVariant>>(); } TEST_F(CompositionTest, REComposedSecureBufferLayer) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - ChangeCompositionTypeVariant, - RECompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + ChangeCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::DEVICE, + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, + RECompositionResultVariant>>(); } TEST_F(CompositionTest, captureScreenSecureBufferLayerOnSecureDisplay) { @@ -1386,17 +1401,19 @@ TEST_F(CompositionTest, captureScreenSecureBufferLayerOnSecureDisplay) { */ TEST_F(CompositionTest, HWCComposedSecureBufferLayerOnInsecureDisplayWithDirtyGeometry) { - displayRefreshCompositionDirtyGeometry< - CompositionCase, - KeepCompositionTypeVariant, - ForcedClientCompositionResultVariant>>(); + displayRefreshCompositionDirtyGeometry, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, + ForcedClientCompositionResultVariant>>(); } TEST_F(CompositionTest, HWCComposedSecureBufferLayerOnInsecureDisplayWithDirtyFrame) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - KeepCompositionTypeVariant, - ForcedClientCompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, + ForcedClientCompositionResultVariant>>(); } TEST_F(CompositionTest, captureScreenSecureBufferLayerOnInsecureDisplay) { @@ -1411,22 +1428,24 @@ TEST_F(CompositionTest, captureScreenSecureBufferLayerOnInsecureDisplay) { TEST_F(CompositionTest, HWCComposedBufferLayerWithSecureParentLayerOnInsecureDisplayWithDirtyGeometry) { - displayRefreshCompositionDirtyGeometry< - CompositionCase, - ContainerLayerVariant>, - KeepCompositionTypeVariant, - ForcedClientCompositionResultVariant>>(); + displayRefreshCompositionDirtyGeometry, + ContainerLayerVariant>, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, + ForcedClientCompositionResultVariant>>(); } TEST_F(CompositionTest, HWCComposedBufferLayerWithSecureParentLayerOnInsecureDisplayWithDirtyFrame) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - ContainerLayerVariant>, - KeepCompositionTypeVariant, - ForcedClientCompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + ContainerLayerVariant>, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, + ForcedClientCompositionResultVariant>>(); } TEST_F(CompositionTest, captureScreenBufferLayerWithSecureParentLayerOnInsecureDisplay) { @@ -1442,25 +1461,28 @@ TEST_F(CompositionTest, captureScreenBufferLayerWithSecureParentLayerOnInsecureD */ TEST_F(CompositionTest, HWCComposedCursorLayerWithDirtyGeometry) { - displayRefreshCompositionDirtyGeometry< - CompositionCase, - KeepCompositionTypeVariant, - HwcCompositionResultVariant>>(); + displayRefreshCompositionDirtyGeometry, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::CURSOR>, + HwcCompositionResultVariant>>(); } TEST_F(CompositionTest, HWCComposedCursorLayerWithDirtyFrame) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - KeepCompositionTypeVariant, - HwcCompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::CURSOR>, + HwcCompositionResultVariant>>(); } TEST_F(CompositionTest, REComposedCursorLayer) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - ChangeCompositionTypeVariant, - RECompositionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + ChangeCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::CURSOR, + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, + RECompositionResultVariant>>(); } TEST_F(CompositionTest, captureScreenCursorLayer) { @@ -1477,7 +1499,8 @@ TEST_F(CompositionTest, displayOffHWCComposedNormalBufferLayerWithDirtyGeometry) mDisplayOff = true; displayRefreshCompositionDirtyGeometry, - KeepCompositionTypeVariant, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::DEVICE>, HwcCompositionResultVariant>>(); } @@ -1485,7 +1508,8 @@ TEST_F(CompositionTest, displayOffHWCComposedNormalBufferLayerWithDirtyFrame) { mDisplayOff = true; displayRefreshCompositionDirtyFrame, - KeepCompositionTypeVariant, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::DEVICE>, HwcCompositionResultVariant>>(); } @@ -1493,8 +1517,9 @@ TEST_F(CompositionTest, displayOffREComposedNormalBufferLayer) { mDisplayOff = true; displayRefreshCompositionDirtyFrame, - ChangeCompositionTypeVariant, + ChangeCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::DEVICE, + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, RECompositionResultVariant>>(); } @@ -1509,17 +1534,19 @@ TEST_F(CompositionTest, captureScreenNormalBufferLayerOnPoweredOffDisplay) { */ TEST_F(CompositionTest, DebugOptionForcingClientCompositionOfBufferLayerWithDirtyGeometry) { - displayRefreshCompositionDirtyGeometry< - CompositionCase, - KeepCompositionTypeVariant, - ForcedClientCompositionViaDebugOptionResultVariant>>(); + displayRefreshCompositionDirtyGeometry, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, + ForcedClientCompositionViaDebugOptionResultVariant>>(); } TEST_F(CompositionTest, DebugOptionForcingClientCompositionOfBufferLayerWithDirtyFrame) { - displayRefreshCompositionDirtyFrame< - CompositionCase, - KeepCompositionTypeVariant, - ForcedClientCompositionViaDebugOptionResultVariant>>(); + displayRefreshCompositionDirtyFrame, + KeepCompositionTypeVariant< + aidl::android::hardware::graphics::composer3::Composition::CLIENT>, + ForcedClientCompositionViaDebugOptionResultVariant>>(); } } // namespace diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h index 100a78d854..0067997398 100644 --- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h +++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h @@ -270,7 +270,8 @@ public: layer->editCompositionState()->sidebandStream = sidebandStream; } - void setLayerCompositionType(const sp& layer, hal::Composition type) { + void setLayerCompositionType(const sp& layer, + aidl::android::hardware::graphics::composer3::Composition type) { auto outputLayer = findOutputLayerForDisplay(layer, mFlinger->getDefaultDisplayDevice()); LOG_ALWAYS_FATAL_IF(!outputLayer); auto& state = outputLayer->editState(); diff --git a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h index 1debd65ac4..c3250d52d3 100644 --- a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h +++ b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockComposer.h @@ -61,7 +61,8 @@ public: MOCK_METHOD2(destroyLayer, Error(Display, Layer)); MOCK_METHOD2(getActiveConfig, Error(Display, Config*)); MOCK_METHOD3(getChangedCompositionTypes, - Error(Display, std::vector*, std::vector*)); + Error(Display, std::vector*, + std::vector*)); MOCK_METHOD2(getColorModes, Error(Display, std::vector*)); MOCK_METHOD4(getDisplayAttribute, Error(Display, Config config, IComposerClient::Attribute, int32_t*)); @@ -95,7 +96,8 @@ public: Error(Display, Layer, const std::vector&)); MOCK_METHOD3(setLayerBlendMode, Error(Display, Layer, IComposerClient::BlendMode)); MOCK_METHOD3(setLayerColor, Error(Display, Layer, const IComposerClient::Color&)); - MOCK_METHOD3(setLayerCompositionType, Error(Display, Layer, IComposerClient::Composition)); + MOCK_METHOD3(setLayerCompositionType, + Error(Display, Layer, aidl::android::hardware::graphics::composer3::Composition)); MOCK_METHOD3(setLayerDataspace, Error(Display, Layer, Dataspace)); MOCK_METHOD3(setLayerPerFrameMetadata, Error(Display, Layer, const std::vector&)); diff --git a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h index 83a0996fe6..d4fefee167 100644 --- a/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h +++ b/services/surfaceflinger/tests/unittests/mock/DisplayHardware/MockHWC2.h @@ -38,7 +38,9 @@ public: MOCK_METHOD((base::expected, hal::Error>), createLayer, (), (override)); MOCK_METHOD(hal::Error, getChangedCompositionTypes, - ((std::unordered_map *)), (override)); + ((std::unordered_map *)), + (override)); MOCK_METHOD(hal::Error, getColorModes, (std::vector *), (const, override)); MOCK_METHOD(int32_t, getSupportedPerFrameMetadata, (), (const, override)); MOCK_METHOD(hal::Error, getRenderIntents, (hal::ColorMode, std::vector *), @@ -103,7 +105,8 @@ public: MOCK_METHOD(hal::Error, setSurfaceDamage, (const android::Region &), (override)); MOCK_METHOD(hal::Error, setBlendMode, (hal::BlendMode), (override)); MOCK_METHOD(hal::Error, setColor, (hal::Color), (override)); - MOCK_METHOD(hal::Error, setCompositionType, (hal::Composition), (override)); + MOCK_METHOD(hal::Error, setCompositionType, + (aidl::android::hardware::graphics::composer3::Composition), (override)); MOCK_METHOD(hal::Error, setDataspace, (android::ui::Dataspace), (override)); MOCK_METHOD(hal::Error, setPerFrameMetadata, (const int32_t, const android::HdrMetadata &), (override)); -- cgit v1.2.3-59-g8ed1b From a3c4d372532ddc8b6b965e5d2cd672c4bb3c3a9e Mon Sep 17 00:00:00 2001 From: chaviw Date: Tue, 5 Apr 2022 13:22:04 -0500 Subject: Don't create CE Layer when EffectLayer has nothing to draw. If the EffectLayer has nothing to draw, it's essentially a container layer. In that case, there's no need to create a CE Layer since nothing will draw on screen. This fixes the case where a VD is created for screenrecording. The first few frames can be black because there's an effect layer in the hierarchy with nothing to draw before the mirroring starts. When that happens, the recording shows black frames. There's no need to render the EffectLayer since it doesn't actually have content Fixes: 222749939 Test: Screenrecord no black frames at the start. Change-Id: Iec720810eaad923a4045b8f1b73b088ada86cfd1 --- services/surfaceflinger/EffectLayer.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'services/surfaceflinger/EffectLayer.cpp') diff --git a/services/surfaceflinger/EffectLayer.cpp b/services/surfaceflinger/EffectLayer.cpp index cc85352dc7..e8c590e3c4 100644 --- a/services/surfaceflinger/EffectLayer.cpp +++ b/services/surfaceflinger/EffectLayer.cpp @@ -114,7 +114,13 @@ void EffectLayer::preparePerFrameCompositionState() { } sp EffectLayer::getCompositionEngineLayerFE() const { - return asLayerFE(); + // There's no need to get a CE Layer if the EffectLayer isn't going to draw anything. In that + // case, it acts more like a ContainerLayer so returning a null CE Layer makes more sense + if (hasSomethingToDraw()) { + return asLayerFE(); + } else { + return nullptr; + } } compositionengine::LayerFECompositionState* EffectLayer::editCompositionState() { -- cgit v1.2.3-59-g8ed1b