diff options
| author | 2022-12-22 20:06:32 +0000 | |
|---|---|---|
| committer | 2022-12-22 22:36:04 +0000 | |
| commit | 8fc721bb338c6d13e8758c2139d073acab86e3e2 (patch) | |
| tree | 5ed9d431326907c0ab5e57b82af187c5a8e45030 /libs | |
| parent | 42afe5fa137aacc2fc5d9bdf12052dc455b769ca (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.h | 56 |
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); |