// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_SEQUENCE_CHECKER_IMPL_H_ #define BASE_SEQUENCE_CHECKER_IMPL_H_ #include <cstdint> #include <memory> #include <vector> #include "base/base_export.h" #include "base/sequence_token.h" #include "base/synchronization/lock.h" #include "base/thread_annotations.h" #include "base/threading/platform_thread_ref.h" namespace base { namespace debug { class StackTrace; } // Real implementation of SequenceChecker. // // In most cases, SEQUENCE_CHECKER should be used instead of this, get the right // implementation for the build configuration. It's possible to temporarily use // this directly to get sequence checking in production builds, which can be // handy to debug issues only seen in the field. However, when used in a // non-DCHECK build, SequenceCheckerImpl::CalledOnValidSequence() will not // consider locks as a valid way to guarantee mutual exclusion (returns false if // not invoked from the bound sequence, even if all calls are made under the // same lock). // Marked with "context" capability to support thread_annotations.h. class THREAD_ANNOTATION_ATTRIBUTE__(capability("context")) BASE_EXPORT SequenceCheckerImpl { … }; } // namespace base #endif // BASE_SEQUENCE_CHECKER_IMPL_H_