summaryrefslogtreecommitdiffstats
path: root/cc/delay_based_time_source.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cc/delay_based_time_source.cc')
-rw-r--r--cc/delay_based_time_source.cc13
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;