| Index: Source/platform/Timer.h | 
| diff --git a/Source/platform/Timer.h b/Source/platform/Timer.h | 
| index 38d3dc167af334cbdd73cf6ca09f826ace4cab00..fcc01843617f71c3eff8261d914d306ceb1195d6 100644 | 
| --- a/Source/platform/Timer.h | 
| +++ b/Source/platform/Timer.h | 
| @@ -28,7 +28,6 @@ | 
|  | 
| #include "platform/PlatformExport.h" | 
| #include "platform/heap/Handle.h" | 
| -#include "platform/scheduler/CancellableTaskFactory.h" | 
| #include "public/platform/WebTraceLocation.h" | 
| #include "wtf/AddressSanitizer.h" | 
| #include "wtf/Noncopyable.h" | 
| @@ -66,12 +65,11 @@ | 
| double repeatInterval() const { return m_repeatInterval; } | 
|  | 
| void augmentRepeatInterval(double delta) { | 
| -        double now = monotonicallyIncreasingTime(); | 
| -        setNextFireTime(now, m_nextFireTime - now + delta); | 
| +        setNextFireTime(m_nextFireTime + delta); | 
| m_repeatInterval += delta; | 
| } | 
|  | 
| -    void didChangeAlignmentInterval(double now); | 
| +    void didChangeAlignmentInterval(); | 
|  | 
| private: | 
| virtual void fired() = 0; | 
| @@ -79,16 +77,35 @@ | 
| NO_LAZY_SWEEP_SANITIZE_ADDRESS | 
| virtual double alignedFireTime(double fireTime) const { return fireTime; } | 
|  | 
| -    void setNextFireTime(double now, double delay); | 
| +    void checkConsistency() const; | 
| +    void checkHeapIndex() const; | 
|  | 
| -    void run(); | 
| +    void setNextFireTime(double); | 
| + | 
| +    NO_LAZY_SWEEP_SANITIZE_ADDRESS | 
| +    bool inHeap() const { return m_heapIndex != -1; } | 
| + | 
| +    bool hasValidHeapPosition() const; | 
| +    void updateHeapIfNeeded(double oldTime); | 
| + | 
| +    void heapDecreaseKey(); | 
| +    void heapDelete(); | 
| +    void heapDeleteMin(); | 
| +    void heapIncreaseKey(); | 
| +    void heapInsert(); | 
| +    void heapPop(); | 
| +    void heapPopMin(); | 
| + | 
| +    NO_LAZY_SWEEP_SANITIZE_ADDRESS | 
| +    Vector<TimerBase*>& timerHeap() const { ASSERT(m_cachedThreadGlobalTimerHeap); return *m_cachedThreadGlobalTimerHeap; } | 
|  | 
| double m_nextFireTime; // 0 if inactive | 
| double m_unalignedNextFireTime; // m_nextFireTime not considering alignment interval | 
| double m_repeatInterval; // 0 if not repeating | 
| +    int m_heapIndex; // -1 if not in heap | 
| +    unsigned m_heapInsertionOrder; // Used to keep order among equal-fire-time timers | 
| +    Vector<TimerBase*>* m_cachedThreadGlobalTimerHeap; | 
| WebTraceLocation m_location; | 
| -    CancellableTaskFactory m_cancellableTaskFactory; | 
| -    WebScheduler* m_webScheduler; // Not owned. | 
|  | 
| #if ENABLE(ASSERT) | 
| ThreadIdentifier m_thread; | 
| @@ -147,7 +164,7 @@ | 
| inline bool TimerBase::isActive() const | 
| { | 
| ASSERT(m_thread == currentThread()); | 
| -    return m_cancellableTaskFactory.isPending(); | 
| +    return m_nextFireTime; | 
| } | 
|  | 
| } | 
|  |