Bug 1529581 - Improve MediaTimer accuracy. r=padenot

Differential Revision: https://phabricator.services.mozilla.com/D129655
This commit is contained in:
Andreas Pehrson 2021-11-02 14:35:58 +00:00
Родитель b9f92d2e95
Коммит 00e3b78ffe
1 изменённых файлов: 5 добавлений и 10 удалений

Просмотреть файл

@ -181,17 +181,12 @@ void MediaTimer::ArmTimer(const TimeStamp& aTarget, const TimeStamp& aNow) {
MOZ_DIAGNOSTIC_ASSERT(!TimerIsArmed());
MOZ_DIAGNOSTIC_ASSERT(aTarget > aNow);
// XPCOM timer resolution is in milliseconds. It's important to never resolve
// a timer when mTarget might compare < now (even if very close), so round up.
unsigned long delay = std::ceil((aTarget - aNow).ToMilliseconds());
TIMER_LOG("MediaTimer::ArmTimer delay=%lu", delay);
const TimeDuration delay = aTarget - aNow;
TIMER_LOG("MediaTimer::ArmTimer delay=%.3fms", delay.ToMilliseconds());
mCurrentTimerTarget = aTarget;
nsresult rv = mTimer->InitWithNamedFuncCallback(&TimerCallback, this, delay,
nsITimer::TYPE_ONE_SHOT,
"MediaTimer::TimerCallback");
MOZ_DIAGNOSTIC_ASSERT(NS_SUCCEEDED(rv));
Unused << rv;
(void)rv;
MOZ_ALWAYS_SUCCEEDS(mTimer->InitHighResolutionWithNamedFuncCallback(
&TimerCallback, this, delay, nsITimer::TYPE_ONE_SHOT,
"MediaTimer::TimerCallback"));
}
} // namespace mozilla