[email protected] | 399ed42 | 2012-12-27 19:58:00 | [diff] [blame] | 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_IMPL_H_ | ||||
6 | #define BASE_SEQUENCE_CHECKER_IMPL_H_ | ||||
7 | |||||
tzik | 0c2fcf5 | 2017-02-16 08:52:31 | [diff] [blame] | 8 | #include <memory> |
9 | |||||
[email protected] | 399ed42 | 2012-12-27 19:58:00 | [diff] [blame] | 10 | #include "base/base_export.h" |
fdoray | eed5fa7 | 2016-07-26 22:28:45 | [diff] [blame] | 11 | #include "base/compiler_specific.h" |
avi | 9b6f4293 | 2015-12-26 22:15:14 | [diff] [blame] | 12 | #include "base/macros.h" |
[email protected] | 399ed42 | 2012-12-27 19:58:00 | [diff] [blame] | 13 | #include "base/synchronization/lock.h" |
[email protected] | 399ed42 | 2012-12-27 19:58:00 | [diff] [blame] | 14 | |
15 | namespace base { | ||||
16 | |||||
fdoray | eed5fa7 | 2016-07-26 22:28:45 | [diff] [blame] | 17 | // Real implementation of SequenceChecker for use in debug mode or for temporary |
18 | // use in release mode (e.g. to CHECK on a threading issue seen only in the | ||||
19 | // wild). | ||||
20 | // | ||||
21 | // Note: You should almost always use the SequenceChecker class to get the right | ||||
22 | // version for your build configuration. | ||||
[email protected] | 399ed42 | 2012-12-27 19:58:00 | [diff] [blame] | 23 | class BASE_EXPORT SequenceCheckerImpl { |
24 | public: | ||||
[email protected] | d52426c | 2013-07-30 19:26:40 | [diff] [blame] | 25 | SequenceCheckerImpl(); |
[email protected] | 399ed42 | 2012-12-27 19:58:00 | [diff] [blame] | 26 | ~SequenceCheckerImpl(); |
27 | |||||
fdoray | eed5fa7 | 2016-07-26 22:28:45 | [diff] [blame] | 28 | // Returns true if called in sequence with previous calls to this method and |
29 | // the constructor. | ||||
fdoray | e2b19a1 | 2016-07-29 02:30:16 | [diff] [blame] | 30 | bool CalledOnValidSequence() const WARN_UNUSED_RESULT; |
[email protected] | 399ed42 | 2012-12-27 19:58:00 | [diff] [blame] | 31 | |
fdoray | eed5fa7 | 2016-07-26 22:28:45 | [diff] [blame] | 32 | // Unbinds the checker from the currently associated sequence. The checker |
fdoray | e2b19a1 | 2016-07-29 02:30:16 | [diff] [blame] | 33 | // will be re-bound on the next call to CalledOnValidSequence(). |
[email protected] | d52426c | 2013-07-30 19:26:40 | [diff] [blame] | 34 | void DetachFromSequence(); |
[email protected] | 399ed42 | 2012-12-27 19:58:00 | [diff] [blame] | 35 | |
36 | private: | ||||
tzik | 0c2fcf5 | 2017-02-16 08:52:31 | [diff] [blame] | 37 | class Core; |
[email protected] | d52426c | 2013-07-30 19:26:40 | [diff] [blame] | 38 | |
[email protected] | 399ed42 | 2012-12-27 19:58:00 | [diff] [blame] | 39 | // Guards all variables below. |
40 | mutable Lock lock_; | ||||
tzik | 0c2fcf5 | 2017-02-16 08:52:31 | [diff] [blame] | 41 | mutable std::unique_ptr<Core> core_; |
[email protected] | 399ed42 | 2012-12-27 19:58:00 | [diff] [blame] | 42 | |
43 | DISALLOW_COPY_AND_ASSIGN(SequenceCheckerImpl); | ||||
44 | }; | ||||
45 | |||||
46 | } // namespace base | ||||
47 | |||||
48 | #endif // BASE_SEQUENCE_CHECKER_IMPL_H_ |