// 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_