summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
author Vishnu Nair <vishnun@google.com> 2022-12-22 20:06:32 +0000
committer Vishnu Nair <vishnun@google.com> 2022-12-22 22:36:04 +0000
commit8fc721bb338c6d13e8758c2139d073acab86e3e2 (patch)
tree5ed9d431326907c0ab5e57b82af187c5a8e45030 /libs
parent42afe5fa137aacc2fc5d9bdf12052dc455b769ca (diff)
SF: Introduce LayerSnapshot and LayerSnapshotBuilder
Create a builder that walks through the layer hierarchy to build an ordered list of LayerSnapshots that can be passed on to CompositionEngine. This builder does a minimum amount of work to update an existing set of snapshots based on hierarchy changes and RequestedLayerState changes. The builder also introduces a fast path to update snapshots when there are only buffer updates. Additionally, pull out LayerSnapshot class from LayerFE and move it to frontend package. Bug: 238781169 Test: presubmit Change-Id: I3fbd6d60968950df2ee97d975c72f9e0aa31b007
Diffstat (limited to 'libs')
-rw-r--r--libs/gui/include/gui/LayerState.h56
1 files changed, 38 insertions, 18 deletions
diff --git a/libs/gui/include/gui/LayerState.h b/libs/gui/include/gui/LayerState.h
index c5fdf82d4f..9414ba8f1c 100644
--- a/libs/gui/include/gui/LayerState.h
+++ b/libs/gui/include/gui/LayerState.h
@@ -210,26 +210,46 @@ struct layer_state_t {
uint64_t diff(const layer_state_t& other) const;
bool hasBufferChanges() const;
- // Changes to the tree structure.
- static constexpr uint64_t HIERARCHY_CHANGES = layer_state_t::eLayerChanged |
- layer_state_t::eRelativeLayerChanged | layer_state_t::eReparent |
- layer_state_t::eBackgroundColorChanged;
+ // Layer hierarchy updates.
+ static constexpr uint64_t HIERARCHY_CHANGES = layer_state_t::eBackgroundColorChanged |
+ layer_state_t::eLayerChanged | layer_state_t::eRelativeLayerChanged |
+ layer_state_t::eReparent;
+
+ // Geometry updates.
+ static constexpr uint64_t GEOMETRY_CHANGES = layer_state_t::eBufferCropChanged |
+ layer_state_t::eBufferTransformChanged | layer_state_t::eCropChanged |
+ layer_state_t::eDestinationFrameChanged | layer_state_t::eMatrixChanged |
+ layer_state_t::ePositionChanged | layer_state_t::eTransformToDisplayInverseChanged |
+ layer_state_t::eTransparentRegionChanged;
+
+ // Buffer and related updates.
+ static constexpr uint64_t BUFFER_CHANGES = layer_state_t::eApiChanged |
+ layer_state_t::eBufferChanged | layer_state_t::eBufferCropChanged |
+ layer_state_t::eBufferTransformChanged | layer_state_t::eDataspaceChanged |
+ layer_state_t::eSidebandStreamChanged | layer_state_t::eSurfaceDamageRegionChanged |
+ layer_state_t::eTransformToDisplayInverseChanged |
+ layer_state_t::eTransparentRegionChanged;
+
// Content updates.
- static constexpr uint64_t CONTENT_CHANGES = layer_state_t::eAlphaChanged |
- layer_state_t::eTransparentRegionChanged | layer_state_t::eShadowRadiusChanged |
- layer_state_t::eRenderBorderChanged | layer_state_t::eColorChanged |
- layer_state_t::eBufferChanged | layer_state_t::eDataspaceChanged |
- layer_state_t::eApiChanged | layer_state_t::eSidebandStreamChanged |
+ static constexpr uint64_t CONTENT_CHANGES = layer_state_t::BUFFER_CHANGES |
+ layer_state_t::eAlphaChanged | layer_state_t::eAutoRefreshChanged |
+ layer_state_t::eBackgroundBlurRadiusChanged | layer_state_t::eBackgroundColorChanged |
+ layer_state_t::eBlurRegionsChanged | layer_state_t::eColorChanged |
+ layer_state_t::eColorSpaceAgnosticChanged | layer_state_t::eColorTransformChanged |
+ layer_state_t::eCornerRadiusChanged | layer_state_t::eHdrMetadataChanged |
+ layer_state_t::eRenderBorderChanged | layer_state_t::eShadowRadiusChanged |
+ layer_state_t::eStretchChanged;
+
+ // Changes which invalidates the layer's visible region in CE.
+ static constexpr uint64_t CONTENT_DIRTY = layer_state_t::CONTENT_CHANGES |
+ layer_state_t::GEOMETRY_CHANGES | layer_state_t::HIERARCHY_CHANGES;
+
+ // Changes affecting child states.
+ static constexpr uint64_t AFFECTS_CHILDREN = layer_state_t::GEOMETRY_CHANGES |
+ layer_state_t::HIERARCHY_CHANGES | layer_state_t::eAlphaChanged |
layer_state_t::eColorTransformChanged | layer_state_t::eCornerRadiusChanged |
- layer_state_t::eBackgroundColorChanged | layer_state_t::eColorSpaceAgnosticChanged |
- layer_state_t::eBackgroundBlurRadiusChanged | layer_state_t::eBlurRegionsChanged |
- layer_state_t::eAutoRefreshChanged | layer_state_t::eStretchChanged;
- // Changes to content or children size.
- static constexpr uint64_t GEOMETRY_CHANGES = layer_state_t::ePositionChanged |
- layer_state_t::eMatrixChanged | layer_state_t::eTransparentRegionChanged |
- layer_state_t::eBufferCropChanged | layer_state_t::eBufferTransformChanged |
- layer_state_t::eTransformToDisplayInverseChanged | layer_state_t::eCropChanged |
- layer_state_t::eDestinationFrameChanged;
+ layer_state_t::eFlagsChanged | layer_state_t::eLayerStackChanged |
+ layer_state_t::eTrustedOverlayChanged;
bool hasValidBuffer() const;
void sanitize(int32_t permissions);