Store layer snapshot in LayerRenderArea
Accessing the layer snapshot from a RenderArea lessens the
dependency on getting the layer snapshot from SF's
mLayerSnapshotBuilder, which needs to run on the main thread.
Bug: b/294936197
Test: atest SurfaceFlinger_test
Change-Id: I7c2a77a432ddae3f7bdd39311a3a505aa8f763d6
diff --git a/services/surfaceflinger/RenderAreaBuilder.h b/services/surfaceflinger/RenderAreaBuilder.h
index 012acd2..a25c6e0 100644
--- a/services/surfaceflinger/RenderAreaBuilder.h
+++ b/services/surfaceflinger/RenderAreaBuilder.h
@@ -83,9 +83,12 @@
layer(layer),
childrenOnly(childrenOnly) {}
- // Layer that the render area will be on
+ // Root layer of the render area
sp<Layer> layer;
+ // Layer snapshot of the root layer
+ frontend::LayerSnapshot layerSnapshot;
+
// Transform to be applied on the layers to transform them
// into the logical render area
ui::Transform layerTransform{ui::Transform()};
@@ -97,17 +100,18 @@
bool childrenOnly;
// Uses parent snapshot to determine layer transform and buffer size
- void setLayerInfo(const frontend::LayerSnapshot* parentSnapshot) {
+ void setLayerSnapshot(const frontend::LayerSnapshot& parentSnapshot) {
+ layerSnapshot = parentSnapshot;
if (!childrenOnly) {
- layerTransform = parentSnapshot->localTransform.inverse();
+ layerTransform = parentSnapshot.localTransform.inverse();
}
- layerBufferSize = parentSnapshot->bufferSize;
+ layerBufferSize = parentSnapshot.bufferSize;
}
std::unique_ptr<RenderArea> build() const override {
- return std::make_unique<LayerRenderArea>(layer, crop, reqSize, reqDataSpace,
- allowSecureLayers, layerTransform, layerBufferSize,
- hintForSeamlessTransition);
+ return std::make_unique<LayerRenderArea>(layer, std::move(layerSnapshot), crop, reqSize,
+ reqDataSpace, allowSecureLayers, layerTransform,
+ layerBufferSize, hintForSeamlessTransition);
}
};