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

Unified Diff: base/sequence_checker_impl.cc

Issue 2165663003: TaskScheduler: Add SequenceToken and ScopedSetSequenceTokenForCurrentThread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: self-review Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: base/sequence_checker_impl.cc
diff --git a/base/sequence_checker_impl.cc b/base/sequence_checker_impl.cc
index e95b8ee5f3e25e639a609e5cb0c5aad291fe6e59..cbf5053f9651c04bd60e04ef55bcf4ec69253d88 100644
--- a/base/sequence_checker_impl.cc
+++ b/base/sequence_checker_impl.cc
@@ -4,43 +4,55 @@
#include "base/sequence_checker_impl.h"
+#include "base/logging.h"
+
namespace base {
-SequenceCheckerImpl::SequenceCheckerImpl()
- : sequence_token_assigned_(false) {
+SequenceCheckerImpl::SequenceCheckerImpl() {
AutoLock auto_lock(lock_);
EnsureSequenceTokenAssigned();
}
-SequenceCheckerImpl::~SequenceCheckerImpl() {}
+SequenceCheckerImpl::~SequenceCheckerImpl() = default;
bool SequenceCheckerImpl::CalledOnValidSequencedThread() const {
AutoLock auto_lock(lock_);
EnsureSequenceTokenAssigned();
- // If this thread is not associated with a SequencedWorkerPool,
- // SequenceChecker behaves as a ThreadChecker. See header for details.
- if (!sequence_token_.IsValid())
- return thread_checker_.CalledOnValidThread();
+ if (sequence_token_.IsValid())
gab 2016/07/26 20:49:49 Do we even need IsValid() in a world where invalid
fdoray 2016/07/28 18:10:04 If we do that, we'll delegate to |thread_checker_|
+ return sequence_token_ == SequenceToken::GetForCurrentThread();
+
+ if (sequenced_worker_pool_token_.IsValid()) {
+ return sequenced_worker_pool_token_.Equals(
+ SequencedWorkerPool::GetSequenceTokenForCurrentThread());
+ }
- return sequence_token_.Equals(
- SequencedWorkerPool::GetSequenceTokenForCurrentThread());
+ // SequenceChecker behaves as a ThreadChecker when it is not bound to a valid
+ // sequence token.
+ return thread_checker_.CalledOnValidThread();
}
void SequenceCheckerImpl::DetachFromSequence() {
AutoLock auto_lock(lock_);
+ is_assigned_ = false;
+ sequence_token_ = SequenceToken();
+ sequenced_worker_pool_token_ = SequencedWorkerPool::SequenceToken();
thread_checker_.DetachFromThread();
- sequence_token_assigned_ = false;
- sequence_token_ = SequencedWorkerPool::SequenceToken();
}
void SequenceCheckerImpl::EnsureSequenceTokenAssigned() const {
lock_.AssertAcquired();
- if (sequence_token_assigned_)
+ if (is_assigned_)
return;
- sequence_token_assigned_ = true;
- sequence_token_ = SequencedWorkerPool::GetSequenceTokenForCurrentThread();
+ is_assigned_ = true;
+ sequence_token_ = SequenceToken::GetForCurrentThread();
+ sequenced_worker_pool_token_ =
+ SequencedWorkerPool::GetSequenceTokenForCurrentThread();
+
+ // SequencedWorkerPool doesn't use SequenceToken and code outside of
+ // SequenceWorkerPool doesn't set a SequencedWorkerPool token.
+ DCHECK(!sequence_token_.IsValid() || !sequenced_worker_pool_token_.IsValid());
}
} // namespace base

Powered by Google App Engine
This is Rietveld 408576698