Index: base/threading/sequenced_worker_pool.cc |
=================================================================== |
--- base/threading/sequenced_worker_pool.cc (revision 128981) |
+++ base/threading/sequenced_worker_pool.cc (working copy) |
@@ -59,8 +59,17 @@ |
// SimpleThread implementation. This actually runs the background thread. |
virtual void Run() OVERRIDE; |
+ void set_running_sequence(SequenceToken token) { |
+ running_sequence_ = token; |
+ } |
+ |
+ SequenceToken running_sequence() const { |
+ return running_sequence_; |
+ } |
+ |
private: |
scoped_refptr<SequencedWorkerPool> worker_pool_; |
+ SequenceToken running_sequence_; |
DISALLOW_COPY_AND_ASSIGN(Worker); |
}; |
@@ -92,6 +101,8 @@ |
bool RunsTasksOnCurrentThread() const; |
+ bool IsRunningSequenceOnCurrentThread(SequenceToken sequence_token) const; |
+ |
void FlushForTesting(); |
void SignalHasWorkForTesting(); |
@@ -350,6 +361,15 @@ |
return ContainsKey(threads_, PlatformThread::CurrentId()); |
} |
+bool SequencedWorkerPool::Inner::IsRunningSequenceOnCurrentThread( |
+ SequenceToken sequence_token) const { |
+ AutoLock lock(lock_); |
+ ThreadMap::const_iterator found = threads_.find(PlatformThread::CurrentId()); |
+ if (found == threads_.end()) |
+ return false; |
+ return found->second->running_sequence().Equals(sequence_token); |
+} |
+ |
void SequencedWorkerPool::Inner::FlushForTesting() { |
AutoLock lock(lock_); |
while (!IsIdle()) |
@@ -427,8 +447,13 @@ |
if (new_thread_id) |
FinishStartingAdditionalThread(new_thread_id); |
+ this_worker->set_running_sequence( |
+ SequenceToken(task.sequence_token_id)); |
+ |
task.task.Run(); |
+ this_worker->set_running_sequence(SequenceToken()); |
+ |
// Make sure our task is erased outside the lock for the same reason |
// we do this with delete_these_oustide_lock. |
task.task = Closure(); |
@@ -788,6 +813,11 @@ |
return inner_->RunsTasksOnCurrentThread(); |
} |
+bool SequencedWorkerPool::IsRunningSequenceOnCurrentThread( |
+ SequenceToken sequence_token) const { |
+ return inner_->IsRunningSequenceOnCurrentThread(sequence_token); |
+} |
+ |
void SequencedWorkerPool::FlushForTesting() { |
inner_->FlushForTesting(); |
} |