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

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

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