1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_SEQUENCE_CHECKER_H_ 6 #define BASE_SEQUENCE_CHECKER_H_ 7 8 // See comments for the similar block in thread_checker.h. 9 #if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) 10 #define ENABLE_SEQUENCE_CHECKER 1 11 #else 12 #define ENABLE_SEQUENCE_CHECKER 0 13 #endif 14 15 #include "base/sequence_checker_impl.h" 16 17 namespace base { 18 19 // Do nothing implementation, for use in release mode. 20 // 21 // Note: You should almost always use the SequenceChecker class to get 22 // the right version for your build configuration. 23 class SequenceCheckerDoNothing { 24 public: 25 bool CalledOnValidSequencedThread() const { 26 return true; 27 } 28 29 void DetachFromSequence() {} 30 }; 31 32 // SequenceChecker is a helper class used to help verify that some 33 // methods of a class are called in sequence -- that is, called from 34 // the same SequencedTaskRunner. It is a generalization of 35 // ThreadChecker; see comments in sequence_checker_impl.h for details. 36 // 37 // Example: 38 // class MyClass { 39 // public: 40 // void Foo() { 41 // DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 42 // ... (do stuff) ... 43 // } 44 // 45 // private: 46 // SequenceChecker sequence_checker_; 47 // } 48 // 49 // In Release mode, CalledOnValidSequencedThread() will always return true. 50 #if ENABLE_SEQUENCE_CHECKER 51 class SequenceChecker : public SequenceCheckerImpl { 52 }; 53 #else 54 class SequenceChecker : public SequenceCheckerDoNothing { 55 }; 56 #endif // ENABLE_SEQUENCE_CHECKER 57 58 #undef ENABLE_SEQUENCE_CHECKER 59 60 } // namespace base 61 62 #endif // BASE_SEQUENCE_CHECKER_H_ 63