1// Copyright (c) 2010 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_THREADING_THREAD_CHECKER_H_ 6#define BASE_THREADING_THREAD_CHECKER_H_ 7#pragma once 8 9#ifndef NDEBUG 10#include "base/threading/thread_checker_impl.h" 11#endif 12 13namespace base { 14 15// Do nothing implementation, for use in release mode. 16// 17// Note: You should almost always use the ThreadChecker class to get the 18// right version for your build configuration. 19class ThreadCheckerDoNothing { 20 public: 21 bool CalledOnValidThread() const { 22 return true; 23 } 24 25 void DetachFromThread() {} 26}; 27 28// Before using this class, please consider using NonThreadSafe as it 29// makes it much easier to determine the nature of your class. 30// 31// ThreadChecker is a helper class used to help verify that some methods of a 32// class are called from the same thread. One can inherit from this class and 33// use CalledOnValidThread() to verify. 34// 35// Inheriting from class indicates that one must be careful when using the 36// class with multiple threads. However, it is up to the class document to 37// indicate how it can be used with threads. 38// 39// Example: 40// class MyClass : public ThreadChecker { 41// public: 42// void Foo() { 43// DCHECK(CalledOnValidThread()); 44// ... (do stuff) ... 45// } 46// } 47// 48// In Release mode, CalledOnValidThread will always return true. 49#ifndef NDEBUG 50class ThreadChecker : public ThreadCheckerImpl { 51}; 52#else 53class ThreadChecker : public ThreadCheckerDoNothing { 54}; 55#endif // NDEBUG 56 57} // namespace base 58 59#endif // BASE_THREADING_THREAD_CHECKER_H_ 60