Propagate tree on setting selection strategy
Otherwise there is an order dependency on calling setFrameRate,
setFrameRateCategory, and setFrameRateSelectionStrategy.
Bug: 297418260
Test: atest FrameRateSelectionStrategyTest
Change-Id: I9fb345a1632c5a18fe445d1637b6bb22984fe24e
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index e780a1e..a73c511 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -1352,6 +1352,8 @@
mDrawingState.frameRateSelectionStrategy = strategy;
mDrawingState.sequence++;
mDrawingState.modified = true;
+
+ updateTreeHasFrameRateVote();
setTransactionFlags(eTransactionNeeded);
return true;
}
diff --git a/services/surfaceflinger/tests/unittests/FrameRateSelectionStrategyTest.cpp b/services/surfaceflinger/tests/unittests/FrameRateSelectionStrategyTest.cpp
index ffe6f24..20ea0c0 100644
--- a/services/surfaceflinger/tests/unittests/FrameRateSelectionStrategyTest.cpp
+++ b/services/surfaceflinger/tests/unittests/FrameRateSelectionStrategyTest.cpp
@@ -153,6 +153,19 @@
EXPECT_EQ(FRAME_RATE_VOTE1, layer3->getFrameRateForLayerTree());
EXPECT_EQ(FrameRateSelectionStrategy::Self,
layer3->getDrawingState().frameRateSelectionStrategy);
+
+ layer1->setFrameRateSelectionStrategy(FrameRateSelectionStrategy::Self);
+ commitTransaction();
+
+ EXPECT_EQ(FRAME_RATE_VOTE1, layer1->getFrameRateForLayerTree());
+ EXPECT_EQ(FrameRateSelectionStrategy::Self,
+ layer1->getDrawingState().frameRateSelectionStrategy);
+ EXPECT_EQ(FRAME_RATE_VOTE2, layer2->getFrameRateForLayerTree());
+ EXPECT_EQ(FrameRateSelectionStrategy::OverrideChildren,
+ layer2->getDrawingState().frameRateSelectionStrategy);
+ EXPECT_EQ(FRAME_RATE_VOTE2, layer3->getFrameRateForLayerTree());
+ EXPECT_EQ(FrameRateSelectionStrategy::Self,
+ layer3->getDrawingState().frameRateSelectionStrategy);
}
} // namespace