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