Home | History | Annotate | Download | only in native
      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 #include "mojo/public/platform/native/system_thunks.h"
      6 
      7 #include <assert.h>
      8 
      9 #include "mojo/public/platform/native/thunk_export.h"
     10 
     11 extern "C" {
     12 
     13 static MojoSystemThunks g_thunks = {0};
     14 
     15 MojoTimeTicks MojoGetTimeTicksNow() {
     16   assert(g_thunks.GetTimeTicksNow);
     17   return g_thunks.GetTimeTicksNow();
     18 }
     19 
     20 MojoResult MojoClose(MojoHandle handle) {
     21   assert(g_thunks.Close);
     22   return g_thunks.Close(handle);
     23 }
     24 
     25 MojoResult MojoWait(MojoHandle handle,
     26                     MojoHandleSignals signals,
     27                     MojoDeadline deadline) {
     28   assert(g_thunks.Wait);
     29   return g_thunks.Wait(handle, signals, deadline);
     30 }
     31 
     32 MojoResult MojoWaitMany(const MojoHandle* handles,
     33                         const MojoHandleSignals* signals,
     34                         uint32_t num_handles,
     35                         MojoDeadline deadline) {
     36   assert(g_thunks.WaitMany);
     37   return g_thunks.WaitMany(handles, signals, num_handles, deadline);
     38 }
     39 
     40 MojoResult MojoCreateMessagePipe(const MojoCreateMessagePipeOptions* options,
     41                                  MojoHandle* message_pipe_handle0,
     42                                  MojoHandle* message_pipe_handle1) {
     43   assert(g_thunks.CreateMessagePipe);
     44   return g_thunks.CreateMessagePipe(options, message_pipe_handle0,
     45                                     message_pipe_handle1);
     46 }
     47 
     48 MojoResult MojoWriteMessage(MojoHandle message_pipe_handle,
     49                             const void* bytes,
     50                             uint32_t num_bytes,
     51                             const MojoHandle* handles,
     52                             uint32_t num_handles,
     53                             MojoWriteMessageFlags flags) {
     54   assert(g_thunks.WriteMessage);
     55   return g_thunks.WriteMessage(message_pipe_handle, bytes, num_bytes, handles,
     56                                num_handles, flags);
     57 }
     58 
     59 MojoResult MojoReadMessage(MojoHandle message_pipe_handle,
     60                            void* bytes,
     61                            uint32_t* num_bytes,
     62                            MojoHandle* handles,
     63                            uint32_t* num_handles,
     64                            MojoReadMessageFlags flags) {
     65   assert(g_thunks.ReadMessage);
     66   return g_thunks.ReadMessage(message_pipe_handle, bytes, num_bytes, handles,
     67                               num_handles, flags);
     68 }
     69 
     70 MojoResult MojoCreateDataPipe(const MojoCreateDataPipeOptions* options,
     71                               MojoHandle* data_pipe_producer_handle,
     72                               MojoHandle* data_pipe_consumer_handle) {
     73   assert(g_thunks.CreateDataPipe);
     74   return g_thunks.CreateDataPipe(options, data_pipe_producer_handle,
     75                                  data_pipe_consumer_handle);
     76 }
     77 
     78 MojoResult MojoWriteData(MojoHandle data_pipe_producer_handle,
     79                          const void* elements,
     80                          uint32_t* num_elements,
     81                          MojoWriteDataFlags flags) {
     82   assert(g_thunks.WriteData);
     83   return g_thunks.WriteData(data_pipe_producer_handle, elements, num_elements,
     84                             flags);
     85 }
     86 
     87 MojoResult MojoBeginWriteData(MojoHandle data_pipe_producer_handle,
     88                               void** buffer,
     89                               uint32_t* buffer_num_elements,
     90                               MojoWriteDataFlags flags) {
     91   assert(g_thunks.BeginWriteData);
     92   return g_thunks.BeginWriteData(data_pipe_producer_handle, buffer,
     93                                  buffer_num_elements, flags);
     94 }
     95 
     96 MojoResult MojoEndWriteData(MojoHandle data_pipe_producer_handle,
     97                             uint32_t num_elements_written) {
     98   assert(g_thunks.EndWriteData);
     99   return g_thunks.EndWriteData(data_pipe_producer_handle, num_elements_written);
    100 }
    101 
    102 MojoResult MojoReadData(MojoHandle data_pipe_consumer_handle,
    103                         void* elements,
    104                         uint32_t* num_elements,
    105                         MojoReadDataFlags flags) {
    106   assert(g_thunks.ReadData);
    107   return g_thunks.ReadData(data_pipe_consumer_handle, elements, num_elements,
    108                            flags);
    109 }
    110 
    111 MojoResult MojoBeginReadData(MojoHandle data_pipe_consumer_handle,
    112                              const void** buffer,
    113                              uint32_t* buffer_num_elements,
    114                              MojoReadDataFlags flags) {
    115   assert(g_thunks.BeginReadData);
    116   return g_thunks.BeginReadData(data_pipe_consumer_handle, buffer,
    117                                 buffer_num_elements, flags);
    118 }
    119 
    120 MojoResult MojoEndReadData(MojoHandle data_pipe_consumer_handle,
    121                            uint32_t num_elements_read) {
    122   assert(g_thunks.EndReadData);
    123   return g_thunks.EndReadData(data_pipe_consumer_handle, num_elements_read);
    124 }
    125 
    126 MojoResult MojoCreateSharedBuffer(
    127     const struct MojoCreateSharedBufferOptions* options,
    128     uint64_t num_bytes,
    129     MojoHandle* shared_buffer_handle) {
    130   assert(g_thunks.CreateSharedBuffer);
    131   return g_thunks.CreateSharedBuffer(options, num_bytes, shared_buffer_handle);
    132 }
    133 
    134 MojoResult MojoDuplicateBufferHandle(
    135     MojoHandle buffer_handle,
    136     const struct MojoDuplicateBufferHandleOptions* options,
    137     MojoHandle* new_buffer_handle) {
    138   assert(g_thunks.DuplicateBufferHandle);
    139   return g_thunks.DuplicateBufferHandle(buffer_handle, options,
    140                                         new_buffer_handle);
    141 }
    142 
    143 MojoResult MojoMapBuffer(MojoHandle buffer_handle,
    144                          uint64_t offset,
    145                          uint64_t num_bytes,
    146                          void** buffer,
    147                          MojoMapBufferFlags flags) {
    148   assert(g_thunks.MapBuffer);
    149   return g_thunks.MapBuffer(buffer_handle, offset, num_bytes, buffer, flags);
    150 }
    151 
    152 MojoResult MojoUnmapBuffer(void* buffer) {
    153   assert(g_thunks.UnmapBuffer);
    154   return g_thunks.UnmapBuffer(buffer);
    155 }
    156 
    157 extern "C" THUNK_EXPORT size_t MojoSetSystemThunks(
    158     const MojoSystemThunks* system_thunks) {
    159   if (system_thunks->size >= sizeof(g_thunks))
    160     g_thunks = *system_thunks;
    161   return sizeof(g_thunks);
    162 }
    163 
    164 }  // extern "C"
    165