Wrap RenderArea creation in a builder pattern

Use a builder to pass around parameters used for RenderArea
creation. This allows more flexibility for when the RenderArea
is created, which aids in the overall goal of reducing the
number of SF main thread hops during screenshots. Creating a builder
will allow the render area to later be passed into
captureScreenCommon() without being wrapped in a future.

Bug: b/294936197
Test: atest SurfaceFlinger_test
Change-Id: I9545e02af42c7e6cd9b0c328e2ecce995811f2d7
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index df226c9..5263aa8 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -148,6 +148,7 @@
 #include "MutexUtils.h"
 #include "NativeWindowSurface.h"
 #include "RegionSamplingThread.h"
+#include "RenderAreaBuilder.h"
 #include "Scheduler/EventThread.h"
 #include "Scheduler/LayerHistory.h"
 #include "Scheduler/Scheduler.h"
@@ -7918,8 +7919,10 @@
     }
 
     RenderAreaFuture renderAreaFuture = ftl::defer([=] {
-        return DisplayRenderArea::create(displayWeak, args.sourceCrop, reqSize, args.dataspace,
-                                         args.hintForSeamlessTransition, args.captureSecureLayers);
+        DisplayRenderAreaBuilder displayRenderArea(args.sourceCrop, reqSize, args.dataspace,
+                                                   args.hintForSeamlessTransition,
+                                                   args.captureSecureLayers, displayWeak);
+        return displayRenderArea.build();
     });
 
     GetLayerSnapshotsFunction getLayerSnapshots;
@@ -7972,9 +7975,10 @@
     }
 
     RenderAreaFuture renderAreaFuture = ftl::defer([=] {
-        return DisplayRenderArea::create(displayWeak, Rect(), size, args.dataspace,
-                                         args.hintForSeamlessTransition,
-                                         false /* captureSecureLayers */);
+        DisplayRenderAreaBuilder displayRenderArea(Rect(), size, args.dataspace,
+                                                   args.hintForSeamlessTransition,
+                                                   false /* captureSecureLayers */, displayWeak);
+        return displayRenderArea.build();
     });
 
     GetLayerSnapshotsFunction getLayerSnapshots;
@@ -8079,25 +8083,22 @@
         return;
     }
 
-    RenderAreaFuture renderAreaFuture = ftl::defer([=, this]() FTL_FAKE_GUARD(kMainThreadContext)
-                                                           -> std::unique_ptr<RenderArea> {
-        ui::Transform layerTransform;
-        Rect layerBufferSize;
-        frontend::LayerSnapshot* snapshot =
-                mLayerSnapshotBuilder.getSnapshot(parent->getSequence());
-        if (!snapshot) {
-            ALOGW("Couldn't find layer snapshot for %d", parent->getSequence());
-        } else {
-            if (!args.childrenOnly) {
-                layerTransform = snapshot->localTransform.inverse();
-            }
-            layerBufferSize = snapshot->bufferSize;
-        }
+    RenderAreaFuture renderAreaFuture = ftl::defer(
+            [=, this]() FTL_FAKE_GUARD(kMainThreadContext) -> std::unique_ptr<RenderArea> {
+                LayerRenderAreaBuilder layerRenderArea(crop, reqSize, dataspace,
+                                                       args.captureSecureLayers,
+                                                       args.hintForSeamlessTransition, parent,
+                                                       args.childrenOnly);
 
-        return std::make_unique<LayerRenderArea>(parent, crop, reqSize, dataspace,
-                                                 args.captureSecureLayers, layerTransform,
-                                                 layerBufferSize, args.hintForSeamlessTransition);
-    });
+                frontend::LayerSnapshot* snapshot =
+                        mLayerSnapshotBuilder.getSnapshot(parent->getSequence());
+                if (!snapshot) {
+                    ALOGW("Couldn't find layer snapshot for %d", parent->getSequence());
+                } else {
+                    layerRenderArea.setLayerInfo(snapshot);
+                }
+                return layerRenderArea.build();
+            });
     GetLayerSnapshotsFunction getLayerSnapshots;
     if (mLayerLifecycleManagerEnabled) {
         std::optional<FloatRect> parentCrop = std::nullopt;