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

Unified Diff: base/sequence_and_task_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: similarity 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_and_task_token.cc
diff --git a/base/sequence_token.cc b/base/sequence_and_task_token.cc
similarity index 33%
rename from base/sequence_token.cc
rename to base/sequence_and_task_token.cc
index 153d180605e287bdc0a20bf807a4c5e768ecce96..d91a62da1ad354201e5d7f601cb59c67cc5cfdb8 100644
--- a/base/sequence_token.cc
+++ b/base/sequence_and_task_token.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "base/sequence_token.h"
+#include "base/sequence_and_task_token.h"
#include "base/atomic_sequence_num.h"
#include "base/lazy_instance.h"
@@ -15,8 +15,11 @@ namespace {
base::StaticAtomicSequenceNumber g_sequence_token_generator;
-LazyInstance<ThreadLocalPointer<ScopedSetSequenceTokenForCurrentThread>>::Leaky
- tls_current_sequence_token = LAZY_INSTANCE_INITIALIZER;
+base::StaticAtomicSequenceNumber g_task_token_generator;
+
+LazyInstance<
+ ThreadLocalPointer<ScopedSetSequenceAndTaskTokenForCurrentThread>>::Leaky
+ tls_current_sequence_and_task_token = LAZY_INSTANCE_INITIALIZER;
} // namespace
@@ -37,23 +40,51 @@ SequenceToken SequenceToken::Create() {
}
SequenceToken SequenceToken::GetForCurrentThread() {
- const ScopedSetSequenceTokenForCurrentThread* current_sequence_token =
- tls_current_sequence_token.Get().Get();
- return current_sequence_token ? current_sequence_token->token_
- : SequenceToken();
+ const ScopedSetSequenceAndTaskTokenForCurrentThread*
+ current_sequence_and_task_token =
+ tls_current_sequence_and_task_token.Get().Get();
+ return current_sequence_and_task_token
+ ? current_sequence_and_task_token->sequence_token_
+ : SequenceToken();
+}
+
+bool TaskToken::operator==(const TaskToken& other) const {
+ return token_ == other.token_ && token_ != kInvalidTaskToken;
+}
+
+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 ScopedSetSequenceAndTaskTokenForCurrentThread*
+ current_sequence_and_task_token =
+ tls_current_sequence_and_task_token.Get().Get();
+ return current_sequence_and_task_token
+ ? current_sequence_and_task_token->task_token_
+ : TaskToken();
}
-ScopedSetSequenceTokenForCurrentThread::ScopedSetSequenceTokenForCurrentThread(
- const SequenceToken& token)
- : token_(token) {
- DCHECK(!tls_current_sequence_token.Get().Get());
- tls_current_sequence_token.Get().Set(this);
+ScopedSetSequenceAndTaskTokenForCurrentThread::
+ ScopedSetSequenceAndTaskTokenForCurrentThread(
+ const SequenceToken& sequence_token)
+ : sequence_token_(sequence_token), task_token_(TaskToken::Create()) {
+ DCHECK(!tls_current_sequence_and_task_token.Get().Get());
+ tls_current_sequence_and_task_token.Get().Set(this);
}
-ScopedSetSequenceTokenForCurrentThread::
- ~ScopedSetSequenceTokenForCurrentThread() {
- DCHECK_EQ(tls_current_sequence_token.Get().Get(), this);
- tls_current_sequence_token.Get().Set(nullptr);
+ScopedSetSequenceAndTaskTokenForCurrentThread::
+ ~ScopedSetSequenceAndTaskTokenForCurrentThread() {
+ DCHECK_EQ(tls_current_sequence_and_task_token.Get().Get(), this);
+ tls_current_sequence_and_task_token.Get().Set(nullptr);
}
} // namespace base

Powered by Google App Engine
This is Rietveld 408576698