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 #include "base/memory/ref_counted.h" 9 10 // See comments for the similar block in thread_checker.h. 11 #if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) 12 #define ENABLE_SEQUENCE_CHECKER 1 13 #else 14 #define ENABLE_SEQUENCE_CHECKER 0 15 #endif 16 17 #if ENABLE_SEQUENCE_CHECKER 18 #include "base/sequence_checker_impl.h" 19 #endif 20 21 namespace base { 22 23 class SequencedTaskRunner; 24 25 // Do nothing implementation, for use in release mode. 26 // 27 // Note: You should almost always use the SequenceChecker class to get 28 // the right version for your build configuration. 29 class SequenceCheckerDoNothing { 30 public: CalledOnValidSequencedThread()31 bool CalledOnValidSequencedThread() const { 32 return true; 33 } 34 DetachFromSequence()35 void DetachFromSequence() {} 36 }; 37 38 // SequenceChecker is a helper class used to help verify that some 39 // methods of a class are called in sequence -- that is, called from 40 // the same SequencedTaskRunner. It is a generalization of 41 // ThreadChecker; see comments in sequence_checker_impl.h for details. 42 // 43 // Example: 44 // class MyClass { 45 // public: 46 // void Foo() { 47 // DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 48 // ... (do stuff) ... 49 // } 50 // 51 // private: 52 // SequenceChecker sequence_checker_; 53 // } 54 // 55 // In Release mode, CalledOnValidSequence will always return true. 56 #if ENABLE_SEQUENCE_CHECKER 57 class SequenceChecker : public SequenceCheckerImpl { 58 }; 59 #else 60 class SequenceChecker : public SequenceCheckerDoNothing { 61 }; 62 #endif // ENABLE_SEQUENCE_CHECKER 63 64 #undef ENABLE_SEQUENCE_CHECKER 65 66 } // namespace base 67 68 #endif // BASE_SEQUENCE_CHECKER_H_ 69