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);
     }
 };