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.
5 #include "mojo/public/platform/native/system_thunks.h"
9 #include "mojo/public/platform/native/thunk_export.h"
13 static MojoSystemThunks g_thunks
= {0};
15 MojoTimeTicks
MojoGetTimeTicksNow() {
16 assert(g_thunks
.GetTimeTicksNow
);
17 return g_thunks
.GetTimeTicksNow();
20 MojoResult
MojoClose(MojoHandle handle
) {
21 assert(g_thunks
.Close
);
22 return g_thunks
.Close(handle
);
25 MojoResult
MojoWait(MojoHandle handle
,
26 MojoHandleSignals signals
,
27 MojoDeadline deadline
) {
28 assert(g_thunks
.Wait
);
29 return g_thunks
.Wait(handle
, signals
, deadline
);
32 MojoResult
MojoWaitMany(const MojoHandle
* handles
,
33 const MojoHandleSignals
* signals
,
35 MojoDeadline deadline
) {
36 assert(g_thunks
.WaitMany
);
37 return g_thunks
.WaitMany(handles
, signals
, num_handles
, deadline
);
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
);
48 MojoResult
MojoWriteMessage(MojoHandle message_pipe_handle
,
51 const MojoHandle
* handles
,
53 MojoWriteMessageFlags flags
) {
54 assert(g_thunks
.WriteMessage
);
55 return g_thunks
.WriteMessage(message_pipe_handle
, bytes
, num_bytes
, handles
,
59 MojoResult
MojoReadMessage(MojoHandle message_pipe_handle
,
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
,
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
);
78 MojoResult
MojoWriteData(MojoHandle data_pipe_producer_handle
,
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
,
87 MojoResult
MojoBeginWriteData(MojoHandle data_pipe_producer_handle
,
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
);
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
);
102 MojoResult
MojoReadData(MojoHandle data_pipe_consumer_handle
,
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
,
111 MojoResult
MojoBeginReadData(MojoHandle data_pipe_consumer_handle
,
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
);
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
);
126 MojoResult
MojoCreateSharedBuffer(
127 const struct MojoCreateSharedBufferOptions
* options
,
129 MojoHandle
* shared_buffer_handle
) {
130 assert(g_thunks
.CreateSharedBuffer
);
131 return g_thunks
.CreateSharedBuffer(options
, num_bytes
, shared_buffer_handle
);
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
,
143 MojoResult
MojoMapBuffer(MojoHandle buffer_handle
,
147 MojoMapBufferFlags flags
) {
148 assert(g_thunks
.MapBuffer
);
149 return g_thunks
.MapBuffer(buffer_handle
, offset
, num_bytes
, buffer
, flags
);
152 MojoResult
MojoUnmapBuffer(void* buffer
) {
153 assert(g_thunks
.UnmapBuffer
);
154 return g_thunks
.UnmapBuffer(buffer
);
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
);