SurfaceFlinger: optimize frame rate override

On devices that frame rate override cannot be supported
as the device doesn't support refresh rates that are divisors of
each other, there is no point in trying to find a a frame rate override.

Bug: 170502573
Test: atest FrameRateOverrideHostTest
Change-Id: Idfce2573ee58fa695e81a00c85206990baad978e
diff --git a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
index 5b78483..c1347bb 100644
--- a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
+++ b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
@@ -390,8 +390,9 @@
 RefreshRateConfigs::UidToFrameRateOverride RefreshRateConfigs::getFrameRateOverrides(
         const std::vector<LayerRequirement>& layers, Fps displayFrameRate) const {
     ATRACE_CALL();
-    ALOGV("getFrameRateOverrides %zu layers", layers.size());
+    if (!mSupportsFrameRateOverride) return {};
 
+    ALOGV("getFrameRateOverrides %zu layers", layers.size());
     std::lock_guard lock(mLock);
     std::vector<RefreshRateScore> scores = initializeScoresForAllRefreshRates(mRefreshRates);
     std::unordered_map<uid_t, std::vector<const LayerRequirement*>> layersByUid =
@@ -547,6 +548,16 @@
     mDisplayManagerPolicy.defaultConfig = currentConfigId;
     mMinSupportedRefreshRate = sortedConfigs.front();
     mMaxSupportedRefreshRate = sortedConfigs.back();
+
+    mSupportsFrameRateOverride = false;
+    for (const auto& config1 : sortedConfigs) {
+        for (const auto& config2 : sortedConfigs) {
+            if (getFrameRateDivider(config1->getFps(), config2->getFps()) >= 2) {
+                mSupportsFrameRateOverride = true;
+                break;
+            }
+        }
+    }
     constructAvailableRefreshRates();
 }
 
@@ -783,6 +794,8 @@
         base::StringAppendF(&result, "\t%s\n", refreshRate->toString().c_str());
     }
 
+    base::StringAppendF(&result, "Supports Frame Rate Override: %s\n",
+                        mSupportsFrameRateOverride ? "yes" : "no");
     result.append("\n");
 }