From 0d51adc2173e42cadc13984e6a4b4ca56e31bb2f Mon Sep 17 00:00:00 2001 From: Martok Date: Sat, 10 Feb 2024 16:29:23 +0100 Subject: [PATCH] Issue #2453 - Follow-Up: Use hard-coded minimum timer interval in workers. From the spec: "If nesting level is greater than 5, and timeout is less than 4, then set timeout to 4.", therefore not having it user-configurable doesn't really break anything. --- dom/workers/WorkerPrefs.h | 1 - dom/workers/WorkerPrivate.cpp | 16 ++++------------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/dom/workers/WorkerPrefs.h b/dom/workers/WorkerPrefs.h index a8a1e61f4f..415435cf06 100644 --- a/dom/workers/WorkerPrefs.h +++ b/dom/workers/WorkerPrefs.h @@ -26,7 +26,6 @@ WORKER_SIMPLE_PREF("browser.dom.window.dump.enabled", DumpEnabled, DUMP) WORKER_SIMPLE_PREF("canvas.imagebitmap_extensions.enabled", ImageBitmapExtensionsEnabled, IMAGEBITMAP_EXTENSIONS_ENABLED) WORKER_SIMPLE_PREF("dom.caches.enabled", DOMCachesEnabled, DOM_CACHES) WORKER_SIMPLE_PREF("dom.caches.testing.enabled", DOMCachesTestingEnabled, DOM_CACHES_TESTING) -WORKER_SIMPLE_PREF("dom.min_timeout_value", DOMMinTimeoutValue, DOM_MIN_TIMEOUT_VALUE) WORKER_SIMPLE_PREF("dom.performance.enable_user_timing_logging", PerformanceLoggingEnabled, PERFORMANCE_LOGGING_ENABLED) WORKER_SIMPLE_PREF("dom.webnotifications.enabled", DOMWorkerNotificationEnabled, DOM_WORKERNOTIFICATION) WORKER_SIMPLE_PREF("dom.webnotifications.serviceworker.enabled", DOMServiceWorkerNotificationEnabled, DOM_SERVICEWORKERNOTIFICATION) diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp index 9c52c789cc..85bcc2ffef 100644 --- a/dom/workers/WorkerPrivate.cpp +++ b/dom/workers/WorkerPrivate.cpp @@ -171,6 +171,8 @@ const nsIID kDEBUGWorkerEventTargetIID = { // The number of nested timeouts before we start clamping. HTML says 5. const uint32_t kClampTimeoutNestingLevel = 5u; +// The minimum interval we clamp timers in workers to. HTML says 4ms. +const uint32_t kClampTimeoutInterval = 4u; template class AutoPtrComparator @@ -1997,20 +1999,10 @@ struct WorkerPrivate::TimeoutInfo void CalculateTargetTime(JSContext* aCx) { auto target = mInterval; - int32_t minTimeoutValue; - - // We're on a worker thread; go through WorkerPrivate for the pref. - WorkerPrivate* workerPrivate = GetWorkerPrivateFromContext(aCx); - if (workerPrivate) { - minTimeoutValue = workerPrivate->DOMMinTimeoutValue(); - } else { - // fall back to default 4 ms - minTimeoutValue = 4; - } - + // Clamp timeout for workers, except chrome workers if (mNestingLevel >= kClampTimeoutNestingLevel && !mOnChromeWorker) { - target = TimeDuration::Max(mInterval,TimeDuration::FromMilliseconds(minTimeoutValue)); + target = TimeDuration::Max(mInterval, TimeDuration::FromMilliseconds(kClampTimeoutInterval)); } mTargetTime = TimeStamp::Now() + target; }