Index: third_party/WebKit/Source/core/frame/DOMTimerCoordinator.cpp |
diff --git a/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.cpp b/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.cpp |
index 4401db92bd20fae0217377162b880c4e627fd185..240f8cb5d0d7c6abb041666c257b9f14056fb1e5 100644 |
--- a/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.cpp |
+++ b/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.cpp |
@@ -42,6 +42,20 @@ |
m_timers.remove(timeoutID); |
} |
+void DOMTimerCoordinator::didChangeTimerAlignmentInterval() |
+{ |
+ // Reschedule timers in increasing order of desired run time to maintain their relative order. |
+ // TODO(skyostil): Move timer alignment into the scheduler. |
+ WillBeHeapVector<RawPtrWillBeMember<DOMTimer>> timers; |
+ timers.reserveCapacity(m_timers.size()); |
+ for (TimeoutMap::iterator iter = m_timers.begin(); iter != m_timers.end(); ++iter) |
+ timers.append(iter->value.get()); |
+ std::sort(timers.begin(), timers.end(), TimerBase::Comparator()); |
+ double now = monotonicallyIncreasingTime(); |
+ for (DOMTimer* timer : timers) |
+ timer->didChangeAlignmentInterval(now); |
+} |
+ |
DEFINE_TRACE(DOMTimerCoordinator) |
{ |
#if ENABLE(OILPAN) |