SF: Tune RefreshRateConfigs for close refresh rates

Partial cherry-pick of 15a0fc65eedb633f4fbf988e4a319452ddaebdcc
to fix seen in CTS

Bug: 196404992
Bug: 196191168
Test: atest CtsDisplayTestCases.android.display.cts.DisplayTest#testModeSwitchOnPrimaryDisplay
Change-Id: I9f8abac183bf6255fed4e2481d22aa3eb42b72ac
Merged-In: I694e2aa5b16e9b4e0f6d1e8263b1ac35099605fd
diff --git a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
index 0334d70..73b7b63 100644
--- a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
+++ b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
@@ -911,7 +911,10 @@
 int RefreshRateConfigs::getFrameRateDivider(Fps displayFrameRate, Fps layerFrameRate) {
     // This calculation needs to be in sync with the java code
     // in DisplayManagerService.getDisplayInfoForFrameRateOverride
-    constexpr float kThreshold = 0.1f;
+
+    // The threshold must be smaller than 0.001 in order to differentiate
+    // between the fractional pairs (e.g. 59.94 and 60).
+    constexpr float kThreshold = 0.0009f;
     const auto numPeriods = displayFrameRate.getValue() / layerFrameRate.getValue();
     const auto numPeriodsRounded = std::round(numPeriods);
     if (std::abs(numPeriods - numPeriodsRounded) > kThreshold) {