Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: base/test/test_mock_time_task_runner.cc

Issue 1051873003: Make TestMockTimeTaskRunner run tasks with the same delay in the order they were posted. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/test/test_mock_time_task_runner.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "base/test/test_mock_time_task_runner.h" 5 #include "base/test/test_mock_time_task_runner.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/time/clock.h" 9 #include "base/time/clock.h"
10 #include "base/time/tick_clock.h" 10 #include "base/time/tick_clock.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 MockClock::MockClock(scoped_refptr<const TestMockTimeTaskRunner> task_runner) 60 MockClock::MockClock(scoped_refptr<const TestMockTimeTaskRunner> task_runner)
61 : task_runner_(task_runner) { 61 : task_runner_(task_runner) {
62 } 62 }
63 63
64 Time MockClock::Now() { 64 Time MockClock::Now() {
65 return task_runner_->Now(); 65 return task_runner_->Now();
66 } 66 }
67 67
68 } // namespace 68 } // namespace
69 69
70 // TestMockTimeTaskRunner::TestOrderedPendingTask -----------------------------
71
72 // Subclass of TestPendingTask which has a strictly monotonically increasing ID
73 // for every task, so that tasks posted with the same 'time to run' can be run
74 // in the order of being posted.
75 struct TestMockTimeTaskRunner::TestOrderedPendingTask
76 : public base::TestPendingTask {
77 TestOrderedPendingTask();
78 TestOrderedPendingTask(const tracked_objects::Location& location,
79 const Closure& task,
80 TimeTicks post_time,
81 TimeDelta delay,
82 size_t ordinal,
83 TestNestability nestability);
84 ~TestOrderedPendingTask();
85
86 size_t ordinal;
87 };
88
89 TestMockTimeTaskRunner::TestOrderedPendingTask::TestOrderedPendingTask()
90 : ordinal(0) {
91 }
92
93 TestMockTimeTaskRunner::TestOrderedPendingTask::TestOrderedPendingTask(
94 const tracked_objects::Location& location,
95 const Closure& task,
96 TimeTicks post_time,
97 TimeDelta delay,
98 size_t ordinal,
99 TestNestability nestability)
100 : base::TestPendingTask(location, task, post_time, delay, nestability),
101 ordinal(ordinal) {
102 }
103
104 TestMockTimeTaskRunner::TestOrderedPendingTask::~TestOrderedPendingTask() {
105 }
106
70 // TestMockTimeTaskRunner ----------------------------------------------------- 107 // TestMockTimeTaskRunner -----------------------------------------------------
71 108
72 bool TestMockTimeTaskRunner::TemporalOrder::operator()( 109 bool TestMockTimeTaskRunner::TemporalOrder::operator()(
73 const TestPendingTask& first_task, 110 const TestOrderedPendingTask& first_task,
74 const TestPendingTask& second_task) const { 111 const TestOrderedPendingTask& second_task) const {
112 if (first_task.GetTimeToRun() == second_task.GetTimeToRun())
113 return first_task.ordinal > second_task.ordinal;
75 return first_task.GetTimeToRun() > second_task.GetTimeToRun(); 114 return first_task.GetTimeToRun() > second_task.GetTimeToRun();
76 } 115 }
77 116
78 TestMockTimeTaskRunner::TestMockTimeTaskRunner() : now_(Time::UnixEpoch()) { 117 TestMockTimeTaskRunner::TestMockTimeTaskRunner()
118 : now_(Time::UnixEpoch()), next_task_ordinal_(0) {
79 } 119 }
80 120
81 TestMockTimeTaskRunner::~TestMockTimeTaskRunner() { 121 TestMockTimeTaskRunner::~TestMockTimeTaskRunner() {
82 } 122 }
83 123
84 void TestMockTimeTaskRunner::FastForwardBy(TimeDelta delta) { 124 void TestMockTimeTaskRunner::FastForwardBy(TimeDelta delta) {
85 DCHECK(thread_checker_.CalledOnValidThread()); 125 DCHECK(thread_checker_.CalledOnValidThread());
86 DCHECK_GE(delta, TimeDelta()); 126 DCHECK_GE(delta, TimeDelta());
87 127
88 const TimeTicks original_now_ticks = now_ticks_; 128 const TimeTicks original_now_ticks = now_ticks_;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 185
146 bool TestMockTimeTaskRunner::RunsTasksOnCurrentThread() const { 186 bool TestMockTimeTaskRunner::RunsTasksOnCurrentThread() const {
147 return thread_checker_.CalledOnValidThread(); 187 return thread_checker_.CalledOnValidThread();
148 } 188 }
149 189
150 bool TestMockTimeTaskRunner::PostDelayedTask( 190 bool TestMockTimeTaskRunner::PostDelayedTask(
151 const tracked_objects::Location& from_here, 191 const tracked_objects::Location& from_here,
152 const Closure& task, 192 const Closure& task,
153 TimeDelta delay) { 193 TimeDelta delay) {
154 AutoLock scoped_lock(tasks_lock_); 194 AutoLock scoped_lock(tasks_lock_);
155 tasks_.push(TestPendingTask(from_here, task, now_ticks_, delay, 195 tasks_.push(TestOrderedPendingTask(from_here, task, now_ticks_, delay,
156 TestPendingTask::NESTABLE)); 196 next_task_ordinal_++,
197 TestPendingTask::NESTABLE));
157 return true; 198 return true;
158 } 199 }
159 200
160 bool TestMockTimeTaskRunner::PostNonNestableDelayedTask( 201 bool TestMockTimeTaskRunner::PostNonNestableDelayedTask(
161 const tracked_objects::Location& from_here, 202 const tracked_objects::Location& from_here,
162 const Closure& task, 203 const Closure& task,
163 TimeDelta delay) { 204 TimeDelta delay) {
164 return PostDelayedTask(from_here, task, delay); 205 return PostDelayedTask(from_here, task, delay);
165 } 206 }
166 207
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 if (!tasks_.empty() && 254 if (!tasks_.empty() &&
214 (tasks_.top().GetTimeToRun() - reference) <= max_delta) { 255 (tasks_.top().GetTimeToRun() - reference) <= max_delta) {
215 *next_task = tasks_.top(); 256 *next_task = tasks_.top();
216 tasks_.pop(); 257 tasks_.pop();
217 return true; 258 return true;
218 } 259 }
219 return false; 260 return false;
220 } 261 }
221 262
222 } // namespace base 263 } // namespace base
OLDNEW
« no previous file with comments | « base/test/test_mock_time_task_runner.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698