Index: mojo/edk/embedder/system_impl_private_entrypoints.cc |
diff --git a/mojo/edk/embedder/system_impl_private_entrypoints.cc b/mojo/edk/embedder/system_impl_private_entrypoints.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..aa024b152fc2ef132ebf467e1a993ef7ac8d9537 |
--- /dev/null |
+++ b/mojo/edk/embedder/system_impl_private_entrypoints.cc |
@@ -0,0 +1,259 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
viettrungluu
2015/04/06 23:21:02
Maybe you should add a test file for these entrypo
|
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "mojo/edk/embedder/embedder_internal.h" |
+#include "mojo/edk/system/core.h" |
+#include "mojo/edk/system/dispatcher.h" |
+#include "mojo/public/c/system/buffer.h" |
+#include "mojo/public/c/system/data_pipe.h" |
+#include "mojo/public/c/system/functions.h" |
+#include "mojo/public/c/system/message_pipe.h" |
+#include "mojo/public/platform/native/system_impl_private.h" |
+ |
+using mojo::embedder::internal::g_core; |
+using mojo::system::Core; |
+using mojo::system::Dispatcher; |
+using mojo::system::MakeUserPointer; |
+ |
+// Definitions of the system functions, but with an explicit parameter for the |
+// core object rather than using the default singleton. Also includes functions |
+// for manipulating core objects. |
+extern "C" { |
+ |
+MojoSystemImpl MojoSystemImplGetDefaultImpl() { |
+ return static_cast<MojoSystemImpl>(g_core); |
+} |
+ |
+// TODO before commiting: take core as parameter rather than using g_core? |
viettrungluu
2015/04/06 23:21:02
Maybe just make this a generic "TODO(ncbray): ..."
Nick Bray (chromium)
2015/04/07 23:51:05
Done.
|
+MojoSystemImpl MojoSystemImplCreateImpl() { |
+ Core* created_core = new Core(g_core->platform_support()); |
+ return static_cast<MojoSystemImpl>(created_core); |
+} |
+ |
+MojoResult MojoSystemImplTransferHandle(MojoSystemImpl from_system, |
+ MojoHandle handle, |
+ MojoSystemImpl to_system, |
+ MojoHandle* result_handle) { |
+ Core* from_core = static_cast<Core*>(from_system); |
+ if (from_core == nullptr) |
+ return MOJO_RESULT_INVALID_ARGUMENT; |
+ |
+ if (handle == MOJO_HANDLE_INVALID) |
+ return MOJO_RESULT_INVALID_ARGUMENT; |
+ |
+ Core* to_core = static_cast<Core*>(to_system); |
+ if (to_core == nullptr) |
+ return MOJO_RESULT_INVALID_ARGUMENT; |
+ |
+ if (result_handle == nullptr) |
+ return MOJO_RESULT_INVALID_ARGUMENT; |
+ |
+ scoped_refptr<Dispatcher> d; |
+ MojoResult result = from_core->GetAndRemoveDispatcher(handle, &d); |
+ if (result != MOJO_RESULT_OK) |
+ return result; |
+ |
+ // TODO document this case, including the fact that |handle| will no longer |
+ // will be valid. |
+ MojoHandle created_handle = to_core->AddDispatcher(d); |
+ if (created_handle == MOJO_HANDLE_INVALID) { |
+ LOG(ERROR) << "Could not transfer handle"; |
+ d->Close(); |
+ return MOJO_RESULT_RESOURCE_EXHAUSTED; |
+ } |
+ |
+ MakeUserPointer(result_handle).Put(created_handle); |
+ return MOJO_RESULT_OK; |
+} |
+ |
+MojoTimeTicks MojoSystemImplGetTimeTicksNow(MojoSystemImpl system) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->GetTimeTicksNow(); |
+} |
+ |
+MojoResult MojoSystemImplClose(MojoSystemImpl system, MojoHandle handle) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->Close(handle); |
+} |
+ |
+MojoResult MojoSystemImplWait(MojoSystemImpl system, |
+ MojoHandle handle, |
+ MojoHandleSignals signals, |
+ MojoDeadline deadline, |
+ MojoHandleSignalsState* signals_state) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->Wait(handle, signals, deadline, MakeUserPointer(signals_state)); |
+} |
+ |
+MojoResult MojoSystemImplWaitMany(MojoSystemImpl system, |
+ const MojoHandle* handles, |
+ const MojoHandleSignals* signals, |
+ uint32_t num_handles, |
+ MojoDeadline deadline, |
+ uint32_t* result_index, |
+ MojoHandleSignalsState* signals_states) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->WaitMany(MakeUserPointer(handles), MakeUserPointer(signals), |
+ num_handles, deadline, MakeUserPointer(result_index), |
+ MakeUserPointer(signals_states)); |
+} |
+ |
+MojoResult MojoSystemImplCreateMessagePipe( |
+ MojoSystemImpl system, |
+ const MojoCreateMessagePipeOptions* options, |
+ MojoHandle* message_pipe_handle0, |
+ MojoHandle* message_pipe_handle1) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->CreateMessagePipe(MakeUserPointer(options), |
+ MakeUserPointer(message_pipe_handle0), |
+ MakeUserPointer(message_pipe_handle1)); |
+} |
+ |
+MojoResult MojoSystemImplWriteMessage(MojoSystemImpl system, |
+ MojoHandle message_pipe_handle, |
+ const void* bytes, |
+ uint32_t num_bytes, |
+ const MojoHandle* handles, |
+ uint32_t num_handles, |
+ MojoWriteMessageFlags flags) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->WriteMessage(message_pipe_handle, MakeUserPointer(bytes), |
+ num_bytes, MakeUserPointer(handles), num_handles, |
+ flags); |
+} |
+ |
+MojoResult MojoSystemImplReadMessage(MojoSystemImpl system, |
+ MojoHandle message_pipe_handle, |
+ void* bytes, |
+ uint32_t* num_bytes, |
+ MojoHandle* handles, |
+ uint32_t* num_handles, |
+ MojoReadMessageFlags flags) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->ReadMessage(message_pipe_handle, MakeUserPointer(bytes), |
+ MakeUserPointer(num_bytes), MakeUserPointer(handles), |
+ MakeUserPointer(num_handles), flags); |
+} |
+ |
+MojoResult MojoSystemImplCreateDataPipe( |
+ MojoSystemImpl system, |
+ const MojoCreateDataPipeOptions* options, |
+ MojoHandle* data_pipe_producer_handle, |
+ MojoHandle* data_pipe_consumer_handle) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->CreateDataPipe(MakeUserPointer(options), |
+ MakeUserPointer(data_pipe_producer_handle), |
+ MakeUserPointer(data_pipe_consumer_handle)); |
+} |
+ |
+MojoResult MojoSystemImplWriteData(MojoSystemImpl system, |
+ MojoHandle data_pipe_producer_handle, |
+ const void* elements, |
+ uint32_t* num_elements, |
+ MojoWriteDataFlags flags) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->WriteData(data_pipe_producer_handle, MakeUserPointer(elements), |
+ MakeUserPointer(num_elements), flags); |
+} |
+ |
+MojoResult MojoSystemImplBeginWriteData(MojoSystemImpl system, |
+ MojoHandle data_pipe_producer_handle, |
+ void** buffer, |
+ uint32_t* buffer_num_elements, |
+ MojoWriteDataFlags flags) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->BeginWriteData(data_pipe_producer_handle, |
+ MakeUserPointer(buffer), |
+ MakeUserPointer(buffer_num_elements), flags); |
+} |
+ |
+MojoResult MojoSystemImplEndWriteData(MojoSystemImpl system, |
+ MojoHandle data_pipe_producer_handle, |
+ uint32_t num_elements_written) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->EndWriteData(data_pipe_producer_handle, num_elements_written); |
+} |
+ |
+MojoResult MojoSystemImplReadData(MojoSystemImpl system, |
+ MojoHandle data_pipe_consumer_handle, |
+ void* elements, |
+ uint32_t* num_elements, |
+ MojoReadDataFlags flags) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->ReadData(data_pipe_consumer_handle, MakeUserPointer(elements), |
+ MakeUserPointer(num_elements), flags); |
+} |
+ |
+MojoResult MojoSystemImplBeginReadData(MojoSystemImpl system, |
+ MojoHandle data_pipe_consumer_handle, |
+ const void** buffer, |
+ uint32_t* buffer_num_elements, |
+ MojoReadDataFlags flags) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->BeginReadData(data_pipe_consumer_handle, MakeUserPointer(buffer), |
+ MakeUserPointer(buffer_num_elements), flags); |
+} |
+ |
+MojoResult MojoSystemImplEndReadData(MojoSystemImpl system, |
+ MojoHandle data_pipe_consumer_handle, |
+ uint32_t num_elements_read) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->EndReadData(data_pipe_consumer_handle, num_elements_read); |
+} |
+ |
+MojoResult MojoSystemImplCreateSharedBuffer( |
+ MojoSystemImpl system, |
+ const MojoCreateSharedBufferOptions* options, |
+ uint64_t num_bytes, |
+ MojoHandle* shared_buffer_handle) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->CreateSharedBuffer(MakeUserPointer(options), num_bytes, |
+ MakeUserPointer(shared_buffer_handle)); |
+} |
+ |
+MojoResult MojoSystemImplDuplicateBufferHandle( |
+ MojoSystemImpl system, |
+ MojoHandle buffer_handle, |
+ const MojoDuplicateBufferHandleOptions* options, |
+ MojoHandle* new_buffer_handle) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->DuplicateBufferHandle(buffer_handle, MakeUserPointer(options), |
+ MakeUserPointer(new_buffer_handle)); |
+} |
+ |
+MojoResult MojoSystemImplMapBuffer(MojoSystemImpl system, |
+ MojoHandle buffer_handle, |
+ uint64_t offset, |
+ uint64_t num_bytes, |
+ void** buffer, |
+ MojoMapBufferFlags flags) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->MapBuffer(buffer_handle, offset, num_bytes, |
+ MakeUserPointer(buffer), flags); |
+} |
+ |
+MojoResult MojoSystemImplUnmapBuffer(MojoSystemImpl system, void* buffer) { |
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system); |
+ DCHECK(core); |
+ return core->UnmapBuffer(MakeUserPointer(buffer)); |
+} |
+ |
+} // extern "C" |