SurfaceFlinger: expose vsync id extra buffers
Expose a function for clients to call and query the number
of extra buffers needed when vsync id is passed with the buffer.
Test: launch an app and observe systrace
Test: SF unit tests
Bug: 178148035
Change-Id: Icbeec66073feeae9768f0dcc45831b26144ab6f6
diff --git a/services/surfaceflinger/tests/unittests/SchedulerTest.cpp b/services/surfaceflinger/tests/unittests/SchedulerTest.cpp
index e688e10..510b620 100644
--- a/services/surfaceflinger/tests/unittests/SchedulerTest.cpp
+++ b/services/surfaceflinger/tests/unittests/SchedulerTest.cpp
@@ -69,6 +69,8 @@
Scheduler::ConnectionHandle mConnectionHandle;
mock::EventThread* mEventThread;
sp<MockEventThreadConnection> mEventThreadConnection;
+
+ TestableSurfaceFlinger mFlinger;
};
SchedulerTest::SchedulerTest() {
@@ -187,4 +189,14 @@
EXPECT_CALL(*mEventThread, onConfigChanged(_, _, _)).Times(0);
}
+TEST_F(SchedulerTest, calculateExtraBufferCount) {
+ EXPECT_EQ(0, mFlinger.calculateExtraBufferCount(Fps(60), 30ms));
+ EXPECT_EQ(1, mFlinger.calculateExtraBufferCount(Fps(90), 30ms));
+ EXPECT_EQ(2, mFlinger.calculateExtraBufferCount(Fps(120), 30ms));
+
+ EXPECT_EQ(1, mFlinger.calculateExtraBufferCount(Fps(60), 40ms));
+
+ EXPECT_EQ(0, mFlinger.calculateExtraBufferCount(Fps(60), 10ms));
+}
+
} // namespace android
diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
index 3787c43..6b145b0 100644
--- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
+++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
@@ -391,6 +391,11 @@
auto getGPUContextPriority() { return mFlinger->getGPUContextPriority(); }
+ auto calculateExtraBufferCount(Fps maxSupportedRefreshRate,
+ std::chrono::nanoseconds presentLatency) const {
+ return SurfaceFlinger::calculateExtraBufferCount(maxSupportedRefreshRate, presentLatency);
+ }
+
/* ------------------------------------------------------------------------
* Read-only access to private data to assert post-conditions.
*/