diff options
Diffstat (limited to 'cc/delay_based_time_source.cc')
-rw-r--r-- | cc/delay_based_time_source.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/cc/delay_based_time_source.cc b/cc/delay_based_time_source.cc index d233410..0beb72b 100644 --- a/cc/delay_based_time_source.cc +++ b/cc/delay_based_time_source.cc @@ -11,6 +11,8 @@ #include "base/debug/trace_event.h" #include "base/logging.h" +#include "base/message_loop.h" +#include "cc/thread.h" namespace cc { @@ -40,7 +42,8 @@ DelayBasedTimeSource::DelayBasedTimeSource(base::TimeDelta interval, Thread* thr , m_currentParameters(interval, base::TimeTicks()) , m_nextParameters(interval, base::TimeTicks()) , m_state(STATE_INACTIVE) - , m_timer(thread, this) + , m_thread(thread) + , m_weakFactory(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { } @@ -53,7 +56,7 @@ void DelayBasedTimeSource::setActive(bool active) TRACE_EVENT1("cc", "DelayBasedTimeSource::setActive", "active", active); if (!active) { m_state = STATE_INACTIVE; - m_timer.stop(); + m_weakFactory.InvalidateWeakPtrs(); return; } @@ -65,7 +68,7 @@ void DelayBasedTimeSource::setActive(bool active) // it runs, we use that to establish the timebase, become truly active, and // fire the first tick. m_state = STATE_STARTING; - m_timer.startOneShot(0); + m_thread->postTask(base::Bind(&DelayBasedTimeSource::onTimerFired, m_weakFactory.GetWeakPtr())); return; } @@ -222,7 +225,9 @@ void DelayBasedTimeSource::postNextTickTask(base::TimeTicks now) base::TimeDelta delay = newTickTarget - now; DCHECK(delay.InMillisecondsF() <= m_nextParameters.interval.InMillisecondsF() * (1.0 + doubleTickThreshold)); - m_timer.startOneShot(delay.InSecondsF()); + m_thread->postDelayedTask(base::Bind(&DelayBasedTimeSource::onTimerFired, + m_weakFactory.GetWeakPtr()), + delay.InMilliseconds()); m_nextParameters.tickTarget = newTickTarget; m_currentParameters = m_nextParameters; |