SF: remove wp<Layer> from LayerHistory
wp::promote has a significant performace impact. Instead we maintain
a copy of the relevant layer information in LayerInfo.
This shows reduction in simpleperf for the main thread
3.07% -> 0.81%
Test: simpleperf for PIP + Notification shade expansion
Test: atest SetFrameRateTest
Bug: 169873384
Change-Id: Ib1414a2db73a4c30a26379a0ba8ba9e639f920ce
diff --git a/services/surfaceflinger/tests/unittests/LayerHistoryTest.cpp b/services/surfaceflinger/tests/unittests/LayerHistoryTest.cpp
index fec590e..b67ebca 100644
--- a/services/surfaceflinger/tests/unittests/LayerHistoryTest.cpp
+++ b/services/surfaceflinger/tests/unittests/LayerHistoryTest.cpp
@@ -81,8 +81,8 @@
void setDefaultLayerVote(Layer* layer,
LayerHistory::LayerVoteType vote) NO_THREAD_SAFETY_ANALYSIS {
- for (auto& [weak, info] : history().mLayerInfos) {
- if (auto strong = weak.promote(); strong && strong.get() == layer) {
+ for (auto& [layerUnsafe, info] : history().mLayerInfos) {
+ if (layerUnsafe == layer) {
info->setDefaultLayerVote(vote);
return;
}
@@ -180,6 +180,7 @@
EXPECT_EQ(1, activeLayerCount());
EXPECT_CALL(*layer, isVisible()).WillRepeatedly(Return(false));
+ history().record(layer.get(), 0, time, LayerHistory::LayerUpdateType::Buffer);
summary = history().summarize(time);
EXPECT_TRUE(history().summarize(time).empty());
diff --git a/services/surfaceflinger/tests/unittests/LayerInfoTest.cpp b/services/surfaceflinger/tests/unittests/LayerInfoTest.cpp
index be76e8f..325fb8f 100644
--- a/services/surfaceflinger/tests/unittests/LayerInfoTest.cpp
+++ b/services/surfaceflinger/tests/unittests/LayerInfoTest.cpp
@@ -40,7 +40,7 @@
auto calculateAverageFrameTime() { return layerInfo.calculateAverageFrameTime(); }
- LayerInfo layerInfo{"TestLayerInfo", LayerHistory::LayerVoteType::Heuristic};
+ LayerInfo layerInfo{"TestLayerInfo", 0, LayerHistory::LayerVoteType::Heuristic};
};
namespace {
diff --git a/services/surfaceflinger/tests/unittests/SetFrameRateTest.cpp b/services/surfaceflinger/tests/unittests/SetFrameRateTest.cpp
index 7ef1f2b..7e602a2 100644
--- a/services/surfaceflinger/tests/unittests/SetFrameRateTest.cpp
+++ b/services/surfaceflinger/tests/unittests/SetFrameRateTest.cpp
@@ -523,6 +523,13 @@
parent->setFrameRate(FRAME_RATE_VOTE1);
commitTransaction();
+ mFlinger.mutableScheduler()
+ .mutableLayerHistory()
+ ->record(parent.get(), 0, 0, LayerHistory::LayerUpdateType::Buffer);
+ mFlinger.mutableScheduler()
+ .mutableLayerHistory()
+ ->record(child.get(), 0, 0, LayerHistory::LayerUpdateType::Buffer);
+
const auto layerHistorySummary =
mFlinger.mutableScheduler().mutableLayerHistory()->summarize(0);
ASSERT_EQ(2u, layerHistorySummary.size());