summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Cairn Overturf <cairno@google.com> 2025-02-12 07:15:40 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-02-12 07:15:40 -0800
commitd3147f9544b52ce68e32957d85b27f309d3172ff (patch)
tree02a704db70a2a8a114eca30397299fcad08c97aa
parent7006a0e14e58e4f8fb7ba9efe71db50c6c9eaef3 (diff)
parentc7e3e0c1d284f76155020d09b1a9ac65ea18f1b3 (diff)
Merge "Don't force client composition when rounded corners are cached" into main
-rw-r--r--services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h2
-rw-r--r--services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp10
-rw-r--r--services/surfaceflinger/FrontEnd/LayerSnapshot.cpp4
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;