Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit a9734772 authored by Carmelo Messina's avatar Carmelo Messina
Browse files

Set the screen frame rate to 60 Hz: Set the screen refresh rate to 60Hz by...

Set the screen frame rate to 60 Hz: Set the screen refresh rate to 60Hz by default (#1538), increasing it if necessary in cases where the system only supports lower frequencies (such as in RDP or virtual systems).
The feature can be disabled using the throttle-main-thread-to-60hz flag (enabled by default).
Special thanks to Metrokoto for pointing out the flag to me.
parent 92f04466
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -302,6 +302,7 @@ Enable-snackbar-swipe.patch
Add-cromite-test-support.patch
Android-Pixel-Perfect-Mode.patch
Set-caret-blink-interval-to-default.patch
Set-the-screen-frame-rate-to-60-Hz.patch
Temp-disable-UseContextSnapshot.patch

# temporary or wip patches
+112 −0
Original line number Diff line number Diff line
From: uazo <uazo@users.noreply.github.com>
Date: Wed, 10 Sep 2025 07:44:05 +0000
Subject: Set the screen frame rate to 60 Hz

Set the screen refresh rate to 60Hz by default, increasing it if necessary
in cases where the system only supports lower frequencies (such as in RDP
or virtual systems).
The feature can be disabled using the throttle-main-thread-to-60hz flag (enabled by default).

License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
 cc/base/features.cc                             | 2 ++
 cc/scheduler/scheduler_state_machine.cc         | 7 +++----
 chrome/browser/chrome_content_browser_client.cc | 8 ++++++++
 third_party/blink/common/features.cc            | 1 +
 4 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/cc/base/features.cc b/cc/base/features.cc
--- a/cc/base/features.cc
+++ b/cc/base/features.cc
@@ -180,6 +180,7 @@ BASE_FEATURE(kInitImageDecodeLastUseTime,
 BASE_FEATURE(kThrottleMainFrameTo60Hz,
              "ThrottleMainFrameTo60Hz",
              base::FEATURE_DISABLED_BY_DEFAULT);
+SET_CROMITE_FEATURE_ENABLED(kThrottleMainFrameTo60Hz);
 
 void SetIsEligibleForThrottleMainFrameTo60Hz(bool is_eligible) {
   s_is_eligible_for_throttle_main_frame_to_60hz.store(
@@ -209,6 +210,7 @@ BASE_FEATURE(kRenderThrottleFrameRate,
              base::FEATURE_ENABLED_BY_DEFAULT);
 const base::FeatureParam<int> kRenderThrottledFrameIntervalHz{
     &kRenderThrottleFrameRate, "render-throttled-frame-interval-hz", 30};
+SET_CROMITE_FEATURE_DISABLED(kRenderThrottleFrameRate);
 
 BASE_FEATURE(kFastPathNoRaster,
              "FastPathNoRaster",
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -1535,9 +1535,8 @@ void SchedulerStateMachine::FrameIntervalUpdated(
   //
   // Apply some slack, so that if for some reason the interval is a bit larger
   // than 8.33333333333333ms, then we catch it still.
-  constexpr float kSlackFactor = .9;
   bool fast_vsync_interval =
-      frame_interval < base::Hertz(120) * (1 / kSlackFactor);
+      base::FeatureList::IsEnabled(features::kThrottleMainFrameTo60Hz);
   if (fast_vsync_interval) {
     features::SetIsEligibleForThrottleMainFrameTo60Hz(true);
   }
@@ -1549,7 +1548,7 @@ void SchedulerStateMachine::FrameIntervalUpdated(
     // Use interval / 2 rather than an actual interval as refresh rates are
     // not necessarily 120: it could be something really close, or it could be
     // 144Hz for instance.
-    main_frame_throttled_interval_ = kSlackFactor * frame_interval * 2;
+    main_frame_throttled_interval_ = base::Hertz(60);
     TRACE_EVENT("cc", "ThrottleMainFrame", "interval",
                 main_frame_throttled_interval_);
   } else {
@@ -1841,7 +1840,7 @@ void SchedulerStateMachine::SetShouldThrottleFrameRate(bool flag) {
 }
 
 base::TimeDelta SchedulerStateMachine::MainFrameThrottledInterval() const {
-  if (!throttle_frame_rate_) {
+  if (!throttle_frame_rate_ || base::FeatureList::IsEnabled(features::kThrottleMainFrameTo60Hz)) {
     return main_frame_throttled_interval_;
   } else {
     auto throttled_interval =
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -49,6 +49,7 @@
 #include "build/branding_buildflags.h"
 #include "build/build_config.h"
 #include "build/config/chromebox_for_meetings/buildflags.h"  // PLATFORM_CFM
+#include "cc/base/features.h"
 #include "chrome/browser/after_startup_task_utils.h"
 #include "chrome/browser/ai/ai_manager.h"
 #include "chrome/browser/app_mode/app_mode_utils.h"
@@ -295,6 +296,7 @@
 #include "components/variations/variations_associated_data.h"
 #include "components/variations/variations_switches.h"
 #include "components/version_info/version_info.h"
+#include "components/viz/common/switches.h"
 #include "components/webapps/common/web_app_id.h"
 #include "components/webui/chrome_urls/pref_names.h"
 #include "content/public/browser/attribution_data_model.h"
@@ -2775,6 +2777,12 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
   command_line->AppendSwitchASCII(ash::switches::kHomedir, homedir.value());
 #endif
 
+  if (base::FeatureList::IsEnabled(::features::kThrottleMainFrameTo60Hz)
+       && !base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableFrameRateLimit)) {
+    base::CommandLine::ForCurrentProcess()->
+      AppendSwitch(switches::kDisableFrameRateLimit);
+  }
+
   if (process_type == switches::kRendererProcess) {
     content::RenderProcessHost* process =
         content::RenderProcessHost::FromID(child_process_id);
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -2639,6 +2639,7 @@ BASE_FEATURE(kUnloadBlocklisted,
 BASE_FEATURE(kUrgentMainFrameForInput,
              "UrgentMainFrameForInput",
              base::FEATURE_DISABLED_BY_DEFAULT);
+SET_CROMITE_FEATURE_DISABLED(kUrgentMainFrameForInput);
 
 // Flag guard for changes in how navigation code handles the URL to commit.
 // https://crbug.com/422803238
--