// Copyright 2015 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_THREAD_H_ #define CHROMIUMOS_WIDE_PROFILING_COMPAT_THREAD_H_ namespace quipper { namespace compat { // The Thread implementation used by quipper implements this interface. class ThreadInterface { public: // Constructor signature should match this: // Thread(const string& name_prefix); virtual ~ThreadInterface() {} // Start the thread. virtual void Start() = 0; // quipper threads must be joined exactly once. virtual void Join() = 0; virtual pid_t tid() = 0; protected: // Thread body. Override this. virtual void Run() = 0; }; // Synchronization tool that blocks waiting threads until notified to proceed by // another. class NotificationInterface { public: // Constructor signature should match this: // Notification(); virtual ~NotificationInterface() {} // Wait for Notify() to be called. virtual void Wait() = 0; // Wait for up to |timeout_ms| for a notification. Returns true if the // event was signaled. Returning false does not necessarily mean |timout_ms| // has passed. virtual bool WaitWithTimeout(int timeout_ms) = 0; // Trigger the notification, and wake up any waiting threads. virtual void Notify() = 0; }; } // namespace compat } // namespace quipper #include "detail/thread.h" #endif // CHROMIUMOS_WIDE_PROFILING_COMPAT_THREAD_H_