| 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();
|
| }
|
|
|