| Index: mojo/public/platform/native/system_thunks.cc
|
| diff --git a/mojo/public/system/core_private.cc b/mojo/public/platform/native/system_thunks.cc
|
| similarity index 60%
|
| copy from mojo/public/system/core_private.cc
|
| copy to mojo/public/platform/native/system_thunks.cc
|
| index bd9d6b85fdf2579037c392f0b4b43428d4da0265..79a132bc9f1900b42505985fb581c7cec12296bf 100644
|
| --- a/mojo/public/system/core_private.cc
|
| +++ b/mojo/public/platform/native/system_thunks.cc
|
| @@ -2,44 +2,44 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "mojo/public/system/core_private.h"
|
| +#include "mojo/public/platform/native/system_thunks.h"
|
|
|
| #include <assert.h>
|
| #include <stddef.h>
|
|
|
| -static mojo::Core* g_core = NULL;
|
| -
|
| extern "C" {
|
|
|
| +static MojoSystemThunks g_thunks = {0};
|
| +
|
| MojoTimeTicks MojoGetTimeTicksNow() {
|
| - assert(g_core);
|
| - return g_core->GetTimeTicksNow();
|
| + assert(g_thunks.GetTimeTicksNow);
|
| + return g_thunks.GetTimeTicksNow();
|
| }
|
|
|
| MojoResult MojoClose(MojoHandle handle) {
|
| - assert(g_core);
|
| - return g_core->Close(handle);
|
| + assert(g_thunks.Close);
|
| + return g_thunks.Close(handle);
|
| }
|
|
|
| MojoResult MojoWait(MojoHandle handle,
|
| MojoWaitFlags flags,
|
| MojoDeadline deadline) {
|
| - assert(g_core);
|
| - return g_core->Wait(handle, flags, deadline);
|
| + assert(g_thunks.Wait);
|
| + return g_thunks.Wait(handle, flags, deadline);
|
| }
|
|
|
| MojoResult MojoWaitMany(const MojoHandle* handles,
|
| const MojoWaitFlags* flags,
|
| uint32_t num_handles,
|
| MojoDeadline deadline) {
|
| - assert(g_core);
|
| - return g_core->WaitMany(handles, flags, num_handles, deadline);
|
| + assert(g_thunks.WaitMany);
|
| + return g_thunks.WaitMany(handles, flags, num_handles, deadline);
|
| }
|
|
|
| MojoResult MojoCreateMessagePipe(MojoHandle* message_pipe_handle0,
|
| MojoHandle* message_pipe_handle1) {
|
| - assert(g_core);
|
| - return g_core->CreateMessagePipe(message_pipe_handle0, message_pipe_handle1);
|
| + assert(g_thunks.CreateMessagePipe);
|
| + return g_thunks.CreateMessagePipe(message_pipe_handle0, message_pipe_handle1);
|
| }
|
|
|
| MojoResult MojoWriteMessage(MojoHandle message_pipe_handle,
|
| @@ -48,9 +48,9 @@ MojoResult MojoWriteMessage(MojoHandle message_pipe_handle,
|
| const MojoHandle* handles,
|
| uint32_t num_handles,
|
| MojoWriteMessageFlags flags) {
|
| - assert(g_core);
|
| - return g_core->WriteMessage(message_pipe_handle, bytes, num_bytes, handles,
|
| - num_handles, flags);
|
| + assert(g_thunks.WriteMessage);
|
| + return g_thunks.WriteMessage(message_pipe_handle, bytes, num_bytes, handles,
|
| + num_handles, flags);
|
| }
|
|
|
| MojoResult MojoReadMessage(MojoHandle message_pipe_handle,
|
| @@ -59,82 +59,82 @@ MojoResult MojoReadMessage(MojoHandle message_pipe_handle,
|
| MojoHandle* handles,
|
| uint32_t* num_handles,
|
| MojoReadMessageFlags flags) {
|
| - assert(g_core);
|
| - return g_core->ReadMessage(message_pipe_handle, bytes, num_bytes, handles,
|
| - num_handles, flags);
|
| + assert(g_thunks.ReadMessage);
|
| + return g_thunks.ReadMessage(message_pipe_handle, bytes, num_bytes, handles,
|
| + num_handles, flags);
|
| }
|
|
|
| MojoResult MojoCreateDataPipe(const MojoCreateDataPipeOptions* options,
|
| MojoHandle* data_pipe_producer_handle,
|
| MojoHandle* data_pipe_consumer_handle) {
|
| - assert(g_core);
|
| - return g_core->CreateDataPipe(options, data_pipe_producer_handle,
|
| - data_pipe_consumer_handle);
|
| + assert(g_thunks.CreateDataPipe);
|
| + return g_thunks.CreateDataPipe(options, data_pipe_producer_handle,
|
| + data_pipe_consumer_handle);
|
| }
|
|
|
| MojoResult MojoWriteData(MojoHandle data_pipe_producer_handle,
|
| const void* elements,
|
| uint32_t* num_elements,
|
| MojoWriteDataFlags flags) {
|
| - assert(g_core);
|
| - return g_core->WriteData(data_pipe_producer_handle, elements, num_elements,
|
| - flags);
|
| + assert(g_thunks.WriteData);
|
| + return g_thunks.WriteData(data_pipe_producer_handle, elements, num_elements,
|
| + flags);
|
| }
|
|
|
| MojoResult MojoBeginWriteData(MojoHandle data_pipe_producer_handle,
|
| void** buffer,
|
| uint32_t* buffer_num_elements,
|
| MojoWriteDataFlags flags) {
|
| - assert(g_core);
|
| - return g_core->BeginWriteData(data_pipe_producer_handle, buffer,
|
| - buffer_num_elements, flags);
|
| + assert(g_thunks.BeginWriteData);
|
| + return g_thunks.BeginWriteData(data_pipe_producer_handle, buffer,
|
| + buffer_num_elements, flags);
|
| }
|
|
|
| MojoResult MojoEndWriteData(MojoHandle data_pipe_producer_handle,
|
| uint32_t num_elements_written) {
|
| - assert(g_core);
|
| - return g_core->EndWriteData(data_pipe_producer_handle, num_elements_written);
|
| + assert(g_thunks.EndWriteData);
|
| + return g_thunks.EndWriteData(data_pipe_producer_handle, num_elements_written);
|
| }
|
|
|
| MojoResult MojoReadData(MojoHandle data_pipe_consumer_handle,
|
| void* elements,
|
| uint32_t* num_elements,
|
| MojoReadDataFlags flags) {
|
| - assert(g_core);
|
| - return g_core->ReadData(data_pipe_consumer_handle, elements, num_elements,
|
| - flags);
|
| + assert(g_thunks.ReadData);
|
| + return g_thunks.ReadData(data_pipe_consumer_handle, elements, num_elements,
|
| + flags);
|
| }
|
|
|
| MojoResult MojoBeginReadData(MojoHandle data_pipe_consumer_handle,
|
| const void** buffer,
|
| uint32_t* buffer_num_elements,
|
| MojoReadDataFlags flags) {
|
| - assert(g_core);
|
| - return g_core->BeginReadData(data_pipe_consumer_handle, buffer,
|
| - buffer_num_elements, flags);
|
| + assert(g_thunks.BeginReadData);
|
| + return g_thunks.BeginReadData(data_pipe_consumer_handle, buffer,
|
| + buffer_num_elements, flags);
|
| }
|
|
|
| MojoResult MojoEndReadData(MojoHandle data_pipe_consumer_handle,
|
| uint32_t num_elements_read) {
|
| - assert(g_core);
|
| - return g_core->EndReadData(data_pipe_consumer_handle, num_elements_read);
|
| + assert(g_thunks.EndReadData);
|
| + return g_thunks.EndReadData(data_pipe_consumer_handle, num_elements_read);
|
| }
|
|
|
| MojoResult MojoCreateSharedBuffer(
|
| const struct MojoCreateSharedBufferOptions* options,
|
| uint64_t num_bytes,
|
| MojoHandle* shared_buffer_handle) {
|
| - assert(g_core);
|
| - return g_core->CreateSharedBuffer(options, num_bytes, shared_buffer_handle);
|
| + assert(g_thunks.CreateSharedBuffer);
|
| + return g_thunks.CreateSharedBuffer(options, num_bytes, shared_buffer_handle);
|
| }
|
|
|
| MojoResult MojoDuplicateBufferHandle(
|
| MojoHandle buffer_handle,
|
| const struct MojoDuplicateBufferHandleOptions* options,
|
| MojoHandle* new_buffer_handle) {
|
| - assert(g_core);
|
| - return g_core->DuplicateBufferHandle(buffer_handle, options,
|
| - new_buffer_handle);
|
| + assert(g_thunks.DuplicateBufferHandle);
|
| + return g_thunks.DuplicateBufferHandle(buffer_handle, options,
|
| + new_buffer_handle);
|
| }
|
|
|
| MojoResult MojoMapBuffer(MojoHandle buffer_handle,
|
| @@ -142,36 +142,19 @@ MojoResult MojoMapBuffer(MojoHandle buffer_handle,
|
| uint64_t num_bytes,
|
| void** buffer,
|
| MojoMapBufferFlags flags) {
|
| - assert(g_core);
|
| - return g_core->MapBuffer(buffer_handle, offset, num_bytes, buffer, flags);
|
| + assert(g_thunks.MapBuffer);
|
| + return g_thunks.MapBuffer(buffer_handle, offset, num_bytes, buffer, flags);
|
| }
|
|
|
| MojoResult MojoUnmapBuffer(void* buffer) {
|
| - assert(g_core);
|
| - return g_core->UnmapBuffer(buffer);
|
| -}
|
| -
|
| -} // extern "C"
|
| -
|
| -namespace mojo {
|
| -
|
| -Core::~Core() {
|
| + assert(g_thunks.UnmapBuffer);
|
| + return g_thunks.UnmapBuffer(buffer);
|
| }
|
|
|
| -// static
|
| -void Core::Init(Core* core) {
|
| - assert(!g_core);
|
| - g_core = core;
|
| +size_t MojoSetSystemThunks(const MojoSystemThunks* system_thunks) {
|
| + if (system_thunks->size >= sizeof(g_thunks))
|
| + g_thunks = *system_thunks;
|
| + return sizeof(g_thunks);
|
| }
|
|
|
| -// static
|
| -Core* Core::Get() {
|
| - return g_core;
|
| -}
|
| -
|
| -// static
|
| -void Core::Reset() {
|
| - g_core = NULL;
|
| -}
|
| -
|
| -} // namespace mojo
|
| +} // extern "C"
|
|
|