CE: Reset forceClientComposition on geometry update
If the output layer state ever had forceClientComposition set to true,
nothing would ever reset it to false. This would cause client
composition to be used when not necessary.
This regressed in my refactoring work. It was originally cleared in
SurfaceFlinger.cpp when the geometry was invalidated.
This patch adds it back, in an equivalent spot in the CompositionEngine
code.
Bug: 138853920
Bug: 139820579
Test: atest cts/tests/camera/src/android/hardware/camera2/cts/RecordingTest.java#testRecordingFramerateLowToHigh
Test: atest google/perf/jank/UIBench/UIBench
Test: atest libsurfaceflinger_unittest libcompositionengine_test
Test: atest CtsColorModeTestCases
Test: atest CtsDisplayTestCases
Test: atest CtsGraphicsTestCases
Test: atest CtsUiRenderingTestCases
Test: atest CtsViewTestCases
Test: atest android.media.cts.EncodeVirtualDisplayWithCompositionTest
Test: go/wm-smoke
Change-Id: I47f18094cea8ca298eae3bad1b1a9e56cb9ba6e0
diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
index 2e45953..43ab87a 100644
--- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
@@ -288,6 +288,13 @@
const auto& profile = *mOutput.getDisplayColorProfile();
if (includeGeometry) {
+ // Clear the forceClientComposition flag before it is set for any
+ // reason. Note that since it can be set by some checks below when
+ // updating the geometry state, we only clear it when updating the
+ // geometry since those conditions for forcing client composition won't
+ // go away otherwise.
+ mState.forceClientComposition = false;
+
mState.displayFrame = calculateOutputDisplayFrame();
mState.sourceCrop = calculateOutputSourceCrop();
mState.bufferTransform =