Add plumbing for upcoming setFrameRate() api
Add plumbing from the app to surface flinger for the
ANativeWindow_setFrameRate() and ASurfaceTransaction_setFrameRate() api
calls we'll be adding soon.
We don't do anything in surface flinger with this data yet.
Bug: 143912624
Test: Added a new test, SetFrameRateTest.
Change-Id: I1cab87f3ce5afca4591a39d8e7a42cb1e86a368f
diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp
index e4e4bc7..56b50eb 100644
--- a/services/surfaceflinger/BufferQueueLayer.cpp
+++ b/services/surfaceflinger/BufferQueueLayer.cpp
@@ -117,6 +117,18 @@
return isDue || !isPlausible;
}
+bool BufferQueueLayer::setFrameRate(float frameRate) {
+ float oldFrameRate = 0.f;
+ status_t result = mConsumer->getFrameRate(&oldFrameRate);
+ bool frameRateChanged = result < 0 || frameRate != oldFrameRate;
+ mConsumer->setFrameRate(frameRate);
+ return frameRateChanged;
+}
+
+float BufferQueueLayer::getFrameRate() const {
+ return mLatchedFrameRate;
+}
+
// -----------------------------------------------------------------------
// Interface implementation for BufferLayer
// -----------------------------------------------------------------------
@@ -547,6 +559,9 @@
mBufferInfo.mApi = mConsumer->getCurrentApi();
mBufferInfo.mPixelFormat = mFormat;
mBufferInfo.mTransformToDisplayInverse = mConsumer->getTransformToDisplayInverse();
+ float latchedFrameRate;
+ mConsumer->getFrameRate(&latchedFrameRate);
+ mLatchedFrameRate = latchedFrameRate;
}
sp<Layer> BufferQueueLayer::createClone() {