diff options
3 files changed, 11 insertions, 5 deletions
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h index 4c065ec112..48a54d6c66 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h @@ -115,6 +115,9 @@ struct OutputLayerCompositionState { // The buffer cache for this layer. This is used to lower the // cost of sending reused buffers to the HWC. HwcBufferCache hwcBufferCache; + + // Set to true when overridden info has been sent to HW composer + bool stateOverridden = false; }; // The HWC state is optional, and is only set up if there is any potential diff --git a/services/surfaceflinger/CompositionEngine/src/Output.cpp b/services/surfaceflinger/CompositionEngine/src/Output.cpp index aed3be93c3..e42be17319 100644 --- a/services/surfaceflinger/CompositionEngine/src/Output.cpp +++ b/services/surfaceflinger/CompositionEngine/src/Output.cpp @@ -722,10 +722,7 @@ void Output::writeCompositionState(const compositionengine::CompositionRefreshAr previousOverride = layer->getState().overrideInfo.buffer; } - // TODO(b/181172795): We now update geometry for all flattened layers. We should update it - // only when the geometry actually changes - const bool includeGeometry = refreshArgs.updatingGeometryThisFrame || - layer->getState().overrideInfo.buffer != nullptr || skipLayer; + const bool includeGeometry = refreshArgs.updatingGeometryThisFrame; layer->writeStateToHWC(includeGeometry, skipLayer); } } diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp index 3f36a8feea..f640f85bca 100644 --- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp @@ -333,7 +333,11 @@ void OutputLayer::writeStateToHWC(bool includeGeometry, bool skipLayer) { auto requestedCompositionType = outputIndependentState->compositionType; - if (includeGeometry) { + // TODO(b/181172795): We now update geometry for all flattened layers. We should update it + // only when the geometry actually changes + const bool isOverridden = state.overrideInfo.buffer != nullptr; + const bool prevOverridden = state.hwc->stateOverridden; + if (isOverridden || prevOverridden || skipLayer || includeGeometry) { writeOutputDependentGeometryStateToHWC(hwcLayer.get(), requestedCompositionType); writeOutputIndependentGeometryStateToHWC(hwcLayer.get(), *outputIndependentState, skipLayer); @@ -346,6 +350,8 @@ void OutputLayer::writeStateToHWC(bool includeGeometry, bool skipLayer) { // Always set the layer color after setting the composition type. writeSolidColorStateToHWC(hwcLayer.get(), *outputIndependentState); + + editState().hwc->stateOverridden = isOverridden; } void OutputLayer::writeOutputDependentGeometryStateToHWC( |