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

Side by Side Diff: mojo/system/core.h

Issue 621153003: Move mojo edk into mojo/edk (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix checkdeps Created 6 years, 2 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 unified diff | Download patch
« no previous file with comments | « mojo/system/constants.h ('k') | mojo/system/core.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef MOJO_SYSTEM_CORE_H_
6 #define MOJO_SYSTEM_CORE_H_
7
8 #include <stdint.h>
9
10 #include "base/macros.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/synchronization/lock.h"
14 #include "mojo/public/c/system/buffer.h"
15 #include "mojo/public/c/system/data_pipe.h"
16 #include "mojo/public/c/system/message_pipe.h"
17 #include "mojo/public/c/system/types.h"
18 #include "mojo/system/handle_table.h"
19 #include "mojo/system/mapping_table.h"
20 #include "mojo/system/memory.h"
21 #include "mojo/system/system_impl_export.h"
22
23 namespace mojo {
24
25 namespace embedder {
26 class PlatformSupport;
27 }
28
29 namespace system {
30
31 class Dispatcher;
32 struct HandleSignalsState;
33
34 // |Core| is an object that implements the Mojo system calls. All public methods
35 // are thread-safe.
36 class MOJO_SYSTEM_IMPL_EXPORT Core {
37 public:
38 // ---------------------------------------------------------------------------
39
40 // These methods are only to be used by via the embedder API (and internally):
41 explicit Core(scoped_ptr<embedder::PlatformSupport> platform_support);
42 virtual ~Core();
43
44 // Adds |dispatcher| to the handle table, returning the handle for it. Returns
45 // |MOJO_HANDLE_INVALID| on failure, namely if the handle table is full.
46 MojoHandle AddDispatcher(const scoped_refptr<Dispatcher>& dispatcher);
47
48 // Looks up the dispatcher for the given handle. Returns null if the handle is
49 // invalid.
50 scoped_refptr<Dispatcher> GetDispatcher(MojoHandle handle);
51
52 embedder::PlatformSupport* platform_support() const {
53 return platform_support_.get();
54 }
55
56 // ---------------------------------------------------------------------------
57
58 // System calls implementation:
59 MojoTimeTicks GetTimeTicksNow();
60 MojoResult Close(MojoHandle handle);
61 MojoResult Wait(MojoHandle handle,
62 MojoHandleSignals signals,
63 MojoDeadline deadline,
64 UserPointer<MojoHandleSignalsState> signals_state);
65 MojoResult WaitMany(UserPointer<const MojoHandle> handles,
66 UserPointer<const MojoHandleSignals> signals,
67 uint32_t num_handles,
68 MojoDeadline deadline,
69 UserPointer<uint32_t> result_index,
70 UserPointer<MojoHandleSignalsState> signals_states);
71 MojoResult CreateMessagePipe(
72 UserPointer<const MojoCreateMessagePipeOptions> options,
73 UserPointer<MojoHandle> message_pipe_handle0,
74 UserPointer<MojoHandle> message_pipe_handle1);
75 MojoResult WriteMessage(MojoHandle message_pipe_handle,
76 UserPointer<const void> bytes,
77 uint32_t num_bytes,
78 UserPointer<const MojoHandle> handles,
79 uint32_t num_handles,
80 MojoWriteMessageFlags flags);
81 MojoResult ReadMessage(MojoHandle message_pipe_handle,
82 UserPointer<void> bytes,
83 UserPointer<uint32_t> num_bytes,
84 UserPointer<MojoHandle> handles,
85 UserPointer<uint32_t> num_handles,
86 MojoReadMessageFlags flags);
87 MojoResult CreateDataPipe(
88 UserPointer<const MojoCreateDataPipeOptions> options,
89 UserPointer<MojoHandle> data_pipe_producer_handle,
90 UserPointer<MojoHandle> data_pipe_consumer_handle);
91 MojoResult WriteData(MojoHandle data_pipe_producer_handle,
92 UserPointer<const void> elements,
93 UserPointer<uint32_t> num_bytes,
94 MojoWriteDataFlags flags);
95 MojoResult BeginWriteData(MojoHandle data_pipe_producer_handle,
96 UserPointer<void*> buffer,
97 UserPointer<uint32_t> buffer_num_bytes,
98 MojoWriteDataFlags flags);
99 MojoResult EndWriteData(MojoHandle data_pipe_producer_handle,
100 uint32_t num_bytes_written);
101 MojoResult ReadData(MojoHandle data_pipe_consumer_handle,
102 UserPointer<void> elements,
103 UserPointer<uint32_t> num_bytes,
104 MojoReadDataFlags flags);
105 MojoResult BeginReadData(MojoHandle data_pipe_consumer_handle,
106 UserPointer<const void*> buffer,
107 UserPointer<uint32_t> buffer_num_bytes,
108 MojoReadDataFlags flags);
109 MojoResult EndReadData(MojoHandle data_pipe_consumer_handle,
110 uint32_t num_bytes_read);
111 MojoResult CreateSharedBuffer(
112 UserPointer<const MojoCreateSharedBufferOptions> options,
113 uint64_t num_bytes,
114 UserPointer<MojoHandle> shared_buffer_handle);
115 MojoResult DuplicateBufferHandle(
116 MojoHandle buffer_handle,
117 UserPointer<const MojoDuplicateBufferHandleOptions> options,
118 UserPointer<MojoHandle> new_buffer_handle);
119 MojoResult MapBuffer(MojoHandle buffer_handle,
120 uint64_t offset,
121 uint64_t num_bytes,
122 UserPointer<void*> buffer,
123 MojoMapBufferFlags flags);
124 MojoResult UnmapBuffer(UserPointer<void> buffer);
125
126 private:
127 friend bool internal::ShutdownCheckNoLeaks(Core*);
128
129 // Internal implementation of |Wait()| and |WaitMany()|; doesn't do basic
130 // validation of arguments. |*result_index| is only set if the result (whether
131 // success or failure) applies to a specific handle, so its value should be
132 // preinitialized to |static_cast<uint32_t>(-1)|.
133 MojoResult WaitManyInternal(const MojoHandle* handles,
134 const MojoHandleSignals* signals,
135 uint32_t num_handles,
136 MojoDeadline deadline,
137 uint32_t* result_index,
138 HandleSignalsState* signals_states);
139
140 const scoped_ptr<embedder::PlatformSupport> platform_support_;
141
142 // TODO(vtl): |handle_table_lock_| should be a reader-writer lock (if only we
143 // had them).
144 base::Lock handle_table_lock_; // Protects |handle_table_|.
145 HandleTable handle_table_;
146
147 base::Lock mapping_table_lock_; // Protects |mapping_table_|.
148 MappingTable mapping_table_;
149
150 DISALLOW_COPY_AND_ASSIGN(Core);
151 };
152
153 } // namespace system
154 } // namespace mojo
155
156 #endif // MOJO_SYSTEM_CORE_H_
OLDNEW
« no previous file with comments | « mojo/system/constants.h ('k') | mojo/system/core.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698