commit 763e6c0b4b7f181f38845641f1b905f986d972c8
parent 32d630146cd92f56bcf09c7e5b1497192a1a5703
Author: Emilio Cobos Álvarez <emilio@crisal.io>
Date: Tue, 4 Nov 2025 09:07:12 +0000
Bug 1998035 - Fix nsRefreshDriver::GetNextTickHint() when there are global and local timer sources. r=smaug
Local and global vsync sources can co-exist in the same (parent) process
on Wayland and macOS, since we have windowless browsers with no widgets,
and windows have their local vsync source, so we need to account for
them properly.
Differential Revision: https://phabricator.services.mozilla.com/D271157
Diffstat:
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/layout/base/nsRefreshDriver.cpp b/layout/base/nsRefreshDriver.cpp
@@ -2996,19 +2996,21 @@ TimeStamp nsRefreshDriver::GetIdleDeadlineHint(TimeStamp aDefault,
/* static */
Maybe<TimeStamp> nsRefreshDriver::GetNextTickHint() {
MOZ_ASSERT(NS_IsMainThread());
-
+ Maybe<TimeStamp> hint;
+ auto UpdateHint = [&hint](const Maybe<TimeStamp>& aNewHint) {
+ if (!aNewHint) {
+ return;
+ }
+ if (!hint || *aNewHint < *hint) {
+ hint = aNewHint;
+ }
+ };
if (sRegularRateTimer) {
- return sRegularRateTimer->GetNextTickHint();
+ UpdateHint(sRegularRateTimer->GetNextTickHint());
}
-
- Maybe<TimeStamp> hint = Nothing();
if (sRegularRateTimerList) {
for (RefreshDriverTimer* timer : *sRegularRateTimerList) {
- if (Maybe<TimeStamp> newHint = timer->GetNextTickHint()) {
- if (!hint || newHint.value() < hint.value()) {
- hint = newHint;
- }
- }
+ UpdateHint(timer->GetNextTickHint());
}
}
return hint;