SF: Move OutputLayer creation to computeVisibleRegions
This moves part of rebuildLayerStacks to computeVisibleRegions. In
particular it eliminates a second loop over all front-end layers to
identify the ones that are visible on an output. The first loop
computes the visibility, and can immediately create the output layers.
This is a bit of nontrivial restructuring prior to moving the code to
CompositionEngine, since that will also break things up a bit.
Test: atest libsurfaceflinger_unittest libcompositionengine_test
Bug: 121291683
Change-Id: I8a498195f9b5f976e7a69de717818b57494e2f2b
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 0f9a4bd..07efba9 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -98,6 +98,7 @@
namespace compositionengine {
class DisplaySurface;
+class OutputLayer;
struct CompositionRefreshArgs;
} // namespace compositionengine
@@ -740,8 +741,9 @@
* Compositing
*/
void invalidateHwcGeometry();
- void computeVisibleRegions(const sp<const DisplayDevice>& display, Region& dirtyRegion,
- Region& opaqueRegion);
+ void computeVisibleRegions(
+ const sp<const DisplayDevice>& display, Region& dirtyRegion, Region& opaqueRegion,
+ std::vector<std::unique_ptr<compositionengine::OutputLayer>>& outputLayers);
void postComposition();
void getCompositorTiming(CompositorTiming* compositorTiming);