diff options
author | 2025-02-12 07:15:40 -0800 | |
---|---|---|
committer | 2025-02-12 07:15:40 -0800 | |
commit | d3147f9544b52ce68e32957d85b27f309d3172ff (patch) | |
tree | 02a704db70a2a8a114eca30397299fcad08c97aa | |
parent | 7006a0e14e58e4f8fb7ba9efe71db50c6c9eaef3 (diff) | |
parent | c7e3e0c1d284f76155020d09b1a9ac65ea18f1b3 (diff) |
Merge "Don't force client composition when rounded corners are cached" into main
3 files changed, 10 insertions, 6 deletions
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h index 0063eee0e1..a1434f21cc 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h @@ -104,7 +104,7 @@ private: void detectDisallowedCompositionTypeChange( aidl::android::hardware::graphics::composer3::Composition from, aidl::android::hardware::graphics::composer3::Composition to) const; - bool isClientCompositionForced(bool isPeekingThrough) const; + bool isClientCompositionForced(bool isPeekingThrough, bool isCached) const; void updateLuts(const LayerFECompositionState&, const std::optional<std::vector<std::optional<LutProperties>>>& properties); }; diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp index 9d67122f2e..d89b52d632 100644 --- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp @@ -865,7 +865,8 @@ void OutputLayer::writeCompositionTypeToHWC(HWC2::Layer* hwcLayer, bool isPeekingThrough, bool skipLayer) { auto& outputDependentState = editState(); - if (isClientCompositionForced(isPeekingThrough)) { + bool isCached = !skipLayer && outputDependentState.overrideInfo.buffer; + if (isClientCompositionForced(isPeekingThrough, isCached)) { // If we are forcing client composition, we need to tell the HWC requestedCompositionType = Composition::CLIENT; } @@ -955,9 +956,12 @@ void OutputLayer::detectDisallowedCompositionTypeChange(Composition from, Compos } } -bool OutputLayer::isClientCompositionForced(bool isPeekingThrough) const { +bool OutputLayer::isClientCompositionForced(bool isPeekingThrough, bool isCached) const { + // If this layer was flattened into a CachedSet then it is not necessary for + // the GPU to compose it. + bool requiresClientDrawnRoundedCorners = !isCached && getLayerFE().hasRoundedCorners(); return getState().forceClientComposition || - (!isPeekingThrough && getLayerFE().hasRoundedCorners()); + (!isPeekingThrough && requiresClientDrawnRoundedCorners); } void OutputLayer::applyDeviceCompositionTypeChange(Composition compositionType) { diff --git a/services/surfaceflinger/FrontEnd/LayerSnapshot.cpp b/services/surfaceflinger/FrontEnd/LayerSnapshot.cpp index 839bd79dac..1514340e50 100644 --- a/services/surfaceflinger/FrontEnd/LayerSnapshot.cpp +++ b/services/surfaceflinger/FrontEnd/LayerSnapshot.cpp @@ -544,7 +544,7 @@ char LayerSnapshot::classifyCompositionForDebug( case Composition::INVALID: return 'i'; case Composition::SOLID_COLOR: - return 'c'; + return 'e'; case Composition::CURSOR: return 'u'; case Composition::SIDEBAND: @@ -552,7 +552,7 @@ char LayerSnapshot::classifyCompositionForDebug( case Composition::DISPLAY_DECORATION: return 'a'; case Composition::REFRESH_RATE_INDICATOR: - return 'r'; + return 'f'; case Composition::CLIENT: case Composition::DEVICE: break; |