15d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana// Copyright 2016 The Chromium OS Authors. All rights reserved. 25d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana// Use of this source code is governed by a BSD-style license that can be 35d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana// found in the LICENSE file. 45d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 55d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana#ifndef CHROMIUMOS_WIDE_PROFILING_COMPAT_CROS_DETAIL_THREAD_H_ 65d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana#define CHROMIUMOS_WIDE_PROFILING_COMPAT_CROS_DETAIL_THREAD_H_ 75d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 85d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana#include "base/synchronization/waitable_event.h" 95d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana#include "base/threading/simple_thread.h" 105d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 115d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmananamespace quipper { 125d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 135d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmanaclass Thread : public quipper::compat::ThreadInterface, 145d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana public base::DelegateSimpleThread::Delegate { 155d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana public: 165d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana explicit Thread(const string& name_prefix) : thread_(this, name_prefix) {} 175d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 183fa0a5f4b88119fac65f86971738ea0202797b6elakshmana void Start() override { thread_.Start(); } 195d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 203fa0a5f4b88119fac65f86971738ea0202797b6elakshmana void Join() override { thread_.Join(); } 215d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 223fa0a5f4b88119fac65f86971738ea0202797b6elakshmana pid_t tid() override { return thread_.tid(); } 235d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 245d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana protected: 255d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana void Run() override = 0; 265d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 275d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana private: 285d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana base::DelegateSimpleThread thread_; 295d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana}; 305d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 315d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmanaclass Notification : public quipper::compat::NotificationInterface { 325d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana public: 333fa0a5f4b88119fac65f86971738ea0202797b6elakshmana Notification() 343fa0a5f4b88119fac65f86971738ea0202797b6elakshmana : event_(true /* manual_reset */, false /* initially_signaled */) {} 355d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 363fa0a5f4b88119fac65f86971738ea0202797b6elakshmana void Wait() override { event_.Wait(); } 375d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 385d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana bool WaitWithTimeout(int timeout_ms) override { 395d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana return event_.TimedWait(base::TimeDelta::FromMilliseconds(timeout_ms)); 405d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana } 415d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 423fa0a5f4b88119fac65f86971738ea0202797b6elakshmana void Notify() override { event_.Signal(); } 435d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 445d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana private: 455d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana base::WaitableEvent event_; 465d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana}; 475d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 485d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana} // namespace quipper 495d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana 505d24e0b95af51d6d4fc3fc2c20ed54193fbcd4b9lakshmana#endif // CHROMIUMOS_WIDE_PROFILING_COMPAT_CROS_DETAIL_THREAD_H_ 51