| Index: base/sequence_checker.h
|
| diff --git a/base/sequence_checker.h b/base/sequence_checker.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..681e447486db7bc63c10f28edcf3c5b8c4a95785
|
| --- /dev/null
|
| +++ b/base/sequence_checker.h
|
| @@ -0,0 +1,80 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef BASE_SEQUENCE_CHECKER_H_
|
| +#define BASE_SEQUENCE_CHECKER_H_
|
| +
|
| +#include "base/memory/ref_counted.h"
|
| +
|
| +// See comments for the similar block in thread_checker.h.
|
| +#if (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON))
|
| +#define ENABLE_SEQUENCE_CHECKER 1
|
| +#else
|
| +#define ENABLE_SEQUENCE_CHECKER 0
|
| +#endif
|
| +
|
| +#if ENABLE_SEQUENCE_CHECKER
|
| +#include "base/sequence_checker_impl.h"
|
| +#endif
|
| +
|
| +namespace base {
|
| +
|
| +class SequencedTaskRunner;
|
| +
|
| +// Do nothing implementation, for use in release mode.
|
| +//
|
| +// Note: You should almost always use the SequenceChecker class to get
|
| +// the right version for your build configuration.
|
| +class SequenceCheckerDoNothing {
|
| + public:
|
| + bool CalledInSequence() const {
|
| + return true;
|
| + }
|
| +
|
| + void ChangeSequence(
|
| + const scoped_refptr<SequencedTaskRunner>& sequenced_task_runner) {}
|
| +};
|
| +
|
| +// SequenceChecker is a helper class used to help verify that some
|
| +// methods of a class are called in sequence -- that is, called from
|
| +// the same SequencedTaskRunner. It is a generalization of
|
| +// ThreadChecker; see comments in sequence_checker_impl.h for details.
|
| +//
|
| +// Example:
|
| +// class MyClass {
|
| +// public:
|
| +// explicit MyClass(
|
| +// const scoped_refptr<SequencedTaskRunner>& sequenced_task_runner)
|
| +// : sequence_checker_(sequenced_task_runner) {}
|
| +//
|
| +// void Foo() {
|
| +// DCHECK(sequence_checker_.CalledInSequence());
|
| +// ... (do stuff) ...
|
| +// }
|
| +//
|
| +// private:
|
| +// SequenceChecker sequence_checker_;
|
| +// }
|
| +//
|
| +// In Release mode, CalledInSequence will always return true.
|
| +#if ENABLE_SEQUENCE_CHECKER
|
| +class SequenceChecker : public SequenceCheckerImpl {
|
| + public:
|
| + explicit SequenceChecker(
|
| + const scoped_refptr<SequencedTaskRunner>& sequenced_task_runner)
|
| + : SequenceCheckerImpl(sequenced_task_runner) {}
|
| +};
|
| +#else
|
| +class SequenceChecker : public SequenceCheckerDoNothing {
|
| + public:
|
| + explicit SequenceChecker(
|
| + const scoped_refptr<SequencedTaskRunner>& sequenced_task_runner) {}
|
| +};
|
| +#endif // ENABLE_SEQUENCE_CHECKER
|
| +
|
| +#undef ENABLE_SEQUENCE_CHECKER
|
| +
|
| +} // namespace base
|
| +
|
| +#endif // BASE_SEQUENCE_CHECKER_H_
|
|
|