Chromium Code Reviews| Index: base/sequence_checker_impl.h |
| diff --git a/base/sequence_checker_impl.h b/base/sequence_checker_impl.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c75f0ccd465dfbb8a241a035e63af47cf1b47acf |
| --- /dev/null |
| +++ b/base/sequence_checker_impl.h |
| @@ -0,0 +1,58 @@ |
| +// 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_IMPL_H_ |
| +#define BASE_SEQUENCE_CHECKER_IMPL_H_ |
| + |
| +#include "base/base_export.h" |
| +#include "base/basictypes.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "base/synchronization/lock.h" |
| +#include "base/threading/thread_checker_impl.h" |
| + |
| +namespace base { |
| + |
| +class SequencedTaskRunner; |
| + |
| +// SequenceCheckerImpl is 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; in |
| +// particular, it behaves exactly like ThreadChecker if its passed a |
| +// NULL SequencedTaskRunner. |
| +class BASE_EXPORT SequenceCheckerImpl { |
| + public: |
| + // |sequenced_task_runner| can be NULL. In that case, this object |
| + // behaves exactly like a ThreadChecker bound to the current thread, |
| + // i.e. CalledInSequence() behaves like CalledOnValidThread(). |
| + explicit SequenceCheckerImpl( |
| + const scoped_refptr<SequencedTaskRunner>& sequenced_task_runner); |
| + ~SequenceCheckerImpl(); |
| + |
| + // Returns whether the we are being called on the underyling |
| + // SequencedTaskRunner. If we're not bound to a |
| + // |sequenced_task_runner|, returns whether we are being called on |
| + // the underlying ThreadChecker's thread. |
| + bool CalledInSequence() const; |
|
Ryan Sleevi
2012/12/13 22:49:15
nit: I find the naming of this a little confusing.
akalin
2012/12/18 22:12:19
How about CalledOnValidSequence()?
I'd like to av
|
| + |
| + // Changes the underyling SequencedTaskRunner. |
| + // |sequenced_task_runner| can be NULL. In that case, this object |
| + // behaves exactly like a ThreadChecker that has been detached from |
| + // its thread, i.e. we will be bound to the thread on which we next |
| + // call CalledInSequence(). |
| + void ChangeSequence( |
| + const scoped_refptr<SequencedTaskRunner>& sequenced_task_runner); |
| + |
| + private: |
| + // Guards all variables below. |
| + mutable Lock lock_; |
| + scoped_refptr<SequencedTaskRunner> sequenced_task_runner_; |
| + // Used if |sequenced_task_runner_| is NULL. |
| + ThreadCheckerImpl thread_checker_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(SequenceCheckerImpl); |
| +}; |
| + |
| +} // namespace base |
| + |
| +#endif // BASE_SEQUENCE_CHECKER_IMPL_H_ |