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

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

Issue 1414793009: Allow SequencedTaskRunnerHandle::Get() while running unsequenced tasks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 5 years, 1 month 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 #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 <cstddef> 8 #include <cstddef>
9 #include <string> 9 #include <string>
10 10
(...skipping 27 matching lines...) Expand all
38 // 38 //
39 // - No two tasks with the same token will run at the same time. 39 // - No two tasks with the same token will run at the same time.
40 // 40 //
41 // - Given two tasks T1 and T2 with the same token such that T2 will 41 // - Given two tasks T1 and T2 with the same token such that T2 will
42 // run after T1, then T2 will start after T1 is destroyed. 42 // run after T1, then T2 will start after T1 is destroyed.
43 // 43 //
44 // - If T2 will run after T1, then all memory changes in T1 and T1's 44 // - If T2 will run after T1, then all memory changes in T1 and T1's
45 // destruction will be visible to T2. 45 // destruction will be visible to T2.
46 // 46 //
47 // Example: 47 // Example:
48 // SequencedWorkerPool::SequenceToken token = pool.GetSequenceToken(); 48 // SequencedWorkerPool::SequenceToken token =
49 // SequencedWorkerPool::GetSequenceToken();
49 // pool.PostSequencedWorkerTask(token, SequencedWorkerPool::SKIP_ON_SHUTDOWN, 50 // pool.PostSequencedWorkerTask(token, SequencedWorkerPool::SKIP_ON_SHUTDOWN,
50 // FROM_HERE, base::Bind(...)); 51 // FROM_HERE, base::Bind(...));
51 // pool.PostSequencedWorkerTask(token, SequencedWorkerPool::SKIP_ON_SHUTDOWN, 52 // pool.PostSequencedWorkerTask(token, SequencedWorkerPool::SKIP_ON_SHUTDOWN,
52 // FROM_HERE, base::Bind(...)); 53 // FROM_HERE, base::Bind(...));
53 // 54 //
54 // You can make named sequence tokens to make it easier to share a token 55 // You can make named sequence tokens to make it easier to share a token
55 // across different components. 56 // across different components.
56 // 57 //
57 // You can also post tasks to the pool without ordering using PostWorkerTask. 58 // You can also post tasks to the pool without ordering using PostWorkerTask.
58 // These will be executed in an unspecified order. The order of execution 59 // These will be executed in an unspecified order. The order of execution
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 virtual void OnHasWork() = 0; 155 virtual void OnHasWork() = 0;
155 virtual void WillWaitForShutdown() = 0; 156 virtual void WillWaitForShutdown() = 0;
156 virtual void OnDestruct() = 0; 157 virtual void OnDestruct() = 0;
157 }; 158 };
158 159
159 // Gets the SequencedToken of the current thread. 160 // Gets the SequencedToken of the current thread.
160 // If current thread is not a SequencedWorkerPool worker thread or is running 161 // If current thread is not a SequencedWorkerPool worker thread or is running
161 // an unsequenced task, returns an invalid SequenceToken. 162 // an unsequenced task, returns an invalid SequenceToken.
162 static SequenceToken GetSequenceTokenForCurrentThread(); 163 static SequenceToken GetSequenceTokenForCurrentThread();
163 164
164 // Returns the SequencedWorkerPool that owns this thread, or null if the 165 // Gets a SequencedTaskRunner for the current thread. If the current thread is
165 // current thread is not a SequencedWorkerPool worker thread. 166 // running an unsequenced task, a new SequenceToken will be generated and set,
166 static scoped_refptr<SequencedWorkerPool> GetWorkerPoolForCurrentThread(); 167 // so that the returned SequencedTaskRunner is guaranteed to runs tasks after
gab 2015/11/10 19:54:19 s/runs/run
Bernhard Bauer 2015/11/10 20:31:47 Done.
168 // the current task has finished running.
169 static scoped_refptr<SequencedTaskRunner>
170 GetSequencedTaskRunnerForCurrentThread();
167 171
168 // When constructing a SequencedWorkerPool, there must be a 172 // When constructing a SequencedWorkerPool, there must be a
169 // ThreadTaskRunnerHandle on the current thread unless you plan to 173 // ThreadTaskRunnerHandle on the current thread unless you plan to
170 // deliberately leak it. 174 // deliberately leak it.
171 175
172 // Pass the maximum number of threads (they will be lazily created as needed) 176 // Pass the maximum number of threads (they will be lazily created as needed)
173 // and a prefix for the thread name to aid in debugging. 177 // and a prefix for the thread name to aid in debugging.
174 SequencedWorkerPool(size_t max_threads, 178 SequencedWorkerPool(size_t max_threads,
175 const std::string& thread_name_prefix); 179 const std::string& thread_name_prefix);
176 180
177 // Like above, but with |observer| for testing. Does not take ownership of 181 // Like above, but with |observer| for testing. Does not take ownership of
178 // |observer|. 182 // |observer|.
179 SequencedWorkerPool(size_t max_threads, 183 SequencedWorkerPool(size_t max_threads,
180 const std::string& thread_name_prefix, 184 const std::string& thread_name_prefix,
181 TestingObserver* observer); 185 TestingObserver* observer);
182 186
183 // Returns a unique token that can be used to sequence tasks posted to 187 // Returns a unique token that can be used to sequence tasks posted to
184 // PostSequencedWorkerTask(). Valid tokens are always nonzero. 188 // PostSequencedWorkerTask(). Valid tokens are always nonzero.
185 SequenceToken GetSequenceToken(); 189 static SequenceToken GetSequenceToken();
186 190
187 // Returns the sequence token associated with the given name. Calling this 191 // Returns the sequence token associated with the given name. Calling this
188 // function multiple times with the same string will always produce the 192 // function multiple times with the same string will always produce the
189 // same sequence token. If the name has not been used before, a new token 193 // same sequence token. If the name has not been used before, a new token
190 // will be created. 194 // will be created.
191 SequenceToken GetNamedSequenceToken(const std::string& name); 195 SequenceToken GetNamedSequenceToken(const std::string& name);
192 196
193 // Returns a SequencedTaskRunner wrapper which posts to this 197 // Returns a SequencedTaskRunner wrapper which posts to this
194 // SequencedWorkerPool using the given sequence token. Tasks with nonzero 198 // SequencedWorkerPool using the given sequence token. Tasks with nonzero
195 // delay are posted with SKIP_ON_SHUTDOWN behavior and tasks with zero delay 199 // delay are posted with SKIP_ON_SHUTDOWN behavior and tasks with zero delay
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 // Avoid pulling in too many headers by putting (almost) everything 363 // Avoid pulling in too many headers by putting (almost) everything
360 // into |inner_|. 364 // into |inner_|.
361 const scoped_ptr<Inner> inner_; 365 const scoped_ptr<Inner> inner_;
362 366
363 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPool); 367 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPool);
364 }; 368 };
365 369
366 } // namespace base 370 } // namespace base
367 371
368 #endif // BASE_THREADING_SEQUENCED_WORKER_POOL_H_ 372 #endif // BASE_THREADING_SEQUENCED_WORKER_POOL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698