| Index: Source/platform/Timer.cpp
|
| diff --git a/Source/platform/Timer.cpp b/Source/platform/Timer.cpp
|
| index 202365017771b305dbafcb84c88fd974caeecf8d..5e696440e9d6b07b1ff5f74e2a5e10e1394be961 100644
|
| --- a/Source/platform/Timer.cpp
|
| +++ b/Source/platform/Timer.cpp
|
| @@ -402,7 +402,7 @@ void TimerBase::fireTimersInNestedEventLoop()
|
|
|
| void TimerBase::didChangeAlignmentInterval()
|
| {
|
| - setNextFireTime(m_unalignedNextFireTime);
|
| + this->setNextFireTime(m_unalignedNextFireTime);
|
| }
|
|
|
| double TimerBase::nextUnalignedFireInterval() const
|
| @@ -411,4 +411,50 @@ double TimerBase::nextUnalignedFireInterval() const
|
| return std::max(m_unalignedNextFireTime - monotonicallyIncreasingTime(), 0.0);
|
| }
|
|
|
| +namespace {
|
| +
|
| +class ActiveTimerInstanceTracker final : public GarbageCollectedFinalized<ActiveTimerInstanceTracker> {
|
| +public:
|
| + void add(const void* self, TimerInstanceTracker::TraceMethodTrampoline trampoline)
|
| + {
|
| + m_activeTimerInstances.add(self, trampoline);
|
| + }
|
| +
|
| + void remove(const void* self)
|
| + {
|
| + m_activeTimerInstances.remove(self);
|
| + }
|
| +
|
| + void trace(Visitor* visitor)
|
| + {
|
| + for (const auto& active : m_activeTimerInstances)
|
| + active.value(visitor, const_cast<void*>(active.key));
|
| + }
|
| +
|
| +private:
|
| + using ActiveTimerInstanceMap = HashMap<const void*, TimerInstanceTracker::TraceMethodTrampoline>;
|
| +
|
| + ActiveTimerInstanceMap m_activeTimerInstances;
|
| +};
|
| +
|
| +static ActiveTimerInstanceTracker& activeTimerInstanceTracker()
|
| +{
|
| + DEFINE_STATIC_LOCAL(Persistent<ActiveTimerInstanceTracker>, tracker, (new ActiveTimerInstanceTracker));
|
| + return *tracker;
|
| +}
|
| +
|
| +}
|
| +
|
| +void TimerInstanceTracker::add(const void* self, TraceMethodTrampoline trampoline)
|
| +{
|
| + ActiveTimerInstanceTracker& tracker = activeTimerInstanceTracker();
|
| + tracker.add(self, trampoline);
|
| +}
|
| +
|
| +void TimerInstanceTracker::remove(const void* self)
|
| +{
|
| + ActiveTimerInstanceTracker& tracker = activeTimerInstanceTracker();
|
| + tracker.remove(self);
|
| +}
|
| +
|
| } // namespace blink
|
|
|