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

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

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 | « no previous file | base/test/test_mock_time_task_runner.cc » ('j') | 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 #ifndef BASE_TEST_TEST_MOCK_TIME_TASK_RUNNER_H_ 5 #ifndef BASE_TEST_TEST_MOCK_TIME_TASK_RUNNER_H_
6 #define BASE_TEST_TEST_MOCK_TIME_TASK_RUNNER_H_ 6 #define BASE_TEST_TEST_MOCK_TIME_TASK_RUNNER_H_
7 7
8 #include <queue> 8 #include <queue>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 105
106 // Called after the current mock time has been incremented so that subclasses 106 // Called after the current mock time has been incremented so that subclasses
107 // can react to the passing of time. 107 // can react to the passing of time.
108 virtual void OnAfterTimePassed(); 108 virtual void OnAfterTimePassed();
109 109
110 // Called after each task is run so that subclasses may perform additional 110 // Called after each task is run so that subclasses may perform additional
111 // activities, e.g., pump additional task runners. 111 // activities, e.g., pump additional task runners.
112 virtual void OnAfterTaskRun(); 112 virtual void OnAfterTaskRun();
113 113
114 private: 114 private:
115 struct TestOrderedPendingTask;
116
115 // Predicate that defines a strict weak temporal ordering of tasks. 117 // Predicate that defines a strict weak temporal ordering of tasks.
116 class TemporalOrder { 118 class TemporalOrder {
117 public: 119 public:
118 bool operator()(const TestPendingTask& first_task, 120 bool operator()(const TestOrderedPendingTask& first_task,
119 const TestPendingTask& second_task) const; 121 const TestOrderedPendingTask& second_task) const;
120 }; 122 };
121 123
122 typedef std::priority_queue<TestPendingTask, 124 typedef std::priority_queue<TestOrderedPendingTask,
123 std::vector<TestPendingTask>, 125 std::vector<TestOrderedPendingTask>,
124 TemporalOrder> TaskPriorityQueue; 126 TemporalOrder> TaskPriorityQueue;
125 127
126 // Core of the implementation for all flavors of fast-forward methods. Given a 128 // Core of the implementation for all flavors of fast-forward methods. Given a
127 // non-negative |max_delta|, runs all tasks with a remaining delay less than 129 // non-negative |max_delta|, runs all tasks with a remaining delay less than
128 // or equal to |max_delta|, and moves virtual time forward as needed for each 130 // or equal to |max_delta|, and moves virtual time forward as needed for each
129 // processed task. Pass in TimeDelta::Max() as |max_delta| to run all tasks. 131 // processed task. Pass in TimeDelta::Max() as |max_delta| to run all tasks.
130 void ProcessAllTasksNoLaterThan(TimeDelta max_delta); 132 void ProcessAllTasksNoLaterThan(TimeDelta max_delta);
131 133
132 // Forwards |now_ticks_| until it equals |later_ticks|, and forwards |now_| by 134 // Forwards |now_ticks_| until it equals |later_ticks|, and forwards |now_| by
133 // the same amount. Calls OnAfterTimePassed() if |later_ticks| > |now_ticks_|. 135 // the same amount. Calls OnAfterTimePassed() if |later_ticks| > |now_ticks_|.
134 // Does nothing if |later_ticks| <= |now_ticks_|. 136 // Does nothing if |later_ticks| <= |now_ticks_|.
135 void ForwardClocksUntilTickTime(TimeTicks later_ticks); 137 void ForwardClocksUntilTickTime(TimeTicks later_ticks);
136 138
137 // Returns the |next_task| to run if there is any with a running time that is 139 // Returns the |next_task| to run if there is any with a running time that is
138 // at most |reference| + |max_delta|. This additional complexity is required 140 // at most |reference| + |max_delta|. This additional complexity is required
139 // so that |max_delta| == TimeDelta::Max() can be supported. 141 // so that |max_delta| == TimeDelta::Max() can be supported.
140 bool DequeueNextTask(const TimeTicks& reference, 142 bool DequeueNextTask(const TimeTicks& reference,
141 const TimeDelta& max_delta, 143 const TimeDelta& max_delta,
142 TestPendingTask* next_task); 144 TestPendingTask* next_task);
143 145
144 ThreadChecker thread_checker_; 146 ThreadChecker thread_checker_;
145 Time now_; 147 Time now_;
146 TimeTicks now_ticks_; 148 TimeTicks now_ticks_;
147 149
148 // Temporally ordered heap of pending tasks. Must only be accessed while the 150 // Temporally ordered heap of pending tasks. Must only be accessed while the
149 // |tasks_lock_| is held. 151 // |tasks_lock_| is held.
150 TaskPriorityQueue tasks_; 152 TaskPriorityQueue tasks_;
153
154 // The ordinal to use for the next task. Must only be accessed while the
155 // |tasks_lock_| is held.
156 size_t next_task_ordinal_;
157
151 Lock tasks_lock_; 158 Lock tasks_lock_;
152 159
153 DISALLOW_COPY_AND_ASSIGN(TestMockTimeTaskRunner); 160 DISALLOW_COPY_AND_ASSIGN(TestMockTimeTaskRunner);
154 }; 161 };
155 162
156 } // namespace base 163 } // namespace base
157 164
158 #endif // BASE_TEST_TEST_MOCK_TIME_TASK_RUNNER_H_ 165 #endif // BASE_TEST_TEST_MOCK_TIME_TASK_RUNNER_H_
OLDNEW
« no previous file with comments | « no previous file | base/test/test_mock_time_task_runner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698