CE: Snapshot layer metadata
Adds LayerMetadata to LayerSnapshots. LayerMetadata is only populated
when CE enables the new feature flag and the feature flag will only be
enabled in ARC++'s CE.
This change is necessary to split LayerFE from the Layer class as
ARC++'s LayerFE subclass accesses LayerMetadata.
Bug: 238781169
Test: go/wm-smoke
Test: presubmit
Change-Id: Iae405707897eedf5af9025fe628c1cd60b596e10
diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h
index 4079d16..4ff86e5 100644
--- a/services/surfaceflinger/Layer.h
+++ b/services/surfaceflinger/Layer.h
@@ -166,6 +166,8 @@
ui::Transform transform;
Rect bufferSize;
std::shared_ptr<renderengine::ExternalTexture> externalTexture;
+ LayerMetadata layerMetadata;
+ LayerMetadata relativeLayerMetadata;
};
using FrameRate = scheduler::LayerInfo::FrameRate;
@@ -611,6 +613,12 @@
mClearClientCompositionFenceOnLayerDisplayed = false;
}
+ const LayerMetadata* getMetadata() const override { return &mSnapshot->layerMetadata; }
+
+ const LayerMetadata* getRelativeMetadata() const override {
+ return &mSnapshot->relativeLayerMetadata;
+ }
+
const char* getDebugName() const override;
bool setShadowRadius(float shadowRadius);
@@ -901,6 +909,9 @@
// TODO(b/238781169) Remove direct calls to RenderEngine::drawLayers that don't go through
// CompositionEngine to create a single path for composing layers.
void updateSnapshot(bool updateGeometry);
+ void updateMetadataSnapshot(const LayerMetadata& parentMetadata);
+ void updateRelativeMetadataSnapshot(const LayerMetadata& relativeLayerMetadata,
+ std::unordered_set<Layer*>& visited);
protected:
friend class impl::SurfaceInterceptor;