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

Unified Diff: base/sequence_token.cc

Issue 2213263002: Make ThreadChecker::CalledOnValidThread() return true when called from the same task. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: CR gab #6 (fix comment) Created 4 years, 4 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_token.cc
diff --git a/base/sequence_token.cc b/base/sequence_token.cc
index 153d180605e287bdc0a20bf807a4c5e768ecce96..95eafb7562a474e34aec398d4f0d213eda34842f 100644
--- a/base/sequence_token.cc
+++ b/base/sequence_token.cc
@@ -15,9 +15,14 @@ namespace {
base::StaticAtomicSequenceNumber g_sequence_token_generator;
-LazyInstance<ThreadLocalPointer<ScopedSetSequenceTokenForCurrentThread>>::Leaky
+base::StaticAtomicSequenceNumber g_task_token_generator;
+
+LazyInstance<ThreadLocalPointer<const SequenceToken>>::Leaky
tls_current_sequence_token = LAZY_INSTANCE_INITIALIZER;
+LazyInstance<ThreadLocalPointer<const TaskToken>>::Leaky
+ tls_current_task_token = LAZY_INSTANCE_INITIALIZER;
+
} // namespace
bool SequenceToken::operator==(const SequenceToken& other) const {
@@ -37,23 +42,47 @@ SequenceToken SequenceToken::Create() {
}
SequenceToken SequenceToken::GetForCurrentThread() {
- const ScopedSetSequenceTokenForCurrentThread* current_sequence_token =
+ const SequenceToken* current_sequence_token =
tls_current_sequence_token.Get().Get();
- return current_sequence_token ? current_sequence_token->token_
- : SequenceToken();
+ return current_sequence_token ? *current_sequence_token : SequenceToken();
+}
+
+bool TaskToken::operator==(const TaskToken& other) const {
+ return token_ == other.token_ && token_ != kInvalidTaskToken;
Lei Zhang 2016/08/08 23:21:26 Just call IsValid() in the latter half?
gab 2016/08/09 15:50:15 Done.
+}
+
+bool TaskToken::operator!=(const TaskToken& other) const {
+ return !(*this == other);
+}
+
+bool TaskToken::IsValid() const {
+ return token_ != kInvalidTaskToken;
+}
+
+TaskToken TaskToken::Create() {
+ return TaskToken(g_task_token_generator.GetNext());
+}
+
+TaskToken TaskToken::GetForCurrentThread() {
+ const TaskToken* current_task_token = tls_current_task_token.Get().Get();
+ return current_task_token ? *current_task_token : TaskToken();
}
ScopedSetSequenceTokenForCurrentThread::ScopedSetSequenceTokenForCurrentThread(
- const SequenceToken& token)
- : token_(token) {
+ const SequenceToken& sequence_token)
+ : sequence_token_(sequence_token), task_token_(TaskToken::Create()) {
DCHECK(!tls_current_sequence_token.Get().Get());
- tls_current_sequence_token.Get().Set(this);
+ DCHECK(!tls_current_task_token.Get().Get());
+ tls_current_sequence_token.Get().Set(&sequence_token_);
+ tls_current_task_token.Get().Set(&task_token_);
}
ScopedSetSequenceTokenForCurrentThread::
~ScopedSetSequenceTokenForCurrentThread() {
- DCHECK_EQ(tls_current_sequence_token.Get().Get(), this);
+ DCHECK_EQ(tls_current_sequence_token.Get().Get(), &sequence_token_);
+ DCHECK_EQ(tls_current_task_token.Get().Get(), &task_token_);
tls_current_sequence_token.Get().Set(nullptr);
+ tls_current_task_token.Get().Set(nullptr);
}
} // namespace base

Powered by Google App Engine
This is Rietveld 408576698