1*6777b538SAndroid Build Coastguard Worker // Copyright 2022 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/threading/thread_checker.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #if DCHECK_IS_ON() 8*6777b538SAndroid Build Coastguard Worker #include <memory> 9*6777b538SAndroid Build Coastguard Worker #include <ostream> 10*6777b538SAndroid Build Coastguard Worker #include <string_view> 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker #include "base/check.h" 13*6777b538SAndroid Build Coastguard Worker #include "base/debug/stack_trace.h" 14*6777b538SAndroid Build Coastguard Worker #endif 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker namespace base { 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker #if DCHECK_IS_ON() ScopedValidateThreadChecker(const ThreadChecker & checker)19*6777b538SAndroid Build Coastguard WorkerScopedValidateThreadChecker::ScopedValidateThreadChecker( 20*6777b538SAndroid Build Coastguard Worker const ThreadChecker& checker) { 21*6777b538SAndroid Build Coastguard Worker std::unique_ptr<debug::StackTrace> bound_at; 22*6777b538SAndroid Build Coastguard Worker DCHECK(checker.CalledOnValidThread(&bound_at)) 23*6777b538SAndroid Build Coastguard Worker << (bound_at ? "\nWas attached to thread at:\n" + bound_at->ToString() 24*6777b538SAndroid Build Coastguard Worker : ""); 25*6777b538SAndroid Build Coastguard Worker } 26*6777b538SAndroid Build Coastguard Worker ScopedValidateThreadChecker(const ThreadChecker & checker,std::string_view msg)27*6777b538SAndroid Build Coastguard WorkerScopedValidateThreadChecker::ScopedValidateThreadChecker( 28*6777b538SAndroid Build Coastguard Worker const ThreadChecker& checker, 29*6777b538SAndroid Build Coastguard Worker std::string_view msg) { 30*6777b538SAndroid Build Coastguard Worker std::unique_ptr<debug::StackTrace> bound_at; 31*6777b538SAndroid Build Coastguard Worker DCHECK(checker.CalledOnValidThread(&bound_at)) 32*6777b538SAndroid Build Coastguard Worker << msg 33*6777b538SAndroid Build Coastguard Worker << (bound_at ? "\nWas attached to thread at:\n" + bound_at->ToString() 34*6777b538SAndroid Build Coastguard Worker : ""); 35*6777b538SAndroid Build Coastguard Worker } 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker ScopedValidateThreadChecker::~ScopedValidateThreadChecker() = default; 38*6777b538SAndroid Build Coastguard Worker #endif // DCHECK_IS_ON() 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker } // namespace base 41