blob: 3edb689c511ed17366354bda6e82f4272c12e8e2 [file] [log] [blame]
[email protected]399ed422012-12-27 19:58:001// 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_IMPL_H_
6#define BASE_SEQUENCE_CHECKER_IMPL_H_
7
tzik0c2fcf52017-02-16 08:52:318#include <memory>
9
[email protected]399ed422012-12-27 19:58:0010#include "base/base_export.h"
fdorayeed5fa72016-07-26 22:28:4511#include "base/compiler_specific.h"
avi9b6f42932015-12-26 22:15:1412#include "base/macros.h"
[email protected]399ed422012-12-27 19:58:0013#include "base/synchronization/lock.h"
Aditya Keerthid2f44c72019-04-26 17:45:1414#include "base/thread_annotations.h"
[email protected]399ed422012-12-27 19:58:0015
16namespace base {
17
fdorayeed5fa72016-07-26 22:28:4518// Real implementation of SequenceChecker for use in debug mode or for temporary
19// use in release mode (e.g. to CHECK on a threading issue seen only in the
20// wild).
21//
22// Note: You should almost always use the SequenceChecker class to get the right
23// version for your build configuration.
[email protected]399ed422012-12-27 19:58:0024class BASE_EXPORT SequenceCheckerImpl {
25 public:
[email protected]d52426c2013-07-30 19:26:4026 SequenceCheckerImpl();
[email protected]399ed422012-12-27 19:58:0027 ~SequenceCheckerImpl();
28
fdorayeed5fa72016-07-26 22:28:4529 // Returns true if called in sequence with previous calls to this method and
30 // the constructor.
fdoraye2b19a12016-07-29 02:30:1631 bool CalledOnValidSequence() const WARN_UNUSED_RESULT;
[email protected]399ed422012-12-27 19:58:0032
fdorayeed5fa72016-07-26 22:28:4533 // Unbinds the checker from the currently associated sequence. The checker
fdoraye2b19a12016-07-29 02:30:1634 // will be re-bound on the next call to CalledOnValidSequence().
[email protected]d52426c2013-07-30 19:26:4035 void DetachFromSequence();
[email protected]399ed422012-12-27 19:58:0036
37 private:
tzik0c2fcf52017-02-16 08:52:3138 class Core;
[email protected]d52426c2013-07-30 19:26:4039
[email protected]399ed422012-12-27 19:58:0040 mutable Lock lock_;
Aditya Keerthid2f44c72019-04-26 17:45:1441 mutable std::unique_ptr<Core> core_ GUARDED_BY(lock_);
[email protected]399ed422012-12-27 19:58:0042
43 DISALLOW_COPY_AND_ASSIGN(SequenceCheckerImpl);
44};
45
46} // namespace base
47
48#endif // BASE_SEQUENCE_CHECKER_IMPL_H_