mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 528208. Measure interval delays from start of callback to start of callback, not from end of callback to start of callback. r=peterv
This commit is contained in:
parent
ecc36f002a
commit
18575db8fd
@ -8099,14 +8099,21 @@ nsGlobalWindow::RunTimeout(nsTimeout *aTimeout)
|
||||
// If we have a regular interval timer, we re-schedule the
|
||||
// timeout, accounting for clock drift.
|
||||
if (timeout->mInterval) {
|
||||
// Compute time to next timeout for interval timer. If we're
|
||||
// running pending timeouts because they've been temporarily
|
||||
// disabled (!aTimeout), set the next interval to be relative to
|
||||
// "now", and not to when the timeout that was pending should
|
||||
// have fired.
|
||||
// Also check if the next interval timeout is overdue. If so,
|
||||
// then restart the interval from now.
|
||||
// Compute time to next timeout for interval timer.
|
||||
PRTime nextInterval = (PRTime)timeout->mInterval * PR_USEC_PER_MSEC;
|
||||
|
||||
// Make sure nextInterval is at least DOM_MIN_TIMEOUT_VALUE.
|
||||
// Note: We must cast the rhs expression to PRTime to work
|
||||
// around what looks like a compiler bug on x86_64.
|
||||
if (nextInterval < (PRTime)(DOM_MIN_TIMEOUT_VALUE * PR_USEC_PER_MSEC)) {
|
||||
nextInterval = DOM_MIN_TIMEOUT_VALUE * PR_USEC_PER_MSEC;
|
||||
}
|
||||
|
||||
// If we're running pending timeouts because they've been temporarily
|
||||
// disabled (!aTimeout), set the next interval to be relative to "now",
|
||||
// and not to when the timeout that was pending should have fired. Also
|
||||
// check if the next interval timeout is overdue. If so, then restart
|
||||
// the interval from now.
|
||||
if (!aTimeout || nextInterval + timeout->mWhen <= now)
|
||||
nextInterval += now;
|
||||
else
|
||||
@ -8114,11 +8121,10 @@ nsGlobalWindow::RunTimeout(nsTimeout *aTimeout)
|
||||
|
||||
PRTime delay = nextInterval - PR_Now();
|
||||
|
||||
// Make sure the delay is at least DOM_MIN_TIMEOUT_VALUE.
|
||||
// Note: We must cast the rhs expression to PRTime to work
|
||||
// around what looks like a compiler bug on x86_64.
|
||||
if (delay < (PRTime)(DOM_MIN_TIMEOUT_VALUE * PR_USEC_PER_MSEC)) {
|
||||
delay = DOM_MIN_TIMEOUT_VALUE * PR_USEC_PER_MSEC;
|
||||
// And make sure delay is nonnegative; that might happen if the timer
|
||||
// thread is firing our timers somewhat early.
|
||||
if (delay < 0) {
|
||||
delay = 0;
|
||||
}
|
||||
|
||||
if (timeout->mTimer) {
|
||||
|
Loading…
Reference in New Issue
Block a user