Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/scheduler/delay_based_time_source.h" | 5 #include "cc/scheduler/delay_based_time_source.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 186 // This brings us back to 18+15 = 33, which was where we would have been if the | 186 // This brings us back to 18+15 = 33, which was where we would have been if the |
| 187 // task hadn't been late. | 187 // task hadn't been late. |
| 188 // | 188 // |
| 189 // For the really late delay, we we move to the next logical tick. The timebase | 189 // For the really late delay, we we move to the next logical tick. The timebase |
| 190 // is not reset. | 190 // is not reset. |
| 191 // now=37 tick_target=16.667 new_target=50.000 --> | 191 // now=37 tick_target=16.667 new_target=50.000 --> |
| 192 // tick(), PostDelayedTask(floor(50.000-37)) --> PostDelayedTask(13) | 192 // tick(), PostDelayedTask(floor(50.000-37)) --> PostDelayedTask(13) |
| 193 base::TimeTicks DelayBasedTimeSource::NextTickTarget(base::TimeTicks now) { | 193 base::TimeTicks DelayBasedTimeSource::NextTickTarget(base::TimeTicks now) { |
| 194 const base::TimeDelta epsilon(base::TimeDelta::FromMicroseconds(1)); | 194 const base::TimeDelta epsilon(base::TimeDelta::FromMicroseconds(1)); |
| 195 base::TimeDelta new_interval = next_parameters_.interval; | 195 base::TimeDelta new_interval = next_parameters_.interval; |
| 196 int intervals_elapsed = | 196 |
| 197 (now - next_parameters_.tick_target + new_interval - epsilon) / | 197 // Integer division rounds towards 0, but we always want to round down the |
| 198 new_interval; | 198 // number of intervals_elapsed, so we need the extra condition here. |
| 199 int intervals_elapsed; | |
| 200 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
| |
| 201 intervals_elapsed = | |
| 202 (now - next_parameters_.tick_target + new_interval - epsilon) / | |
| 203 new_interval; | |
| 204 } else { | |
| 205 intervals_elapsed = (now - next_parameters_.tick_target) / new_interval; | |
| 206 } | |
| 199 base::TimeTicks new_tick_target = | 207 base::TimeTicks new_tick_target = |
| 200 next_parameters_.tick_target + new_interval * intervals_elapsed; | 208 next_parameters_.tick_target + new_interval * intervals_elapsed; |
| 201 DCHECK(now <= new_tick_target) | 209 DCHECK(now <= new_tick_target) |
| 202 << "now = " << now.ToInternalValue() | 210 << "now = " << now.ToInternalValue() |
| 203 << "; new_tick_target = " << new_tick_target.ToInternalValue() | 211 << "; new_tick_target = " << new_tick_target.ToInternalValue() |
| 204 << "; new_interval = " << new_interval.InMicroseconds() | 212 << "; new_interval = " << new_interval.InMicroseconds() |
| 205 << "; tick_target = " << next_parameters_.tick_target.ToInternalValue() | 213 << "; tick_target = " << next_parameters_.tick_target.ToInternalValue() |
| 206 << "; intervals_elapsed = " << intervals_elapsed; | 214 << "; intervals_elapsed = " << intervals_elapsed; |
| 207 | 215 |
| 208 // Avoid double ticks when: | 216 // Avoid double ticks when: |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 224 task_runner_->PostDelayedTask(FROM_HERE, | 232 task_runner_->PostDelayedTask(FROM_HERE, |
| 225 base::Bind(&DelayBasedTimeSource::OnTimerFired, | 233 base::Bind(&DelayBasedTimeSource::OnTimerFired, |
| 226 weak_factory_.GetWeakPtr()), | 234 weak_factory_.GetWeakPtr()), |
| 227 delay); | 235 delay); |
| 228 | 236 |
| 229 next_parameters_.tick_target = new_tick_target; | 237 next_parameters_.tick_target = new_tick_target; |
| 230 current_parameters_ = next_parameters_; | 238 current_parameters_ = next_parameters_; |
| 231 } | 239 } |
| 232 | 240 |
| 233 } // namespace cc | 241 } // namespace cc |
| OLD | NEW |