Index: cc/scheduler/delay_based_time_source.cc |
diff --git a/cc/scheduler/delay_based_time_source.cc b/cc/scheduler/delay_based_time_source.cc |
index 1b162c9c88609e793a2794029597677af1a7adfc..412fd9a0064dfbb0c82d8b3e598b1c1ba2ff3b4f 100644 |
--- a/cc/scheduler/delay_based_time_source.cc |
+++ b/cc/scheduler/delay_based_time_source.cc |
@@ -193,9 +193,17 @@ base::TimeTicks DelayBasedTimeSource::Now() const { |
base::TimeTicks DelayBasedTimeSource::NextTickTarget(base::TimeTicks now) { |
const base::TimeDelta epsilon(base::TimeDelta::FromMicroseconds(1)); |
base::TimeDelta new_interval = next_parameters_.interval; |
- int intervals_elapsed = |
- (now - next_parameters_.tick_target + new_interval - epsilon) / |
- new_interval; |
+ |
+ // Integer division rounds towards 0, but we always want to round down the |
+ // number of intervals_elapsed, so we need the extra condition here. |
+ int intervals_elapsed; |
+ if (next_parameters_.tick_target < now) { |
jdduke (slow)
2013/08/14 22:39:37
To make this a bit easier to read, what about defi
|
+ intervals_elapsed = |
+ (now - next_parameters_.tick_target + new_interval - epsilon) / |
+ new_interval; |
+ } else { |
+ intervals_elapsed = (now - next_parameters_.tick_target) / new_interval; |
+ } |
base::TimeTicks new_tick_target = |
next_parameters_.tick_target + new_interval * intervals_elapsed; |
DCHECK(now <= new_tick_target) |