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/CompositionEngine/src/CompositionEngine.cpp b/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp
index 8bc3a34..6ed50aa 100644
--- a/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/CompositionEngine.cpp
@@ -71,6 +71,12 @@
return mRefreshStartTime;
}
+void CompositionEngine::present(CompositionRefreshArgs& args) {
+ for (const auto& output : args.outputs) {
+ output->present(args);
+ }
+}
+
void CompositionEngine::updateCursorAsync(CompositionRefreshArgs& args) {
std::unordered_map<compositionengine::LayerFE*, compositionengine::LayerFECompositionState*>
uniqueVisibleLayers;
diff --git a/services/surfaceflinger/CompositionEngine/src/Output.cpp b/services/surfaceflinger/CompositionEngine/src/Output.cpp
index cc7e453..635e450 100644
--- a/services/surfaceflinger/CompositionEngine/src/Output.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/Output.cpp
@@ -260,6 +260,14 @@
return std::move(mReleasedLayers);
}
+void Output::present(const compositionengine::CompositionRefreshArgs& refreshArgs) {
+ beginFrame();
+ prepareFrame();
+ devOptRepaintFlash(refreshArgs);
+ finishFrame(refreshArgs);
+ postFramebuffer();
+}
+
void Output::updateColorProfile(const compositionengine::CompositionRefreshArgs& refreshArgs) {
setColorProfile(pickColorProfile(refreshArgs));
}