| Index: Source/platform/TimerHeapEntry.h | 
| diff --git a/Source/platform/TimerHeapEntry.h b/Source/platform/TimerHeapEntry.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..c6366a2554806a5cf5198512edb757277f57618f | 
| --- /dev/null | 
| +++ b/Source/platform/TimerHeapEntry.h | 
| @@ -0,0 +1,70 @@ | 
| +// Copyright 2015 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#ifndef TimerHeapEntry_h | 
| +#define TimerHeapEntry_h | 
| + | 
| +#include "wtf/Noncopyable.h" | 
| +#include <stddef.h> | 
| + | 
| +namespace blink { | 
| + | 
| +class TimerBase; | 
| +class TimerHeap; | 
| + | 
| +// TimerHeapEntry is all of the state TimerHeap maintains about a | 
| +// timer. Because even repeating timers are only scheduled once (for | 
| +// the next time they're fired) as a result there's only one entry for | 
| +// a timer. For this reason TimerHeapEntry is stored inline as part of | 
| +// the TimerBase. | 
| +class TimerHeapEntry { | 
| +    WTF_MAKE_NONCOPYABLE(TimerHeapEntry); | 
| +public: | 
| +    explicit TimerHeapEntry(TimerHeap*); | 
| +    virtual ~TimerHeapEntry(); | 
| + | 
| +    // FIXME: TimerBase uses setValue(0) to mean "not scheduled" but | 
| +    // it may be simpler to make this explicit. | 
| +    double value() const { return m_value; } | 
| +    void setValue(TimerBase&, double newValue); | 
| + | 
| +    bool inHeap() const { return m_state & TimerHeapEntryInHeap; } | 
| + | 
| +private: | 
| +    friend class TimerHeap; | 
| +    friend class TimerHeapLessThanFunction; | 
| +    friend class TimerHeapReference; | 
| + | 
| +    // The heap this entry is in when the timer is scheduled. There's | 
| +    // one timer heap per thread, and timers don't jump threads, so | 
| +    // this is fixed for the life of the timer. | 
| +    TimerHeap* m_owner; | 
| + | 
| +    enum State { | 
| +        TimerHeapEntryNotInHeap, | 
| +        TimerHeapEntryInHeap, | 
| +        TimerHeapEntryInHeap_ForcedMinimumForPopping = 3 | 
| +    }; | 
| +    State m_state; | 
| + | 
| +    // The next fire time. The timer heap doesn't particularly care | 
| +    // that this is a time; it's just part of the (m_value, | 
| +    // m_heapInsertionOrder) key in the min-heap. | 
| +    double m_value; | 
| + | 
| +    // This is assigned from an incrementing counter. When comparing | 
| +    // entries which have the same m_value, the comparison falls back | 
| +    // to m_heapInsertionOrder which means timers scheduled for the | 
| +    // same time will always fire in the order that they were | 
| +    // scheduled in. | 
| +    size_t m_heapInsertionOrder; | 
| + | 
| +    // If the timer is in the heap, the position of the timer in the | 
| +    // heap. | 
| +    size_t m_heapIndex; | 
| +}; | 
| + | 
| +} // namespace blink | 
| + | 
| +#endif // TimerHeapEntry_h | 
|  |