SurfaceFlinger: fix calculation issues with refresh rate selection
- Initialize BufferQueueCore::mFrameRate
- Load BufferQueueLayer::mLatchedFrameRate value before using it
- Fix a bug with LayerInfoV2 where a frequent layer needs to post at least
FREQUENT_LAYER_WINDOW_SIZE buffers.
- Fix casting issues in RefreshRateConfigs
Test: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest
Bug: 147516364
Change-Id: Ie6e93ef2f4dd3a030bfd0dbbf8018d96680d8bb3
diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp
index e85281d..46bbbe1 100644
--- a/services/surfaceflinger/BufferQueueLayer.cpp
+++ b/services/surfaceflinger/BufferQueueLayer.cpp
@@ -130,8 +130,10 @@
}
std::optional<float> BufferQueueLayer::getFrameRate() const {
- if (mLatchedFrameRate > 0.f || mLatchedFrameRate == FRAME_RATE_NO_VOTE)
- return mLatchedFrameRate;
+ const auto frameRate = mLatchedFrameRate.load();
+ if (frameRate > 0.f || frameRate == FRAME_RATE_NO_VOTE) {
+ return frameRate;
+ }
return {};
}