From bebc69010d09bab32f59ae110a2c181a09191f02 Mon Sep 17 00:00:00 2001 From: Tommi Date: Mon, 18 May 2015 09:51:42 +0200 Subject: [PATCH] Add platform_thread source files and move types from thread_checker_impl to there. BUG= R=henrika@webrtc.org Review URL: https://webrtc-codereview.appspot.com/52529004 Cr-Commit-Position: refs/heads/master@{#9201} --- webrtc/base/BUILD.gn | 2 ++ webrtc/base/base.gyp | 2 ++ webrtc/base/platform_thread.cc | 57 ++++++++++++++++++++++++++++++ webrtc/base/platform_thread.h | 40 +++++++++++++++++++++ webrtc/base/thread_checker_impl.cc | 42 ---------------------- webrtc/base/thread_checker_impl.h | 22 +----------- 6 files changed, 102 insertions(+), 63 deletions(-) create mode 100644 webrtc/base/platform_thread.cc create mode 100644 webrtc/base/platform_thread.h diff --git a/webrtc/base/BUILD.gn b/webrtc/base/BUILD.gn index a9868e9311..8680257ee7 100644 --- a/webrtc/base/BUILD.gn +++ b/webrtc/base/BUILD.gn @@ -129,6 +129,8 @@ static_library("rtc_base_approved") { "md5digest.h", "platform_file.cc", "platform_file.h", + "platform_thread.cc", + "platform_thread.h", "safe_conversions.h", "safe_conversions_impl.h", "stringencode.cc", diff --git a/webrtc/base/base.gyp b/webrtc/base/base.gyp index 377b41c2fd..6e197a58e1 100644 --- a/webrtc/base/base.gyp +++ b/webrtc/base/base.gyp @@ -57,6 +57,8 @@ 'md5digest.h', 'platform_file.cc', 'platform_file.h', + 'platform_thread.cc', + 'platform_thread.h', 'safe_conversions.h', 'safe_conversions_impl.h', 'stringencode.cc', diff --git a/webrtc/base/platform_thread.cc b/webrtc/base/platform_thread.cc new file mode 100644 index 0000000000..d043c11c80 --- /dev/null +++ b/webrtc/base/platform_thread.cc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "webrtc/base/platform_thread.h" + +#include "webrtc/base/checks.h" + +#if defined(WEBRTC_LINUX) +#include +#endif + +namespace rtc { + +PlatformThreadId CurrentThreadId() { + PlatformThreadId ret; +#if defined(WEBRTC_WIN) + ret = GetCurrentThreadId(); +#elif defined(WEBRTC_POSIX) +#if defined(WEBRTC_MAC) || defined(WEBRTC_IOS) + ret = pthread_mach_thread_np(pthread_self()); +#elif defined(WEBRTC_LINUX) + ret = syscall(__NR_gettid); +#elif defined(WEBRTC_ANDROID) + ret = gettid(); +#else + // Default implementation for nacl and solaris. + ret = reinterpret_cast(pthread_self()); +#endif +#endif // defined(WEBRTC_POSIX) + DCHECK(ret); + return ret; +} + +PlatformThreadRef CurrentThreadRef() { +#if defined(WEBRTC_WIN) + return GetCurrentThreadId(); +#elif defined(WEBRTC_POSIX) + return pthread_self(); +#endif +} + +bool IsThreadRefEqual(const PlatformThreadRef& a, const PlatformThreadRef& b) { +#if defined(WEBRTC_WIN) + return a == b; +#elif defined(WEBRTC_POSIX) + return pthread_equal(a, b); +#endif +} + +} // namespace rtc diff --git a/webrtc/base/platform_thread.h b/webrtc/base/platform_thread.h new file mode 100644 index 0000000000..96290669be --- /dev/null +++ b/webrtc/base/platform_thread.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef WEBRTC_BASE_PLATFORM_THREAD_H_ +#define WEBRTC_BASE_PLATFORM_THREAD_H_ + +#if defined(WEBRTC_WIN) +#include +#include +#elif defined(WEBRTC_POSIX) +#include +#include +#endif + +namespace rtc { + +#if defined(WEBRTC_WIN) +typedef DWORD PlatformThreadId; +typedef DWORD PlatformThreadRef; +#elif defined(WEBRTC_POSIX) +typedef pid_t PlatformThreadId; +typedef pthread_t PlatformThreadRef; +#endif + +PlatformThreadId CurrentThreadId(); +PlatformThreadRef CurrentThreadRef(); + +// Compares two thread identifiers for equality. +bool IsThreadRefEqual(const PlatformThreadRef& a, const PlatformThreadRef& b); + +} // namespace rtc + +#endif // WEBRTC_BASE_PLATFORM_THREAD_H_ diff --git a/webrtc/base/thread_checker_impl.cc b/webrtc/base/thread_checker_impl.cc index 5d59c99c10..ea88308772 100644 --- a/webrtc/base/thread_checker_impl.cc +++ b/webrtc/base/thread_checker_impl.cc @@ -12,50 +12,8 @@ #include "webrtc/base/thread_checker_impl.h" -#include "webrtc/base/checks.h" - -#if defined(WEBRTC_LINUX) -#include -#endif - namespace rtc { -PlatformThreadId CurrentThreadId() { - PlatformThreadId ret; -#if defined(WEBRTC_WIN) - ret = GetCurrentThreadId(); -#elif defined(WEBRTC_POSIX) -#if defined(WEBRTC_MAC) || defined(WEBRTC_IOS) - ret = pthread_mach_thread_np(pthread_self()); -#elif defined(WEBRTC_LINUX) - ret = syscall(__NR_gettid); -#elif defined(WEBRTC_ANDROID) - ret = gettid(); -#else - // Default implementation for nacl and solaris. - ret = reinterpret_cast(pthread_self()); -#endif -#endif // defined(WEBRTC_POSIX) - DCHECK(ret); - return ret; -} - -PlatformThreadRef CurrentThreadRef() { -#if defined(WEBRTC_WIN) - return GetCurrentThreadId(); -#elif defined(WEBRTC_POSIX) - return pthread_self(); -#endif -} - -bool IsThreadRefEqual(const PlatformThreadRef& a, const PlatformThreadRef& b) { -#if defined(WEBRTC_WIN) - return a == b; -#elif defined(WEBRTC_POSIX) - return pthread_equal(a, b); -#endif -} - ThreadCheckerImpl::ThreadCheckerImpl() : valid_thread_(CurrentThreadRef()) { } diff --git a/webrtc/base/thread_checker_impl.h b/webrtc/base/thread_checker_impl.h index 5ad15bb515..835c53e3dc 100644 --- a/webrtc/base/thread_checker_impl.h +++ b/webrtc/base/thread_checker_impl.h @@ -13,31 +13,11 @@ #ifndef WEBRTC_BASE_THREAD_CHECKER_IMPL_H_ #define WEBRTC_BASE_THREAD_CHECKER_IMPL_H_ -#if defined(WEBRTC_POSIX) -#include -#include -#endif - #include "webrtc/base/criticalsection.h" +#include "webrtc/base/platform_thread.h" namespace rtc { -// Used for identifying the current thread. Always an integer value. -#if defined(WEBRTC_WIN) -typedef DWORD PlatformThreadId; -typedef DWORD PlatformThreadRef; -#elif defined(WEBRTC_POSIX) -typedef pid_t PlatformThreadId; -typedef pthread_t PlatformThreadRef; -#endif - -// TODO(tommi): This+PlatformThreadId belongs in a common thread related header. -PlatformThreadId CurrentThreadId(); -PlatformThreadRef CurrentThreadRef(); - -// Compares two thread identifiers for equality. -bool IsThreadRefEqual(const PlatformThreadRef& a, const PlatformThreadRef& b); - // Real implementation of ThreadChecker, for use in debug mode, or // for temporary use in release mode (e.g. to CHECK on a threading issue // seen only in the wild).