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 17namespace 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. 23class 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 51class SequenceChecker : public SequenceCheckerImpl { 52}; 53#else 54class 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