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

Side by Side Diff: base/threading/sequenced_worker_pool.cc

Issue 9703053: Remove old Sleep and PostDelayedTask interfaces that use int ms instead of TimeDelta. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase onto master. Created 8 years, 6 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/threading/sequenced_worker_pool.h" 5 #include "base/threading/sequenced_worker_pool.h"
6 6
7 #include <list> 7 #include <list>
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner). 55 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner).
56 class SequencedWorkerPoolTaskRunner : public TaskRunner { 56 class SequencedWorkerPoolTaskRunner : public TaskRunner {
57 public: 57 public:
58 SequencedWorkerPoolTaskRunner( 58 SequencedWorkerPoolTaskRunner(
59 const scoped_refptr<SequencedWorkerPool>& pool, 59 const scoped_refptr<SequencedWorkerPool>& pool,
60 SequencedWorkerPool::WorkerShutdown shutdown_behavior); 60 SequencedWorkerPool::WorkerShutdown shutdown_behavior);
61 61
62 // TaskRunner implementation 62 // TaskRunner implementation
63 virtual bool PostDelayedTask(const tracked_objects::Location& from_here, 63 virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
64 const Closure& task, 64 const Closure& task,
65 int64 delay_ms) OVERRIDE;
66 virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
67 const Closure& task,
68 TimeDelta delay) OVERRIDE; 65 TimeDelta delay) OVERRIDE;
69 virtual bool RunsTasksOnCurrentThread() const OVERRIDE; 66 virtual bool RunsTasksOnCurrentThread() const OVERRIDE;
70 67
71 private: 68 private:
72 virtual ~SequencedWorkerPoolTaskRunner(); 69 virtual ~SequencedWorkerPoolTaskRunner();
73 70
74 // Helper function for posting a delayed task. Asserts that the delay is 71 // Helper function for posting a delayed task. Asserts that the delay is
75 // zero because non-zero delays are not yet supported. 72 // zero because non-zero delays are not yet supported.
76 bool PostDelayedTaskAssertZeroDelay( 73 bool PostDelayedTaskAssertZeroDelay(
77 const tracked_objects::Location& from_here, 74 const tracked_objects::Location& from_here,
78 const Closure& task, 75 const Closure& task,
79 int64 delay_ms);
80 bool PostDelayedTaskAssertZeroDelay(
81 const tracked_objects::Location& from_here,
82 const Closure& task,
83 TimeDelta delay); 76 TimeDelta delay);
84 77
85 const scoped_refptr<SequencedWorkerPool> pool_; 78 const scoped_refptr<SequencedWorkerPool> pool_;
86 79
87 const SequencedWorkerPool::WorkerShutdown shutdown_behavior_; 80 const SequencedWorkerPool::WorkerShutdown shutdown_behavior_;
88 81
89 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPoolTaskRunner); 82 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPoolTaskRunner);
90 }; 83 };
91 84
92 SequencedWorkerPoolTaskRunner::SequencedWorkerPoolTaskRunner( 85 SequencedWorkerPoolTaskRunner::SequencedWorkerPoolTaskRunner(
93 const scoped_refptr<SequencedWorkerPool>& pool, 86 const scoped_refptr<SequencedWorkerPool>& pool,
94 SequencedWorkerPool::WorkerShutdown shutdown_behavior) 87 SequencedWorkerPool::WorkerShutdown shutdown_behavior)
95 : pool_(pool), 88 : pool_(pool),
96 shutdown_behavior_(shutdown_behavior) { 89 shutdown_behavior_(shutdown_behavior) {
97 } 90 }
98 91
99 SequencedWorkerPoolTaskRunner::~SequencedWorkerPoolTaskRunner() { 92 SequencedWorkerPoolTaskRunner::~SequencedWorkerPoolTaskRunner() {
100 } 93 }
101 94
102 bool SequencedWorkerPoolTaskRunner::PostDelayedTask( 95 bool SequencedWorkerPoolTaskRunner::PostDelayedTask(
103 const tracked_objects::Location& from_here, 96 const tracked_objects::Location& from_here,
104 const Closure& task, 97 const Closure& task,
105 int64 delay_ms) {
106 return PostDelayedTaskAssertZeroDelay(from_here, task, delay_ms);
107 }
108
109 bool SequencedWorkerPoolTaskRunner::PostDelayedTask(
110 const tracked_objects::Location& from_here,
111 const Closure& task,
112 TimeDelta delay) { 98 TimeDelta delay) {
113 return PostDelayedTaskAssertZeroDelay(from_here, task, delay); 99 return PostDelayedTaskAssertZeroDelay(from_here, task, delay);
114 } 100 }
115 101
116 bool SequencedWorkerPoolTaskRunner::RunsTasksOnCurrentThread() const { 102 bool SequencedWorkerPoolTaskRunner::RunsTasksOnCurrentThread() const {
117 return pool_->RunsTasksOnCurrentThread(); 103 return pool_->RunsTasksOnCurrentThread();
118 } 104 }
119 105
120 bool SequencedWorkerPoolTaskRunner::PostDelayedTaskAssertZeroDelay( 106 bool SequencedWorkerPoolTaskRunner::PostDelayedTaskAssertZeroDelay(
121 const tracked_objects::Location& from_here, 107 const tracked_objects::Location& from_here,
122 const Closure& task, 108 const Closure& task,
123 int64 delay_ms) { 109 TimeDelta delay) {
124 // TODO(francoisk777@gmail.com): Change the following two statements once 110 // TODO(francoisk777@gmail.com): Change the following two statements once
125 // SequencedWorkerPool supports non-zero delays. 111 // SequencedWorkerPool supports non-zero delays.
126 DCHECK_EQ(delay_ms, 0) 112 DCHECK_EQ(delay.InMillisecondsRoundedUp(), 0)
127 << "SequencedWorkerPoolTaskRunner does not yet support non-zero delays"; 113 << "SequencedWorkerPoolTaskRunner does not yet support non-zero delays";
128 return pool_->PostWorkerTaskWithShutdownBehavior( 114 return pool_->PostWorkerTaskWithShutdownBehavior(
129 from_here, task, shutdown_behavior_); 115 from_here, task, shutdown_behavior_);
130 } 116 }
131 117
132 bool SequencedWorkerPoolTaskRunner::PostDelayedTaskAssertZeroDelay(
133 const tracked_objects::Location& from_here,
134 const Closure& task,
135 TimeDelta delay) {
136 return PostDelayedTaskAssertZeroDelay(from_here,
137 task,
138 delay.InMillisecondsRoundedUp());
139 }
140
141 // SequencedWorkerPoolSequencedTaskRunner ------------------------------------ 118 // SequencedWorkerPoolSequencedTaskRunner ------------------------------------
142 // A SequencedTaskRunner which posts tasks to a SequencedWorkerPool with a 119 // A SequencedTaskRunner which posts tasks to a SequencedWorkerPool with a
143 // fixed sequence token. 120 // fixed sequence token.
144 // 121 //
145 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner). 122 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner).
146 class SequencedWorkerPoolSequencedTaskRunner : public SequencedTaskRunner { 123 class SequencedWorkerPoolSequencedTaskRunner : public SequencedTaskRunner {
147 public: 124 public:
148 SequencedWorkerPoolSequencedTaskRunner( 125 SequencedWorkerPoolSequencedTaskRunner(
149 const scoped_refptr<SequencedWorkerPool>& pool, 126 const scoped_refptr<SequencedWorkerPool>& pool,
150 SequencedWorkerPool::SequenceToken token, 127 SequencedWorkerPool::SequenceToken token,
151 SequencedWorkerPool::WorkerShutdown shutdown_behavior); 128 SequencedWorkerPool::WorkerShutdown shutdown_behavior);
152 129
153 // TaskRunner implementation 130 // TaskRunner implementation
154 virtual bool PostDelayedTask(const tracked_objects::Location& from_here, 131 virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
155 const Closure& task, 132 const Closure& task,
156 int64 delay_ms) OVERRIDE;
157 virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
158 const Closure& task,
159 TimeDelta delay) OVERRIDE; 133 TimeDelta delay) OVERRIDE;
160 virtual bool RunsTasksOnCurrentThread() const OVERRIDE; 134 virtual bool RunsTasksOnCurrentThread() const OVERRIDE;
161 135
162 // SequencedTaskRunner implementation 136 // SequencedTaskRunner implementation
163 virtual bool PostNonNestableDelayedTask( 137 virtual bool PostNonNestableDelayedTask(
164 const tracked_objects::Location& from_here, 138 const tracked_objects::Location& from_here,
165 const Closure& task, 139 const Closure& task,
166 int64 delay_ms) OVERRIDE;
167 virtual bool PostNonNestableDelayedTask(
168 const tracked_objects::Location& from_here,
169 const Closure& task,
170 TimeDelta delay) OVERRIDE; 140 TimeDelta delay) OVERRIDE;
171 141
172 private: 142 private:
173 virtual ~SequencedWorkerPoolSequencedTaskRunner(); 143 virtual ~SequencedWorkerPoolSequencedTaskRunner();
174 144
175 // Helper function for posting a delayed task. Asserts that the delay is 145 // Helper function for posting a delayed task. Asserts that the delay is
176 // zero because non-zero delays are not yet supported. 146 // zero because non-zero delays are not yet supported.
177 bool PostDelayedTaskAssertZeroDelay( 147 bool PostDelayedTaskAssertZeroDelay(
178 const tracked_objects::Location& from_here, 148 const tracked_objects::Location& from_here,
179 const Closure& task, 149 const Closure& task,
180 int64 delay_ms);
181 bool PostDelayedTaskAssertZeroDelay(
182 const tracked_objects::Location& from_here,
183 const Closure& task,
184 TimeDelta delay); 150 TimeDelta delay);
185 151
186 const scoped_refptr<SequencedWorkerPool> pool_; 152 const scoped_refptr<SequencedWorkerPool> pool_;
187 153
188 const SequencedWorkerPool::SequenceToken token_; 154 const SequencedWorkerPool::SequenceToken token_;
189 155
190 const SequencedWorkerPool::WorkerShutdown shutdown_behavior_; 156 const SequencedWorkerPool::WorkerShutdown shutdown_behavior_;
191 157
192 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPoolSequencedTaskRunner); 158 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPoolSequencedTaskRunner);
193 }; 159 };
194 160
195 SequencedWorkerPoolSequencedTaskRunner::SequencedWorkerPoolSequencedTaskRunner( 161 SequencedWorkerPoolSequencedTaskRunner::SequencedWorkerPoolSequencedTaskRunner(
196 const scoped_refptr<SequencedWorkerPool>& pool, 162 const scoped_refptr<SequencedWorkerPool>& pool,
197 SequencedWorkerPool::SequenceToken token, 163 SequencedWorkerPool::SequenceToken token,
198 SequencedWorkerPool::WorkerShutdown shutdown_behavior) 164 SequencedWorkerPool::WorkerShutdown shutdown_behavior)
199 : pool_(pool), 165 : pool_(pool),
200 token_(token), 166 token_(token),
201 shutdown_behavior_(shutdown_behavior) { 167 shutdown_behavior_(shutdown_behavior) {
202 } 168 }
203 169
204 SequencedWorkerPoolSequencedTaskRunner:: 170 SequencedWorkerPoolSequencedTaskRunner::
205 ~SequencedWorkerPoolSequencedTaskRunner() { 171 ~SequencedWorkerPoolSequencedTaskRunner() {
206 } 172 }
207 173
208 bool SequencedWorkerPoolSequencedTaskRunner::PostDelayedTask( 174 bool SequencedWorkerPoolSequencedTaskRunner::PostDelayedTask(
209 const tracked_objects::Location& from_here, 175 const tracked_objects::Location& from_here,
210 const Closure& task, 176 const Closure& task,
211 int64 delay_ms) {
212 return PostDelayedTaskAssertZeroDelay(from_here, task, delay_ms);
213 }
214
215 bool SequencedWorkerPoolSequencedTaskRunner::PostDelayedTask(
216 const tracked_objects::Location& from_here,
217 const Closure& task,
218 TimeDelta delay) { 177 TimeDelta delay) {
219 return PostDelayedTaskAssertZeroDelay(from_here, task, delay); 178 return PostDelayedTaskAssertZeroDelay(from_here, task, delay);
220 } 179 }
221 180
222 bool SequencedWorkerPoolSequencedTaskRunner::RunsTasksOnCurrentThread() const { 181 bool SequencedWorkerPoolSequencedTaskRunner::RunsTasksOnCurrentThread() const {
223 return pool_->IsRunningSequenceOnCurrentThread(token_); 182 return pool_->IsRunningSequenceOnCurrentThread(token_);
224 } 183 }
225 184
226 bool SequencedWorkerPoolSequencedTaskRunner::PostNonNestableDelayedTask( 185 bool SequencedWorkerPoolSequencedTaskRunner::PostNonNestableDelayedTask(
227 const tracked_objects::Location& from_here, 186 const tracked_objects::Location& from_here,
228 const Closure& task, 187 const Closure& task,
229 int64 delay_ms) {
230 return PostDelayedTaskAssertZeroDelay(from_here, task, delay_ms);
231 }
232
233 bool SequencedWorkerPoolSequencedTaskRunner::PostNonNestableDelayedTask(
234 const tracked_objects::Location& from_here,
235 const Closure& task,
236 TimeDelta delay) { 188 TimeDelta delay) {
237 return PostDelayedTaskAssertZeroDelay(from_here, task, delay); 189 return PostDelayedTaskAssertZeroDelay(from_here, task, delay);
238 } 190 }
239 191
240 bool SequencedWorkerPoolSequencedTaskRunner::PostDelayedTaskAssertZeroDelay( 192 bool SequencedWorkerPoolSequencedTaskRunner::PostDelayedTaskAssertZeroDelay(
241 const tracked_objects::Location& from_here, 193 const tracked_objects::Location& from_here,
242 const Closure& task, 194 const Closure& task,
243 int64 delay_ms) { 195 TimeDelta delay) {
244 // TODO(francoisk777@gmail.com): Change the following two statements once 196 // TODO(francoisk777@gmail.com): Change the following two statements once
245 // SequencedWorkerPool supports non-zero delays. 197 // SequencedWorkerPool supports non-zero delays.
246 DCHECK_EQ(delay_ms, 0) 198 DCHECK_EQ(delay.InMillisecondsRoundedUp(), 0)
247 << "SequencedWorkerPoolSequencedTaskRunner does not yet support non-zero" 199 << "SequencedWorkerPoolSequencedTaskRunner does not yet support non-zero"
248 " delays"; 200 " delays";
249 return pool_->PostSequencedWorkerTaskWithShutdownBehavior( 201 return pool_->PostSequencedWorkerTaskWithShutdownBehavior(
250 token_, from_here, task, shutdown_behavior_); 202 token_, from_here, task, shutdown_behavior_);
251 } 203 }
252 204
253 bool SequencedWorkerPoolSequencedTaskRunner::PostDelayedTaskAssertZeroDelay(
254 const tracked_objects::Location& from_here,
255 const Closure& task,
256 TimeDelta delay) {
257 return PostDelayedTaskAssertZeroDelay(from_here,
258 task,
259 delay.InMillisecondsRoundedUp());
260 }
261
262 } // namespace 205 } // namespace
263 206
264 // Worker --------------------------------------------------------------------- 207 // Worker ---------------------------------------------------------------------
265 208
266 class SequencedWorkerPool::Worker : public SimpleThread { 209 class SequencedWorkerPool::Worker : public SimpleThread {
267 public: 210 public:
268 // Hold a (cyclic) ref to |worker_pool|, since we want to keep it 211 // Hold a (cyclic) ref to |worker_pool|, since we want to keep it
269 // around as long as we are running. 212 // around as long as we are running.
270 Worker(const scoped_refptr<SequencedWorkerPool>& worker_pool, 213 Worker(const scoped_refptr<SequencedWorkerPool>& worker_pool,
271 int thread_number, 214 int thread_number,
(...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 const tracked_objects::Location& from_here, 969 const tracked_objects::Location& from_here,
1027 const Closure& task, 970 const Closure& task,
1028 WorkerShutdown shutdown_behavior) { 971 WorkerShutdown shutdown_behavior) {
1029 return inner_->PostTask(NULL, sequence_token, shutdown_behavior, 972 return inner_->PostTask(NULL, sequence_token, shutdown_behavior,
1030 from_here, task); 973 from_here, task);
1031 } 974 }
1032 975
1033 bool SequencedWorkerPool::PostDelayedTask( 976 bool SequencedWorkerPool::PostDelayedTask(
1034 const tracked_objects::Location& from_here, 977 const tracked_objects::Location& from_here,
1035 const Closure& task, 978 const Closure& task,
1036 int64 delay_ms) {
1037 // TODO(akalin): Add support for non-zero delays.
1038 DCHECK_EQ(delay_ms, 0);
1039 return PostWorkerTask(from_here, task);
1040 }
1041
1042 bool SequencedWorkerPool::PostDelayedTask(
1043 const tracked_objects::Location& from_here,
1044 const Closure& task,
1045 TimeDelta delay) { 979 TimeDelta delay) {
1046 // TODO(akalin): Add support for non-zero delays. 980 // TODO(akalin): Add support for non-zero delays.
1047 DCHECK_EQ(delay.InMillisecondsRoundedUp(), 0); 981 DCHECK_EQ(delay.InMillisecondsRoundedUp(), 0);
1048 return PostWorkerTask(from_here, task); 982 return PostWorkerTask(from_here, task);
1049 } 983 }
1050 984
1051 bool SequencedWorkerPool::RunsTasksOnCurrentThread() const { 985 bool SequencedWorkerPool::RunsTasksOnCurrentThread() const {
1052 return inner_->RunsTasksOnCurrentThread(); 986 return inner_->RunsTasksOnCurrentThread();
1053 } 987 }
1054 988
1055 bool SequencedWorkerPool::IsRunningSequenceOnCurrentThread( 989 bool SequencedWorkerPool::IsRunningSequenceOnCurrentThread(
1056 SequenceToken sequence_token) const { 990 SequenceToken sequence_token) const {
1057 return inner_->IsRunningSequenceOnCurrentThread(sequence_token); 991 return inner_->IsRunningSequenceOnCurrentThread(sequence_token);
1058 } 992 }
1059 993
1060 void SequencedWorkerPool::FlushForTesting() { 994 void SequencedWorkerPool::FlushForTesting() {
1061 inner_->FlushForTesting(); 995 inner_->FlushForTesting();
1062 } 996 }
1063 997
1064 void SequencedWorkerPool::SignalHasWorkForTesting() { 998 void SequencedWorkerPool::SignalHasWorkForTesting() {
1065 inner_->SignalHasWorkForTesting(); 999 inner_->SignalHasWorkForTesting();
1066 } 1000 }
1067 1001
1068 void SequencedWorkerPool::Shutdown() { 1002 void SequencedWorkerPool::Shutdown() {
1069 DCHECK(constructor_message_loop_->BelongsToCurrentThread()); 1003 DCHECK(constructor_message_loop_->BelongsToCurrentThread());
1070 inner_->Shutdown(); 1004 inner_->Shutdown();
1071 } 1005 }
1072 1006
1073 } // namespace base 1007 } // namespace base
OLDNEW
« no previous file with comments | « base/threading/sequenced_worker_pool.h ('k') | base/threading/sequenced_worker_pool_task_runner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698