Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: mojo/public/platform/dart/dart_handle_watcher.h

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/platform/dart/README.md ('k') | mojo/public/platform/dart/dart_handle_watcher.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « mojo/public/platform/dart/README.md ('k') | mojo/public/platform/dart/dart_handle_watcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698