summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Huihong Luo <huisinro@google.com> 2021-04-08 11:07:41 -0700
committer Huihong Luo <huisinro@google.com> 2021-04-08 18:30:57 -0700
commit91ac3b55b4de094ba25ecb45e04c5006b037a140 (patch)
tree92fbb0d2cea02614589e8ae6b0fdb5b0a2e91106
parent5ea461caa65d5fd21ae1cf9f2125481b5b3189af (diff)
Avoid duplicate rendering of the same cached override buffer
Bug: 183454078 Test: turn on layer caching, perform manual test Change-Id: I85789afe68e9c0732436eb2f2f63afa26cc8f728
-rw-r--r--services/surfaceflinger/CompositionEngine/src/Output.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/services/surfaceflinger/CompositionEngine/src/Output.cpp b/services/surfaceflinger/CompositionEngine/src/Output.cpp
index aed3be93c3..af1edd1308 100644
--- a/services/surfaceflinger/CompositionEngine/src/Output.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/Output.cpp
@@ -1104,6 +1104,7 @@ std::vector<LayerFE::LayerSettings> Output::generateClientCompositionRequests(
Region stubRegion;
bool disableBlurs = false;
+ sp<GraphicBuffer> previousOverrideBuffer = nullptr;
for (auto* layer : getOutputLayersOrderedByZ()) {
const auto& layerState = layer->getState();
@@ -1153,8 +1154,14 @@ std::vector<LayerFE::LayerSettings> Output::generateClientCompositionRequests(
std::vector<LayerFE::LayerSettings> results;
if (layer->getState().overrideInfo.buffer != nullptr) {
- results = layer->getOverrideCompositionList();
- ALOGV("Replacing [%s] with override in RE", layer->getLayerFE().getDebugName());
+ if (layer->getState().overrideInfo.buffer != previousOverrideBuffer) {
+ results = layer->getOverrideCompositionList();
+ previousOverrideBuffer = layer->getState().overrideInfo.buffer;
+ ALOGV("Replacing [%s] with override in RE", layer->getLayerFE().getDebugName());
+ } else {
+ ALOGV("Skipping redundant override buffer for [%s] in RE",
+ layer->getLayerFE().getDebugName());
+ }
} else {
results = layerFE.prepareClientCompositionList(targetSettings);
if (realContentIsVisible && !results.empty()) {