| // Copyright 2016 The Chromium OS 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 CHROMIUMOS_WIDE_PROFILING_COMPAT_CROS_DETAIL_THREAD_H_ |
| #define CHROMIUMOS_WIDE_PROFILING_COMPAT_CROS_DETAIL_THREAD_H_ |
| |
| #include "base/synchronization/waitable_event.h" |
| #include "base/threading/simple_thread.h" |
| |
| namespace quipper { |
| |
| class Thread : public quipper::compat::ThreadInterface, |
| public base::DelegateSimpleThread::Delegate { |
| public: |
| explicit Thread(const string& name_prefix) : thread_(this, name_prefix) {} |
| |
| void Start() override { thread_.Start(); } |
| |
| void Join() override { thread_.Join(); } |
| |
| pid_t tid() override { return thread_.tid(); } |
| |
| protected: |
| void Run() override = 0; |
| |
| private: |
| base::DelegateSimpleThread thread_; |
| }; |
| |
| class Notification : public quipper::compat::NotificationInterface { |
| public: |
| Notification() |
| : event_(true /* manual_reset */, false /* initially_signaled */) {} |
| |
| void Wait() override { event_.Wait(); } |
| |
| bool WaitWithTimeout(int timeout_ms) override { |
| return event_.TimedWait(base::TimeDelta::FromMilliseconds(timeout_ms)); |
| } |
| |
| void Notify() override { event_.Signal(); } |
| |
| private: |
| base::WaitableEvent event_; |
| }; |
| |
| } // namespace quipper |
| |
| #endif // CHROMIUMOS_WIDE_PROFILING_COMPAT_CROS_DETAIL_THREAD_H_ |