| Index: cc/test/ordered_simple_task_runner.cc
|
| diff --git a/cc/test/ordered_simple_task_runner.cc b/cc/test/ordered_simple_task_runner.cc
|
| index 9dc4bbcd2dacb680d586699576a632e286aab037..01d282d7d8a4daf4901f3c485a801813a3503e3a 100644
|
| --- a/cc/test/ordered_simple_task_runner.cc
|
| +++ b/cc/test/ordered_simple_task_runner.cc
|
| @@ -128,15 +128,19 @@ bool OrderedSimpleTaskRunner::RunsTasksOnCurrentThread() const {
|
| return true;
|
| }
|
|
|
| -size_t OrderedSimpleTaskRunner::NumPendingTasks() const {
|
| +size_t OrderedSimpleTaskRunner::NumPendingTasks() {
|
| + RemovePendingCancelledTasks();
|
| return pending_tasks_.size();
|
| }
|
|
|
| -bool OrderedSimpleTaskRunner::HasPendingTasks() const {
|
| +bool OrderedSimpleTaskRunner::HasPendingTasks() {
|
| + RemovePendingCancelledTasks();
|
| return pending_tasks_.size() > 0;
|
| }
|
|
|
| base::TimeTicks OrderedSimpleTaskRunner::NextTaskTime() {
|
| + RemovePendingCancelledTasks();
|
| +
|
| if (pending_tasks_.size() <= 0) {
|
| return AbsoluteMaxNow();
|
| }
|
| @@ -146,6 +150,7 @@ base::TimeTicks OrderedSimpleTaskRunner::NextTaskTime() {
|
|
|
| base::TimeDelta OrderedSimpleTaskRunner::DelayToNextTaskTime() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| + RemovePendingCancelledTasks();
|
|
|
| if (pending_tasks_.size() <= 0) {
|
| return AbsoluteMaxNow() - base::TimeTicks();
|
| @@ -198,6 +203,11 @@ bool OrderedSimpleTaskRunner::RunTasksWhile(
|
| }
|
|
|
| while (pending_tasks_.size() > 0) {
|
| + // Skip canceled tasks.
|
| + if (pending_tasks_.begin()->task.IsCancelled()) {
|
| + pending_tasks_.erase(pending_tasks_.begin());
|
| + continue;
|
| + }
|
| // Check if we should continue to run pending tasks.
|
| bool condition_success = true;
|
| for (std::vector<base::Callback<bool(void)>>::iterator it =
|
| @@ -344,4 +354,12 @@ bool OrderedSimpleTaskRunner::AdvanceNowCallback() {
|
| return true;
|
| }
|
|
|
| +void OrderedSimpleTaskRunner::RemovePendingCancelledTasks() {
|
| + // Remove canceled tasks.
|
| + while (!pending_tasks_.empty() &&
|
| + pending_tasks_.begin()->task.IsCancelled()) {
|
| + pending_tasks_.erase(pending_tasks_.begin());
|
| + }
|
| +}
|
| +
|
| } // namespace cc
|
|
|