Index: base/threading/sequenced_worker_pool.h |
diff --git a/base/threading/sequenced_worker_pool.h b/base/threading/sequenced_worker_pool.h |
index 1616b8fdd260200b62330e22e173cdb42784f32a..ba0e444210fe0b05e00f231cf2f5157c28621510 100644 |
--- a/base/threading/sequenced_worker_pool.h |
+++ b/base/threading/sequenced_worker_pool.h |
@@ -47,7 +47,8 @@ class SequencedTaskRunner; |
// destruction will be visible to T2. |
// |
// Example: |
-// SequencedWorkerPool::SequenceToken token = pool.GetSequenceToken(); |
+// SequencedWorkerPool::SequenceToken token = |
+// SequencedWorkerPool::GetSequenceToken(); |
// pool.PostSequencedWorkerTask(token, SequencedWorkerPool::SKIP_ON_SHUTDOWN, |
// FROM_HERE, base::Bind(...)); |
// pool.PostSequencedWorkerTask(token, SequencedWorkerPool::SKIP_ON_SHUTDOWN, |
@@ -163,6 +164,19 @@ class BASE_EXPORT SequencedWorkerPool : public TaskRunner { |
// an unsequenced task, returns an invalid SequenceToken. |
static SequenceToken GetSequenceTokenForCurrentThread(); |
+ // Gets a SequencedTaskRunner for the current thread. If the current thread is |
+ // running an unsequenced task, a new SequenceToken will be generated and set, |
+ // so that the returned SequencedTaskRunner is guaranteed to run tasks after |
+ // the current task has finished running. |
+ static scoped_refptr<SequencedTaskRunner> |
+ GetSequencedTaskRunnerForCurrentThread(); |
+ |
+ // Returns a unique token that can be used to sequence tasks posted to |
+ // PostSequencedWorkerTask(). Valid tokens are always nonzero. |
+ // TODO(bauerb): Rename this to better differentiate from |
+ // GetSequenceTokenForCurrentThread(). |
+ static SequenceToken GetSequenceToken(); |
+ |
// Returns the SequencedWorkerPool that owns this thread, or null if the |
// current thread is not a SequencedWorkerPool worker thread. |
static scoped_refptr<SequencedWorkerPool> GetWorkerPoolForCurrentThread(); |
@@ -182,10 +196,6 @@ class BASE_EXPORT SequencedWorkerPool : public TaskRunner { |
const std::string& thread_name_prefix, |
TestingObserver* observer); |
- // Returns a unique token that can be used to sequence tasks posted to |
- // PostSequencedWorkerTask(). Valid tokens are always nonzero. |
- SequenceToken GetSequenceToken(); |
- |
// Returns the sequence token associated with the given name. Calling this |
// function multiple times with the same string will always produce the |
// same sequence token. If the name has not been used before, a new token |
@@ -310,6 +320,10 @@ class BASE_EXPORT SequencedWorkerPool : public TaskRunner { |
// sequence_token. |
bool IsRunningSequenceOnCurrentThread(SequenceToken sequence_token) const; |
+ // Returns true if any thread is currently processing a task with the given |
+ // sequence token. Should only be called with a valid sequence token. |
+ bool IsRunningSequence(SequenceToken sequence_token) const; |
+ |
// Blocks until all pending tasks are complete. This should only be called in |
// unit tests when you want to validate something that should have happened. |
// This will not flush delayed tasks; delayed tasks get deleted. |