SF: Move/refactor presentation loop to CompositionEngine

This introduces CompositionEngine::present(), which will be the entry
point for performing all composition related work.

Test: atest libsurfaceflinger_unittest libcompositionengine_test
Bug: 121291683
Change-Id: I5980da7fd471ad0920f6737698c214ed5ee07c60
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 8760bb0..e0d1609 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1802,14 +1802,7 @@
     mCompositionEngine->preComposition(refreshArgs);
     rebuildLayerStacks();
     calculateWorkingSet(refreshArgs);
-    for (const auto& [token, displayDevice] : mDisplays) {
-        auto display = displayDevice->getCompositionDisplay();
-        display->beginFrame();
-        display->prepareFrame();
-        display->devOptRepaintFlash(refreshArgs);
-        display->finishFrame(refreshArgs);
-        display->postFramebuffer();
-    }
+    mCompositionEngine->present(refreshArgs);
 
     postFrame();
     postComposition();