| Index: mojo/public/platform/dart/dart_handle_watcher.h
|
| diff --git a/mojo/public/platform/dart/dart_handle_watcher.h b/mojo/public/platform/dart/dart_handle_watcher.h
|
| deleted file mode 100644
|
| index 7bc2efa167b6a9ec895ad16a0e7f27f190e83463..0000000000000000000000000000000000000000
|
| --- a/mojo/public/platform/dart/dart_handle_watcher.h
|
| +++ /dev/null
|
| @@ -1,216 +0,0 @@
|
| -// Copyright 2015 The Chromium 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 MOJO_PUBLIC_PLATFORM_DART_DART_HANDLE_WATCHER_H_
|
| -#define MOJO_PUBLIC_PLATFORM_DART_DART_HANDLE_WATCHER_H_
|
| -
|
| -#include <mojo/result.h>
|
| -#include <mojo/system/handle.h>
|
| -
|
| -#include <mutex>
|
| -#include <thread>
|
| -#include <unordered_map>
|
| -
|
| -#include "dart/runtime/include/dart_api.h"
|
| -
|
| -#include "mojo/public/cpp/environment/logging.h"
|
| -#include "mojo/public/cpp/system/macros.h"
|
| -
|
| -namespace mojo {
|
| -namespace dart {
|
| -
|
| -#define MOJO_HANDLE_SIGNAL_ALL (MOJO_HANDLE_SIGNAL_READABLE | \
|
| - MOJO_HANDLE_SIGNAL_WRITABLE | \
|
| - MOJO_HANDLE_SIGNAL_PEER_CLOSED)
|
| -
|
| -// HandleWatcherCommands are sent to HandleWatchers.
|
| -class HandleWatcherCommand {
|
| - public:
|
| - enum Command {
|
| - kCommandAddHandle = 0,
|
| - kCommandRemoveHandle = 1,
|
| - kCommandCloseHandle = 2,
|
| - kCommandAddTimer = 3,
|
| - kCommandShutdownHandleWatcher = 4,
|
| - };
|
| -
|
| - // Construct a command to listen for |handle| to have |signals| and ping
|
| - // |port| when this happens.
|
| - static HandleWatcherCommand Add(MojoHandle handle,
|
| - MojoHandleSignals signals,
|
| - Dart_Port port) {
|
| - HandleWatcherCommand result;
|
| - result.handle_or_deadline_ = static_cast<int64_t>(handle);
|
| - result.port_ = port;
|
| - result.set_data(kCommandAddHandle, signals);
|
| - return result;
|
| - }
|
| -
|
| - // Construct a command to stop listening for |handle|.
|
| - static HandleWatcherCommand Remove(MojoHandle handle) {
|
| - HandleWatcherCommand result;
|
| - result.handle_or_deadline_ = static_cast<int64_t>(handle);
|
| - result.port_ = ILLEGAL_PORT;
|
| - result.set_data(kCommandRemoveHandle, MOJO_HANDLE_SIGNAL_NONE);
|
| - return result;
|
| - }
|
| -
|
| - // Construct a command to close |handle| and ping |port| when done.
|
| - static HandleWatcherCommand Close(MojoHandle handle,
|
| - Dart_Port port) {
|
| - HandleWatcherCommand result;
|
| - result.handle_or_deadline_ = static_cast<int64_t>(handle);
|
| - result.port_ = port;
|
| - result.set_data(kCommandCloseHandle, MOJO_HANDLE_SIGNAL_NONE);
|
| - return result;
|
| - }
|
| -
|
| - // Construct a command to ping |port| when it is |deadline|.
|
| - static HandleWatcherCommand Timer(int64_t deadline,
|
| - Dart_Port port) {
|
| - HandleWatcherCommand result;
|
| - result.handle_or_deadline_ = deadline;
|
| - result.port_ = port;
|
| - result.set_data(kCommandAddTimer, MOJO_HANDLE_SIGNAL_NONE);
|
| - return result;
|
| - }
|
| -
|
| - // Construct a command to shutdown the handle watcher thread.
|
| - static HandleWatcherCommand Shutdown() {
|
| - HandleWatcherCommand result;
|
| - result.handle_or_deadline_ = MOJO_HANDLE_INVALID;
|
| - result.port_ = ILLEGAL_PORT;
|
| - result.set_data(kCommandShutdownHandleWatcher, MOJO_HANDLE_SIGNAL_NONE);
|
| - return result;
|
| - }
|
| -
|
| - // Construct an empty command.
|
| - static HandleWatcherCommand Empty() {
|
| - HandleWatcherCommand result;
|
| - return result;
|
| - }
|
| -
|
| - // Construct a command sent from Dart code.
|
| - static HandleWatcherCommand FromDart(int64_t command,
|
| - int64_t handle_or_deadline,
|
| - Dart_Port port,
|
| - int64_t signals) {
|
| - switch (command) {
|
| - case kCommandAddHandle:
|
| - return Add(handle_or_deadline, signals, port);
|
| - break;
|
| - case kCommandRemoveHandle:
|
| - return Remove(handle_or_deadline);
|
| - break;
|
| - case kCommandCloseHandle:
|
| - return Close(handle_or_deadline, port);
|
| - break;
|
| - case kCommandAddTimer:
|
| - return Timer(handle_or_deadline, port);
|
| - break;
|
| - case kCommandShutdownHandleWatcher:
|
| - return Shutdown();
|
| - break;
|
| - default:
|
| - // Unreachable.
|
| - MOJO_CHECK(false);
|
| - return Empty();
|
| - }
|
| - }
|
| -
|
| - // Get the command.
|
| - Command command() const {
|
| - return static_cast<Command>((data_ >> 3));
|
| - }
|
| -
|
| - // Get the signals associated with the command.
|
| - MojoHandleSignals signals() const {
|
| - return data_ & MOJO_HANDLE_SIGNAL_ALL;
|
| - }
|
| -
|
| - // Get the handle associated with the command.
|
| - MojoHandle handle() const {
|
| - return static_cast<MojoHandle>(handle_or_deadline_);
|
| - }
|
| -
|
| - // Get the deadline associated with the command.
|
| - int64_t deadline() const {
|
| - return handle_or_deadline_;
|
| - }
|
| -
|
| - // Get the port associated with the command.
|
| - Dart_Port port() const {
|
| - return port_;
|
| - }
|
| -
|
| - private:
|
| - HandleWatcherCommand() {
|
| - handle_or_deadline_ = 0;
|
| - port_ = ILLEGAL_PORT;
|
| - data_ = 0;
|
| - }
|
| -
|
| - void set_data(Command command, MojoHandleSignals signals) {
|
| - MOJO_CHECK(MOJO_HANDLE_SIGNAL_ALL < (1 << 3));
|
| - data_ = (command << 3) | (signals & MOJO_HANDLE_SIGNAL_ALL);
|
| - }
|
| -
|
| - int64_t handle_or_deadline_;
|
| - Dart_Port port_;
|
| - int64_t data_;
|
| -};
|
| -
|
| -
|
| -// A Dart HandleWatcher can be started by calling |HandleWatcher::Start|.
|
| -// Each |Start| call creates a message pipe for communicating with the
|
| -// handle watcher and spawns a thread where the handle watcher waits for
|
| -// events on handles.
|
| -//
|
| -// NOTE: If multiple handle watchers are needed, |Start| can be safely called
|
| -// multiple times because all state is held inside the spawned thread.
|
| -class HandleWatcher {
|
| - public:
|
| - // Starts a new HandleWatcher thread and returns the message pipe handle
|
| - // that is used to communicate with the handle watcher. Returns
|
| - // the handle that should be passed to |SendCommand|.
|
| - static MojoHandle Start();
|
| -
|
| - // Encode a |command| for the handle watcher and write it to
|
| - // |control_pipe_producer_handle|.
|
| - static MojoResult SendCommand(MojoHandle control_pipe_producer_handle,
|
| - const HandleWatcherCommand& command);
|
| -
|
| - // Stops and joins the handle watcher thread at the other end of the
|
| - // given pipe handle.
|
| - static void Stop(MojoHandle control_pipe_consumer_handle);
|
| -
|
| - // Stops and joins all handle watcher threads.
|
| - static void StopAll();
|
| -
|
| - private:
|
| - static void ThreadMain(MojoHandle control_pipe_consumer_handle);
|
| -
|
| - // Remove the mapping for |handle| from |handle_watcher_threads_| and return
|
| - // the associated thread object. Assumes |handle_watcher_threads_mutex_| is
|
| - // held.
|
| - static std::thread* RemoveLocked(MojoHandle handle);
|
| -
|
| - // Remove the mapping for |handle| from |handle_watcher_threads_| and join
|
| - // the associated thread. Assumes |handle_watcher_threads_mutex_| is held.
|
| - static void StopLocked(MojoHandle handle);
|
| -
|
| - // A mapping from control handle to handle watcher thread.
|
| - static std::unordered_map<MojoHandle, std::thread*> handle_watcher_threads_;
|
| -
|
| - // Protects |handle_watcher_threads_|
|
| - static std::mutex handle_watcher_threads_mutex_;
|
| -
|
| - MOJO_DISALLOW_COPY_AND_ASSIGN(HandleWatcher);
|
| -};
|
| -
|
| -
|
| -} // namespace dart
|
| -} // namespace mojo
|
| -
|
| -#endif // MOJO_PUBLIC_PLATFORM_DART_DART_HANDLE_WATCHER_H_
|
|
|