Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1295)

Side by Side Diff: mojo/public/c/system/buffer.h

Issue 2783223004: Adds lots of Mojo documentation (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file contains types/constants and functions specific to buffers (and in 5 // This file contains types/constants and functions specific to shared buffers.
6 // particular shared buffers).
7 // TODO(vtl): Reorganize this file (etc.) to separate general buffer functions
8 // from (shared) buffer creation.
9 // 6 //
10 // Note: This header should be compilable as C. 7 // Note: This header should be compilable as C.
11 8
12 #ifndef MOJO_PUBLIC_C_SYSTEM_BUFFER_H_ 9 #ifndef MOJO_PUBLIC_C_SYSTEM_BUFFER_H_
13 #define MOJO_PUBLIC_C_SYSTEM_BUFFER_H_ 10 #define MOJO_PUBLIC_C_SYSTEM_BUFFER_H_
14 11
15 #include <stdint.h> 12 #include <stdint.h>
16 13
17 #include "mojo/public/c/system/macros.h" 14 #include "mojo/public/c/system/macros.h"
18 #include "mojo/public/c/system/system_export.h" 15 #include "mojo/public/c/system/system_export.h"
19 #include "mojo/public/c/system/types.h" 16 #include "mojo/public/c/system/types.h"
20 17
21 // |MojoCreateSharedBufferOptions|: Used to specify creation parameters for a 18 // |MojoCreateSharedBufferOptions|: Used to specify creation parameters for a
22 // shared buffer to |MojoCreateSharedBuffer()|. 19 // shared buffer to |MojoCreateSharedBuffer()|.
20 //
23 // |uint32_t struct_size|: Set to the size of the 21 // |uint32_t struct_size|: Set to the size of the
24 // |MojoCreateSharedBufferOptions| struct. (Used to allow for future 22 // |MojoCreateSharedBufferOptions| struct. (Used to allow for future
25 // extensions.) 23 // extensions.)
24 //
26 // |MojoCreateSharedBufferOptionsFlags flags|: Reserved for future use. 25 // |MojoCreateSharedBufferOptionsFlags flags|: Reserved for future use.
27 // |MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE|: No flags; default mode. 26 // |MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE|: No flags; default mode.
28 //
29 // TODO(vtl): Maybe add a flag to indicate whether the memory should be
30 // executable or not?
31 // TODO(vtl): Also a flag for discardable (ashmem-style) buffers.
32 27
33 typedef uint32_t MojoCreateSharedBufferOptionsFlags; 28 typedef uint32_t MojoCreateSharedBufferOptionsFlags;
34 29
35 #ifdef __cplusplus 30 #ifdef __cplusplus
36 const MojoCreateSharedBufferOptionsFlags 31 const MojoCreateSharedBufferOptionsFlags
37 MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE = 0; 32 MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE = 0;
38 #else 33 #else
39 #define MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE \ 34 #define MOJO_CREATE_SHARED_BUFFER_OPTIONS_FLAG_NONE \
40 ((MojoCreateSharedBufferOptionsFlags)0) 35 ((MojoCreateSharedBufferOptionsFlags)0)
41 #endif 36 #endif
42 37
43 MOJO_STATIC_ASSERT(MOJO_ALIGNOF(int64_t) == 8, "int64_t has weird alignment"); 38 MOJO_STATIC_ASSERT(MOJO_ALIGNOF(int64_t) == 8, "int64_t has weird alignment");
44 struct MOJO_ALIGNAS(8) MojoCreateSharedBufferOptions { 39 struct MOJO_ALIGNAS(8) MojoCreateSharedBufferOptions {
45 uint32_t struct_size; 40 uint32_t struct_size;
46 MojoCreateSharedBufferOptionsFlags flags; 41 MojoCreateSharedBufferOptionsFlags flags;
47 }; 42 };
48 MOJO_STATIC_ASSERT(sizeof(MojoCreateSharedBufferOptions) == 8, 43 MOJO_STATIC_ASSERT(sizeof(MojoCreateSharedBufferOptions) == 8,
49 "MojoCreateSharedBufferOptions has wrong size"); 44 "MojoCreateSharedBufferOptions has wrong size");
50 45
51 // |MojoDuplicateBufferHandleOptions|: Used to specify parameters in duplicating 46 // |MojoDuplicateBufferHandleOptions|: Used to specify parameters in duplicating
52 // access to a shared buffer to |MojoDuplicateBufferHandle()|. 47 // access to a shared buffer to |MojoDuplicateBufferHandle()|.
48 //
53 // |uint32_t struct_size|: Set to the size of the 49 // |uint32_t struct_size|: Set to the size of the
54 // |MojoDuplicateBufferHandleOptions| struct. (Used to allow for future 50 // |MojoDuplicateBufferHandleOptions| struct. (Used to allow for future
55 // extensions.) 51 // extensions.)
56 // |MojoDuplicateBufferHandleOptionsFlags flags|: Reserved for future use. 52 //
53 // |MojoDuplicateBufferHandleOptionsFlags flags|: Flags to control the
54 // behavior of |MojoDuplicateBufferHandle()|. May be some combination of
55 // the following:
56 //
57 // |MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE|: No flags; default 57 // |MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE|: No flags; default
58 // mode. 58 // mode.
59 // |MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_READ_ONLY|: The duplicate 59 // |MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_READ_ONLY|: The duplicate
60 // shared buffer can only be mapped read-only. A read-only duplicate can 60 // shared buffer can only be mapped read-only. A read-only duplicate
61 // only be created before the buffer is passed over a message pipe. 61 // may only be created before any handles to the buffer are passed
62 // 62 // over a message pipe.
63 // TODO(vtl): Add flags to remove writability (and executability)? Also, COW?
64 63
65 typedef uint32_t MojoDuplicateBufferHandleOptionsFlags; 64 typedef uint32_t MojoDuplicateBufferHandleOptionsFlags;
66 65
67 #ifdef __cplusplus 66 #ifdef __cplusplus
68 const MojoDuplicateBufferHandleOptionsFlags 67 const MojoDuplicateBufferHandleOptionsFlags
69 MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE = 0; 68 MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE = 0;
70 const MojoDuplicateBufferHandleOptionsFlags 69 const MojoDuplicateBufferHandleOptionsFlags
71 MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_READ_ONLY = 1 << 0; 70 MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_READ_ONLY = 1 << 0;
72 #else 71 #else
73 #define MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE \ 72 #define MOJO_DUPLICATE_BUFFER_HANDLE_OPTIONS_FLAG_NONE \
(...skipping 21 matching lines...) Expand all
95 #endif 94 #endif
96 95
97 #ifdef __cplusplus 96 #ifdef __cplusplus
98 extern "C" { 97 extern "C" {
99 #endif 98 #endif
100 99
101 // Note: See the comment in functions.h about the meaning of the "optional" 100 // Note: See the comment in functions.h about the meaning of the "optional"
102 // label for pointer parameters. 101 // label for pointer parameters.
103 102
104 // Creates a buffer of size |num_bytes| bytes that can be shared between 103 // Creates a buffer of size |num_bytes| bytes that can be shared between
105 // applications (by duplicating the handle -- see |MojoDuplicateBufferHandle()| 104 // processes. The returned handle may be duplicated any number of times by
106 // -- and passing it over a message pipe). To access the buffer, one must call 105 // |MojoDuplicateBufferHandle()|.
107 // |MojoMapBuffer()|. 106 //
107 // To access the buffer's storage, one must call |MojoMapBuffer()|.
108 // 108 //
109 // |options| may be set to null for a shared buffer with the default options. 109 // |options| may be set to null for a shared buffer with the default options.
110 // 110 //
111 // On success, |*shared_buffer_handle| will be set to the handle for the shared 111 // On success, |*shared_buffer_handle| will be set to the handle for the shared
112 // buffer. (On failure, it is not modified.) 112 // buffer. On failure it is not modified.
113 //
114 // Note: While more than |num_bytes| bytes may apparently be
115 // available/visible/readable/writable, trying to use those extra bytes is
116 // undefined behavior.
117 // 113 //
118 // Returns: 114 // Returns:
119 // |MOJO_RESULT_OK| on success. 115 // |MOJO_RESULT_OK| on success.
120 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 116 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
121 // |*options| is invalid). 117 // |*options| is invalid).
122 // |MOJO_RESULT_RESOURCE_EXHAUSTED| if a process/system/quota/etc. limit has 118 // |MOJO_RESULT_RESOURCE_EXHAUSTED| if a process/system/quota/etc. limit has
123 // been reached (e.g., if the requested size was too large, or if the 119 // been reached (e.g., if the requested size was too large, or if the
124 // maximum number of handles was exceeded). 120 // maximum number of handles was exceeded).
125 // |MOJO_RESULT_UNIMPLEMENTED| if an unsupported flag was set in |*options|. 121 // |MOJO_RESULT_UNIMPLEMENTED| if an unsupported flag was set in |*options|.
126 MOJO_SYSTEM_EXPORT MojoResult MojoCreateSharedBuffer( 122 MOJO_SYSTEM_EXPORT MojoResult MojoCreateSharedBuffer(
127 const struct MojoCreateSharedBufferOptions* options, // Optional. 123 const struct MojoCreateSharedBufferOptions* options, // Optional.
128 uint64_t num_bytes, // In. 124 uint64_t num_bytes, // In.
129 MojoHandle* shared_buffer_handle); // Out. 125 MojoHandle* shared_buffer_handle); // Out.
130 126
131 // Duplicates the handle |buffer_handle| to a buffer. This creates another 127 // Duplicates the handle |buffer_handle| as a new shared buffer handle. On
132 // handle (returned in |*new_buffer_handle| on success), which can then be sent 128 // success this returns the new handle in |*new_buffer_handle|. A shared buffer
133 // to another application over a message pipe, while retaining access to the 129 // remains allocated as long as there is at least one shared buffer handle
134 // |buffer_handle| (and any mappings that it may have). 130 // referencing it in at least one process in the system.
135 // 131 //
136 // |options| may be set to null to duplicate the buffer handle with the default 132 // |options| may be set to null to duplicate the buffer handle with the default
137 // options. 133 // options.
138 // 134 //
139 // On success, |*shared_buffer_handle| will be set to the handle for the new
140 // buffer handle. (On failure, it is not modified.)
141 //
142 // Returns: 135 // Returns:
143 // |MOJO_RESULT_OK| on success. 136 // |MOJO_RESULT_OK| on success.
144 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 137 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
145 // |buffer_handle| is not a valid buffer handle or |*options| is invalid). 138 // |buffer_handle| is not a valid buffer handle or |*options| is invalid).
146 // |MOJO_RESULT_UNIMPLEMENTED| if an unsupported flag was set in |*options|. 139 // |MOJO_RESULT_UNIMPLEMENTED| if an unsupported flag was set in |*options|.
147 MOJO_SYSTEM_EXPORT MojoResult MojoDuplicateBufferHandle( 140 MOJO_SYSTEM_EXPORT MojoResult MojoDuplicateBufferHandle(
148 MojoHandle buffer_handle, 141 MojoHandle buffer_handle,
149 const struct MojoDuplicateBufferHandleOptions* options, // Optional. 142 const struct MojoDuplicateBufferHandleOptions* options, // Optional.
150 MojoHandle* new_buffer_handle); // Out. 143 MojoHandle* new_buffer_handle); // Out.
151 144
152 // Maps the part (at offset |offset| of length |num_bytes|) of the buffer given 145 // Maps the part (at offset |offset| of length |num_bytes|) of the buffer given
153 // by |buffer_handle| into memory, with options specified by |flags|. |offset + 146 // by |buffer_handle| into memory, with options specified by |flags|. |offset +
154 // num_bytes| must be less than or equal to the size of the buffer. On success, 147 // num_bytes| must be less than or equal to the size of the buffer. On success,
155 // |*buffer| points to memory with the requested part of the buffer. (On 148 // |*buffer| points to memory with the requested part of the buffer. On
156 // failure, it is not modified.) 149 // failure |*buffer| it is not modified.
157 // 150 //
158 // A single buffer handle may have multiple active mappings (possibly depending 151 // A single buffer handle may have multiple active mappings The permissions
159 // on the buffer type). The permissions (e.g., writable or executable) of the 152 // (e.g., writable or executable) of the returned memory depend on th
160 // returned memory may depend on the properties of the buffer and properties 153 // properties of the buffer and properties attached to the buffer handle, as
161 // attached to the buffer handle as well as |flags|. 154 // well as |flags|.
162 // 155 //
163 // Note: Though data outside the specified range may apparently be 156 // A mapped buffer must eventually be unmapped by calling |MojoUnmapBuffer()|
164 // available/visible/readable/writable, trying to use those extra bytes is 157 // with the value of |*buffer| returned by this function.
165 // undefined behavior.
166 // 158 //
167 // Returns: 159 // Returns:
168 // |MOJO_RESULT_OK| on success. 160 // |MOJO_RESULT_OK| on success.
169 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g., 161 // |MOJO_RESULT_INVALID_ARGUMENT| if some argument was invalid (e.g.,
170 // |buffer_handle| is not a valid buffer handle or the range specified by 162 // |buffer_handle| is not a valid buffer handle or the range specified by
171 // |offset| and |num_bytes| is not valid). 163 // |offset| and |num_bytes| is not valid).
172 // |MOJO_RESULT_RESOURCE_EXHAUSTED| if the mapping operation itself failed 164 // |MOJO_RESULT_RESOURCE_EXHAUSTED| if the mapping operation itself failed
173 // (e.g., due to not having appropriate address space available). 165 // (e.g., due to not having appropriate address space available).
174 MOJO_SYSTEM_EXPORT MojoResult MojoMapBuffer(MojoHandle buffer_handle, 166 MOJO_SYSTEM_EXPORT MojoResult MojoMapBuffer(MojoHandle buffer_handle,
175 uint64_t offset, 167 uint64_t offset,
176 uint64_t num_bytes, 168 uint64_t num_bytes,
177 void** buffer, // Out. 169 void** buffer, // Out.
178 MojoMapBufferFlags flags); 170 MojoMapBufferFlags flags);
179 171
180 // Unmaps a buffer pointer that was mapped by |MojoMapBuffer()|. |buffer| must 172 // Unmaps a buffer pointer that was mapped by |MojoMapBuffer()|. |buffer| must
181 // have been the result of |MojoMapBuffer()| (not some other pointer inside 173 // have been the result of |MojoMapBuffer()| (not some other pointer inside
182 // the mapped memory), and the entire mapping will be removed (partial unmapping 174 // the mapped memory), and the entire mapping will be removed.
183 // is not supported). A mapping may only be unmapped once. 175 //
176 // A mapping may only be unmapped once.
184 // 177 //
185 // Returns: 178 // Returns:
186 // |MOJO_RESULT_OK| on success. 179 // |MOJO_RESULT_OK| on success.
187 // |MOJO_RESULT_INVALID_ARGUMENT| if |buffer| is invalid (e.g., is not the 180 // |MOJO_RESULT_INVALID_ARGUMENT| if |buffer| is invalid (e.g., is not the
188 // result of |MojoMapBuffer()| or has already been unmapped). 181 // result of |MojoMapBuffer()| or has already been unmapped).
189 MOJO_SYSTEM_EXPORT MojoResult MojoUnmapBuffer(void* buffer); // In. 182 MOJO_SYSTEM_EXPORT MojoResult MojoUnmapBuffer(void* buffer); // In.
190 183
191 #ifdef __cplusplus 184 #ifdef __cplusplus
192 } // extern "C" 185 } // extern "C"
193 #endif 186 #endif
194 187
195 #endif // MOJO_PUBLIC_C_SYSTEM_BUFFER_H_ 188 #endif // MOJO_PUBLIC_C_SYSTEM_BUFFER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698