| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 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 #include "../../../../../../mojo/edk/embedder/embedder_internal.h" | |
| 6 #include "../../../../../../mojo/edk/system/core.h" | |
| 7 #include "base/command_line.h" | |
| 8 #include "base/lazy_instance.h" | |
| 9 #include "mojo/public/c/system/buffer.h" | |
| 10 #include "mojo/public/c/system/data_pipe.h" | |
| 11 #include "mojo/public/c/system/functions.h" | |
| 12 #include "mojo/public/c/system/message_pipe.h" | |
| 13 #include "mojo/public/c/system/wait_set.h" | |
| 14 #include "third_party/mojo/src/mojo/edk/embedder/embedder_internal.h" | |
| 15 #include "third_party/mojo/src/mojo/edk/system/core.h" | |
| 16 | |
| 17 using mojo::embedder::internal::g_core; | |
| 18 using mojo::system::MakeUserPointer; | |
| 19 | |
| 20 namespace { | |
| 21 | |
| 22 struct UseNewEDKChecker { | |
| 23 UseNewEDKChecker() { | |
| 24 use_new = base::CommandLine::ForCurrentProcess()->HasSwitch("use-new-edk"); | |
| 25 } | |
| 26 | |
| 27 bool use_new; | |
| 28 }; | |
| 29 | |
| 30 // This is Leaky to avoid a recursive lock acquisition in AtExitManager. | |
| 31 base::LazyInstance<UseNewEDKChecker>::Leaky g_use_new_checker = | |
| 32 LAZY_INSTANCE_INITIALIZER; | |
| 33 | |
| 34 bool UseNewEDK() { | |
| 35 return g_use_new_checker.Get().use_new; | |
| 36 } | |
| 37 | |
| 38 } // namespace | |
| 39 | |
| 40 // Definitions of the system functions. | |
| 41 extern "C" { | |
| 42 MojoTimeTicks MojoGetTimeTicksNow() { | |
| 43 if (UseNewEDK()) | |
| 44 return mojo::edk::internal::g_core->GetTimeTicksNow(); | |
| 45 return g_core->GetTimeTicksNow(); | |
| 46 } | |
| 47 | |
| 48 MojoResult MojoClose(MojoHandle handle) { | |
| 49 if (UseNewEDK()) | |
| 50 return mojo::edk::internal::g_core->Close(handle); | |
| 51 return g_core->Close(handle); | |
| 52 } | |
| 53 | |
| 54 MojoResult MojoWait(MojoHandle handle, | |
| 55 MojoHandleSignals signals, | |
| 56 MojoDeadline deadline, | |
| 57 MojoHandleSignalsState* signals_state) { | |
| 58 if (UseNewEDK()) | |
| 59 return mojo::edk::internal::g_core->Wait( | |
| 60 handle, signals, deadline, signals_state); | |
| 61 return g_core->Wait(handle, signals, deadline, | |
| 62 MakeUserPointer(signals_state)); | |
| 63 } | |
| 64 | |
| 65 MojoResult MojoWaitMany(const MojoHandle* handles, | |
| 66 const MojoHandleSignals* signals, | |
| 67 uint32_t num_handles, | |
| 68 MojoDeadline deadline, | |
| 69 uint32_t* result_index, | |
| 70 MojoHandleSignalsState* signals_states) { | |
| 71 if (UseNewEDK()) | |
| 72 return mojo::edk::internal::g_core->WaitMany( | |
| 73 handles, signals, num_handles, deadline, result_index, signals_states); | |
| 74 return g_core->WaitMany(MakeUserPointer(handles), MakeUserPointer(signals), | |
| 75 num_handles, deadline, MakeUserPointer(result_index), | |
| 76 MakeUserPointer(signals_states)); | |
| 77 } | |
| 78 | |
| 79 MojoResult MojoCreateWaitSet(MojoHandle* wait_set_handle) { | |
| 80 if (UseNewEDK()) | |
| 81 return mojo::edk::internal::g_core->CreateWaitSet(wait_set_handle); | |
| 82 return g_core->CreateWaitSet(MakeUserPointer(wait_set_handle)); | |
| 83 } | |
| 84 | |
| 85 MojoResult MojoAddHandle(MojoHandle wait_set_handle, | |
| 86 MojoHandle handle, | |
| 87 MojoHandleSignals signals) { | |
| 88 if (UseNewEDK()) | |
| 89 return mojo::edk::internal::g_core->AddHandle(wait_set_handle, handle, | |
| 90 signals); | |
| 91 return g_core->AddHandle(wait_set_handle, handle, signals); | |
| 92 } | |
| 93 | |
| 94 MojoResult MojoRemoveHandle(MojoHandle wait_set_handle, | |
| 95 MojoHandle handle) { | |
| 96 if (UseNewEDK()) | |
| 97 return mojo::edk::internal::g_core->RemoveHandle(wait_set_handle, handle); | |
| 98 return g_core->RemoveHandle(wait_set_handle, handle); | |
| 99 } | |
| 100 | |
| 101 MojoResult MojoGetReadyHandles(MojoHandle wait_set_handle, | |
| 102 uint32_t* count, | |
| 103 MojoHandle* handles, | |
| 104 MojoResult* results, | |
| 105 struct MojoHandleSignalsState *signals_states) { | |
| 106 if (UseNewEDK()) | |
| 107 return mojo::edk::internal::g_core->GetReadyHandles( | |
| 108 wait_set_handle, count, handles, results, signals_states); | |
| 109 return g_core->GetReadyHandles(wait_set_handle, MakeUserPointer(count), | |
| 110 MakeUserPointer(handles), | |
| 111 MakeUserPointer(results), | |
| 112 MakeUserPointer(signals_states)); | |
| 113 } | |
| 114 | |
| 115 MojoResult MojoCreateMessagePipe(const MojoCreateMessagePipeOptions* options, | |
| 116 MojoHandle* message_pipe_handle0, | |
| 117 MojoHandle* message_pipe_handle1) { | |
| 118 if (UseNewEDK()) | |
| 119 return mojo::edk::internal::g_core->CreateMessagePipe( | |
| 120 options, message_pipe_handle0, message_pipe_handle1); | |
| 121 return g_core->CreateMessagePipe(MakeUserPointer(options), | |
| 122 MakeUserPointer(message_pipe_handle0), | |
| 123 MakeUserPointer(message_pipe_handle1)); | |
| 124 } | |
| 125 | |
| 126 MojoResult MojoWriteMessage(MojoHandle message_pipe_handle, | |
| 127 const void* bytes, | |
| 128 uint32_t num_bytes, | |
| 129 const MojoHandle* handles, | |
| 130 uint32_t num_handles, | |
| 131 MojoWriteMessageFlags flags) { | |
| 132 if (UseNewEDK()) | |
| 133 return mojo::edk::internal::g_core->WriteMessage( | |
| 134 message_pipe_handle, bytes, num_bytes, handles, num_handles, flags); | |
| 135 return g_core->WriteMessage(message_pipe_handle, MakeUserPointer(bytes), | |
| 136 num_bytes, MakeUserPointer(handles), num_handles, | |
| 137 flags); | |
| 138 } | |
| 139 | |
| 140 MojoResult MojoReadMessage(MojoHandle message_pipe_handle, | |
| 141 void* bytes, | |
| 142 uint32_t* num_bytes, | |
| 143 MojoHandle* handles, | |
| 144 uint32_t* num_handles, | |
| 145 MojoReadMessageFlags flags) { | |
| 146 if (UseNewEDK()) | |
| 147 return mojo::edk::internal::g_core->ReadMessage( | |
| 148 message_pipe_handle, bytes, num_bytes, handles, num_handles, flags); | |
| 149 return g_core->ReadMessage( | |
| 150 message_pipe_handle, MakeUserPointer(bytes), MakeUserPointer(num_bytes), | |
| 151 MakeUserPointer(handles), MakeUserPointer(num_handles), flags); | |
| 152 } | |
| 153 | |
| 154 MojoResult MojoCreateDataPipe(const MojoCreateDataPipeOptions* options, | |
| 155 MojoHandle* data_pipe_producer_handle, | |
| 156 MojoHandle* data_pipe_consumer_handle) { | |
| 157 if (UseNewEDK()) | |
| 158 return mojo::edk::internal::g_core->CreateDataPipe( | |
| 159 options, data_pipe_producer_handle, data_pipe_consumer_handle); | |
| 160 return g_core->CreateDataPipe(MakeUserPointer(options), | |
| 161 MakeUserPointer(data_pipe_producer_handle), | |
| 162 MakeUserPointer(data_pipe_consumer_handle)); | |
| 163 } | |
| 164 | |
| 165 MojoResult MojoWriteData(MojoHandle data_pipe_producer_handle, | |
| 166 const void* elements, | |
| 167 uint32_t* num_elements, | |
| 168 MojoWriteDataFlags flags) { | |
| 169 if (UseNewEDK()) | |
| 170 return mojo::edk::internal::g_core->WriteData( | |
| 171 data_pipe_producer_handle, elements, num_elements, flags); | |
| 172 return g_core->WriteData(data_pipe_producer_handle, MakeUserPointer(elements), | |
| 173 MakeUserPointer(num_elements), flags); | |
| 174 } | |
| 175 | |
| 176 MojoResult MojoBeginWriteData(MojoHandle data_pipe_producer_handle, | |
| 177 void** buffer, | |
| 178 uint32_t* buffer_num_elements, | |
| 179 MojoWriteDataFlags flags) { | |
| 180 if (UseNewEDK()) | |
| 181 return mojo::edk::internal::g_core->BeginWriteData( | |
| 182 data_pipe_producer_handle, buffer, buffer_num_elements, flags); | |
| 183 return g_core->BeginWriteData(data_pipe_producer_handle, | |
| 184 MakeUserPointer(buffer), | |
| 185 MakeUserPointer(buffer_num_elements), flags); | |
| 186 } | |
| 187 | |
| 188 MojoResult MojoEndWriteData(MojoHandle data_pipe_producer_handle, | |
| 189 uint32_t num_elements_written) { | |
| 190 if (UseNewEDK()) | |
| 191 return mojo::edk::internal::g_core->EndWriteData( | |
| 192 data_pipe_producer_handle, num_elements_written); | |
| 193 return g_core->EndWriteData(data_pipe_producer_handle, num_elements_written); | |
| 194 } | |
| 195 | |
| 196 MojoResult MojoReadData(MojoHandle data_pipe_consumer_handle, | |
| 197 void* elements, | |
| 198 uint32_t* num_elements, | |
| 199 MojoReadDataFlags flags) { | |
| 200 if (UseNewEDK()) | |
| 201 return mojo::edk::internal::g_core->ReadData( | |
| 202 data_pipe_consumer_handle, elements, num_elements, flags); | |
| 203 return g_core->ReadData(data_pipe_consumer_handle, MakeUserPointer(elements), | |
| 204 MakeUserPointer(num_elements), flags); | |
| 205 } | |
| 206 | |
| 207 MojoResult MojoBeginReadData(MojoHandle data_pipe_consumer_handle, | |
| 208 const void** buffer, | |
| 209 uint32_t* buffer_num_elements, | |
| 210 MojoReadDataFlags flags) { | |
| 211 if (UseNewEDK()) | |
| 212 return mojo::edk::internal::g_core->BeginReadData( | |
| 213 data_pipe_consumer_handle, buffer, buffer_num_elements, flags); | |
| 214 return g_core->BeginReadData(data_pipe_consumer_handle, | |
| 215 MakeUserPointer(buffer), | |
| 216 MakeUserPointer(buffer_num_elements), flags); | |
| 217 } | |
| 218 | |
| 219 MojoResult MojoEndReadData(MojoHandle data_pipe_consumer_handle, | |
| 220 uint32_t num_elements_read) { | |
| 221 if (UseNewEDK()) | |
| 222 return mojo::edk::internal::g_core->EndReadData( | |
| 223 data_pipe_consumer_handle, num_elements_read); | |
| 224 return g_core->EndReadData(data_pipe_consumer_handle, num_elements_read); | |
| 225 } | |
| 226 | |
| 227 MojoResult MojoCreateSharedBuffer( | |
| 228 const struct MojoCreateSharedBufferOptions* options, | |
| 229 uint64_t num_bytes, | |
| 230 MojoHandle* shared_buffer_handle) { | |
| 231 if (UseNewEDK()) | |
| 232 return mojo::edk::internal::g_core->CreateSharedBuffer( | |
| 233 options, num_bytes, shared_buffer_handle); | |
| 234 return g_core->CreateSharedBuffer(MakeUserPointer(options), num_bytes, | |
| 235 MakeUserPointer(shared_buffer_handle)); | |
| 236 } | |
| 237 | |
| 238 MojoResult MojoDuplicateBufferHandle( | |
| 239 MojoHandle buffer_handle, | |
| 240 const struct MojoDuplicateBufferHandleOptions* options, | |
| 241 MojoHandle* new_buffer_handle) { | |
| 242 if (UseNewEDK()) | |
| 243 return mojo::edk::internal::g_core->DuplicateBufferHandle( | |
| 244 buffer_handle, options, new_buffer_handle); | |
| 245 return g_core->DuplicateBufferHandle(buffer_handle, MakeUserPointer(options), | |
| 246 MakeUserPointer(new_buffer_handle)); | |
| 247 } | |
| 248 | |
| 249 MojoResult MojoMapBuffer(MojoHandle buffer_handle, | |
| 250 uint64_t offset, | |
| 251 uint64_t num_bytes, | |
| 252 void** buffer, | |
| 253 MojoMapBufferFlags flags) { | |
| 254 if (UseNewEDK()) | |
| 255 return mojo::edk::internal::g_core->MapBuffer( | |
| 256 buffer_handle, offset, num_bytes, buffer, flags); | |
| 257 return g_core->MapBuffer(buffer_handle, offset, num_bytes, | |
| 258 MakeUserPointer(buffer), flags); | |
| 259 } | |
| 260 | |
| 261 MojoResult MojoUnmapBuffer(void* buffer) { | |
| 262 if (UseNewEDK()) | |
| 263 return mojo::edk::internal::g_core->UnmapBuffer(buffer); | |
| 264 return g_core->UnmapBuffer(MakeUserPointer(buffer)); | |
| 265 } | |
| 266 | |
| 267 } // extern "C" | |
| OLD | NEW |