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

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

Issue 2330303003: Disallow single-threaded SequencedWorkerPools. (Closed)
Patch Set: merge up to r419443 Created 4 years, 3 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/threading/sequenced_worker_pool.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 (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 #ifndef BASE_THREADING_SEQUENCED_WORKER_POOL_H_ 5 #ifndef BASE_THREADING_SEQUENCED_WORKER_POOL_H_
6 #define BASE_THREADING_SEQUENCED_WORKER_POOL_H_ 6 #define BASE_THREADING_SEQUENCED_WORKER_POOL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <cstddef> 10 #include <cstddef>
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 static SequenceToken GetSequenceToken(); 173 static SequenceToken GetSequenceToken();
174 174
175 // Starts redirecting tasks posted to this process' SequencedWorkerPools to 175 // Starts redirecting tasks posted to this process' SequencedWorkerPools to
176 // the registered TaskScheduler. This cannot be called after a task has been 176 // the registered TaskScheduler. This cannot be called after a task has been
177 // posted to a SequencedWorkerPool. This is not thread-safe; proper 177 // posted to a SequencedWorkerPool. This is not thread-safe; proper
178 // synchronization is required to use any SequencedWorkerPool method after 178 // synchronization is required to use any SequencedWorkerPool method after
179 // calling this. There must be a registered TaskScheduler when this is called. 179 // calling this. There must be a registered TaskScheduler when this is called.
180 // Ideally, call this on the main thread of a process, before any other 180 // Ideally, call this on the main thread of a process, before any other
181 // threads are created and before any tasks are posted to that process' 181 // threads are created and before any tasks are posted to that process'
182 // SequencedWorkerPools. 182 // SequencedWorkerPools.
183 // Note: SequencedWorkerPool instances with |max_threads == 1| will be special
184 // cased to send all of their work as ExecutionMode::SINGLE_THREADED.
185 // TODO(gab): Remove this if http://crbug.com/622400 fails 183 // TODO(gab): Remove this if http://crbug.com/622400 fails
186 // (SequencedWorkerPool will be phased out completely otherwise). 184 // (SequencedWorkerPool will be phased out completely otherwise).
187 static void RedirectToTaskSchedulerForProcess(); 185 static void RedirectToTaskSchedulerForProcess();
188 186
189 // Stops redirecting tasks posted to this process' SequencedWorkerPools to the 187 // Stops redirecting tasks posted to this process' SequencedWorkerPools to the
190 // registered TaskScheduler and allows RedirectToTaskSchedulerForProcess() to 188 // registered TaskScheduler and allows RedirectToTaskSchedulerForProcess() to
191 // be called even if tasks have already posted to a SequencedWorkerPool in 189 // be called even if tasks have already posted to a SequencedWorkerPool in
192 // this process. Calling this while there are active SequencedWorkerPools is 190 // this process. Calling this while there are active SequencedWorkerPools is
193 // not supported. This is not thread-safe; proper synchronization is required 191 // not supported. This is not thread-safe; proper synchronization is required
194 // to use any SequencedWorkerPool method after calling this. 192 // to use any SequencedWorkerPool method after calling this.
195 static void ResetRedirectToTaskSchedulerForProcessForTesting(); 193 static void ResetRedirectToTaskSchedulerForProcessForTesting();
196 194
197 // When constructing a SequencedWorkerPool, there must be a 195 // When constructing a SequencedWorkerPool, there must be a
198 // ThreadTaskRunnerHandle on the current thread unless you plan to 196 // ThreadTaskRunnerHandle on the current thread unless you plan to
199 // deliberately leak it. 197 // deliberately leak it.
200 198
201 // Pass the maximum number of threads (they will be lazily created as needed) 199 // Constructs a SequencedWorkerPool which will lazily create up to
202 // and a prefix for the thread name to aid in debugging. |task_priority| will 200 // |max_threads| and a prefix for the thread name to aid in debugging.
203 // be used to hint base::TaskScheduler for an experiment in which all 201 // |max_threads| must be greater than 1. |task_priority| will be used to hint
204 // SequencedWorkerPool tasks will be redirected to it in processes where a 202 // base::TaskScheduler for an experiment in which all SequencedWorkerPool
205 // base::TaskScheduler was instantiated. 203 // tasks will be redirected to it in processes where a base::TaskScheduler was
204 // instantiated.
206 SequencedWorkerPool(size_t max_threads, 205 SequencedWorkerPool(size_t max_threads,
207 const std::string& thread_name_prefix, 206 const std::string& thread_name_prefix,
208 base::TaskPriority task_priority); 207 base::TaskPriority task_priority);
209 208
210 // Like above, but with |observer| for testing. Does not take ownership of 209 // Like above, but with |observer| for testing. Does not take ownership of
211 // |observer|. 210 // |observer|.
212 SequencedWorkerPool(size_t max_threads, 211 SequencedWorkerPool(size_t max_threads,
213 const std::string& thread_name_prefix, 212 const std::string& thread_name_prefix,
214 base::TaskPriority task_priority, 213 base::TaskPriority task_priority,
215 TestingObserver* observer); 214 TestingObserver* observer);
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 // Avoid pulling in too many headers by putting (almost) everything 389 // Avoid pulling in too many headers by putting (almost) everything
391 // into |inner_|. 390 // into |inner_|.
392 const std::unique_ptr<Inner> inner_; 391 const std::unique_ptr<Inner> inner_;
393 392
394 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPool); 393 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPool);
395 }; 394 };
396 395
397 } // namespace base 396 } // namespace base
398 397
399 #endif // BASE_THREADING_SEQUENCED_WORKER_POOL_H_ 398 #endif // BASE_THREADING_SEQUENCED_WORKER_POOL_H_
OLDNEW
« no previous file with comments | « no previous file | base/threading/sequenced_worker_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698