1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file. 4*635a8641SAndroid Build Coastguard Worker 5*635a8641SAndroid Build Coastguard Worker #ifndef BASE_SEQUENCE_CHECKER_IMPL_H_ 6*635a8641SAndroid Build Coastguard Worker #define BASE_SEQUENCE_CHECKER_IMPL_H_ 7*635a8641SAndroid Build Coastguard Worker 8*635a8641SAndroid Build Coastguard Worker #include <memory> 9*635a8641SAndroid Build Coastguard Worker 10*635a8641SAndroid Build Coastguard Worker #include "base/base_export.h" 11*635a8641SAndroid Build Coastguard Worker #include "base/compiler_specific.h" 12*635a8641SAndroid Build Coastguard Worker #include "base/macros.h" 13*635a8641SAndroid Build Coastguard Worker #include "base/synchronization/lock.h" 14*635a8641SAndroid Build Coastguard Worker 15*635a8641SAndroid Build Coastguard Worker namespace base { 16*635a8641SAndroid Build Coastguard Worker 17*635a8641SAndroid Build Coastguard Worker // Real implementation of SequenceChecker for use in debug mode or for temporary 18*635a8641SAndroid Build Coastguard Worker // use in release mode (e.g. to CHECK on a threading issue seen only in the 19*635a8641SAndroid Build Coastguard Worker // wild). 20*635a8641SAndroid Build Coastguard Worker // 21*635a8641SAndroid Build Coastguard Worker // Note: You should almost always use the SequenceChecker class to get the right 22*635a8641SAndroid Build Coastguard Worker // version for your build configuration. 23*635a8641SAndroid Build Coastguard Worker class BASE_EXPORT SequenceCheckerImpl { 24*635a8641SAndroid Build Coastguard Worker public: 25*635a8641SAndroid Build Coastguard Worker SequenceCheckerImpl(); 26*635a8641SAndroid Build Coastguard Worker ~SequenceCheckerImpl(); 27*635a8641SAndroid Build Coastguard Worker 28*635a8641SAndroid Build Coastguard Worker // Returns true if called in sequence with previous calls to this method and 29*635a8641SAndroid Build Coastguard Worker // the constructor. 30*635a8641SAndroid Build Coastguard Worker bool CalledOnValidSequence() const WARN_UNUSED_RESULT; 31*635a8641SAndroid Build Coastguard Worker 32*635a8641SAndroid Build Coastguard Worker // Unbinds the checker from the currently associated sequence. The checker 33*635a8641SAndroid Build Coastguard Worker // will be re-bound on the next call to CalledOnValidSequence(). 34*635a8641SAndroid Build Coastguard Worker void DetachFromSequence(); 35*635a8641SAndroid Build Coastguard Worker 36*635a8641SAndroid Build Coastguard Worker private: 37*635a8641SAndroid Build Coastguard Worker class Core; 38*635a8641SAndroid Build Coastguard Worker 39*635a8641SAndroid Build Coastguard Worker // Guards all variables below. 40*635a8641SAndroid Build Coastguard Worker mutable Lock lock_; 41*635a8641SAndroid Build Coastguard Worker mutable std::unique_ptr<Core> core_; 42*635a8641SAndroid Build Coastguard Worker 43*635a8641SAndroid Build Coastguard Worker DISALLOW_COPY_AND_ASSIGN(SequenceCheckerImpl); 44*635a8641SAndroid Build Coastguard Worker }; 45*635a8641SAndroid Build Coastguard Worker 46*635a8641SAndroid Build Coastguard Worker } // namespace base 47*635a8641SAndroid Build Coastguard Worker 48*635a8641SAndroid Build Coastguard Worker #endif // BASE_SEQUENCE_CHECKER_IMPL_H_ 49