Add Mojo{Set,Get}DataPipeConsumerOptions() to the NaCl system thunks.
Also actually add them properly to the native system thunks.
R=vardhan@google.com
BUG=#442
Review URL: https://codereview.chromium.org/1859123003 .
diff --git a/mojo/edk/embedder/system_impl_private_entrypoints.cc b/mojo/edk/embedder/system_impl_private_entrypoints.cc
index 2e6d380..0e62599 100644
--- a/mojo/edk/embedder/system_impl_private_entrypoints.cc
+++ b/mojo/edk/embedder/system_impl_private_entrypoints.cc
@@ -193,6 +193,27 @@
return core->EndWriteData(data_pipe_producer_handle, num_elements_written);
}
+MojoResult MojoSystemImplSetDataPipeConsumerOptions(
+ MojoSystemImpl system,
+ MojoHandle data_pipe_consumer_handle,
+ const struct MojoDataPipeConsumerOptions* options) {
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system);
+ DCHECK(core);
+ return core->SetDataPipeConsumerOptions(data_pipe_consumer_handle,
+ MakeUserPointer(options));
+}
+
+MojoResult MojoSystemImplGetDataPipeConsumerOptions(
+ MojoSystemImpl system,
+ MojoHandle data_pipe_consumer_handle,
+ struct MojoDataPipeConsumerOptions* options,
+ uint32_t options_num_bytes) {
+ mojo::system::Core* core = static_cast<mojo::system::Core*>(system);
+ DCHECK(core);
+ return core->GetDataPipeConsumerOptions(
+ data_pipe_consumer_handle, MakeUserPointer(options), options_num_bytes);
+}
+
MojoResult MojoSystemImplReadData(MojoSystemImpl system,
MojoHandle data_pipe_consumer_handle,
void* elements,
diff --git a/mojo/nacl/nonsfi/irt_mojo_nonsfi.cc b/mojo/nacl/nonsfi/irt_mojo_nonsfi.cc
index 4f184d7..6ae5c54 100644
--- a/mojo/nacl/nonsfi/irt_mojo_nonsfi.cc
+++ b/mojo/nacl/nonsfi/irt_mojo_nonsfi.cc
@@ -33,6 +33,8 @@
MojoWriteData,
MojoBeginWriteData,
MojoEndWriteData,
+ MojoSetDataPipeConsumerOptions,
+ MojoGetDataPipeConsumerOptions,
MojoReadData,
MojoBeginReadData,
MojoEndReadData,
diff --git a/mojo/nacl/sfi/nacl_bindings/mojo_irt.c b/mojo/nacl/sfi/nacl_bindings/mojo_irt.c
index 8fbc1c5..9c451a6 100644
--- a/mojo/nacl/sfi/nacl_bindings/mojo_irt.c
+++ b/mojo/nacl/sfi/nacl_bindings/mojo_irt.c
@@ -214,6 +214,34 @@
return result;
};
+static MojoResult irt_MojoSetDataPipeConsumerOptions(
+ MojoHandle data_pipe_consumer_handle,
+ const struct MojoDataPipeConsumerOptions* options) {
+ uint32_t params[4];
+ MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
+ params[0] = 12;
+ params[1] = (uint32_t)(&data_pipe_consumer_handle);
+ params[2] = (uint32_t)(options);
+ params[3] = (uint32_t)(&result);
+ DoMojoCall(params, sizeof(params));
+ return result;
+};
+
+static MojoResult irt_MojoGetDataPipeConsumerOptions(
+ MojoHandle data_pipe_consumer_handle,
+ struct MojoDataPipeConsumerOptions* options,
+ uint32_t options_num_bytes) {
+ uint32_t params[5];
+ MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
+ params[0] = 13;
+ params[1] = (uint32_t)(&data_pipe_consumer_handle);
+ params[2] = (uint32_t)(options);
+ params[3] = (uint32_t)(&options_num_bytes);
+ params[4] = (uint32_t)(&result);
+ DoMojoCall(params, sizeof(params));
+ return result;
+};
+
static MojoResult irt_MojoReadData(
MojoHandle data_pipe_consumer_handle,
void* elements,
@@ -221,7 +249,7 @@
MojoReadDataFlags flags) {
uint32_t params[6];
MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
- params[0] = 12;
+ params[0] = 14;
params[1] = (uint32_t)(&data_pipe_consumer_handle);
params[2] = (uint32_t)(elements);
params[3] = (uint32_t)(num_bytes);
@@ -238,7 +266,7 @@
MojoReadDataFlags flags) {
uint32_t params[6];
MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
- params[0] = 13;
+ params[0] = 15;
params[1] = (uint32_t)(&data_pipe_consumer_handle);
params[2] = (uint32_t)(buffer);
params[3] = (uint32_t)(buffer_num_bytes);
@@ -253,7 +281,7 @@
uint32_t num_bytes_read) {
uint32_t params[4];
MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
- params[0] = 14;
+ params[0] = 16;
params[1] = (uint32_t)(&data_pipe_consumer_handle);
params[2] = (uint32_t)(&num_bytes_read);
params[3] = (uint32_t)(&result);
@@ -267,7 +295,7 @@
MojoHandle* shared_buffer_handle) {
uint32_t params[5];
MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
- params[0] = 15;
+ params[0] = 17;
params[1] = (uint32_t)(options);
params[2] = (uint32_t)(&num_bytes);
params[3] = (uint32_t)(shared_buffer_handle);
@@ -282,7 +310,7 @@
MojoHandle* new_buffer_handle) {
uint32_t params[5];
MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
- params[0] = 16;
+ params[0] = 18;
params[1] = (uint32_t)(&buffer_handle);
params[2] = (uint32_t)(options);
params[3] = (uint32_t)(new_buffer_handle);
@@ -297,7 +325,7 @@
uint32_t info_num_bytes) {
uint32_t params[5];
MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
- params[0] = 17;
+ params[0] = 19;
params[1] = (uint32_t)(&buffer_handle);
params[2] = (uint32_t)(info);
params[3] = (uint32_t)(&info_num_bytes);
@@ -314,7 +342,7 @@
MojoMapBufferFlags flags) {
uint32_t params[7];
MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
- params[0] = 18;
+ params[0] = 20;
params[1] = (uint32_t)(&buffer_handle);
params[2] = (uint32_t)(&offset);
params[3] = (uint32_t)(&num_bytes);
@@ -328,7 +356,7 @@
static MojoResult irt_MojoUnmapBuffer(void* buffer) {
uint32_t params[3];
MojoResult result = MOJO_RESULT_INVALID_ARGUMENT;
- params[0] = 19;
+ params[0] = 21;
params[1] = (uint32_t)(&buffer);
params[2] = (uint32_t)(&result);
DoMojoCall(params, sizeof(params));
@@ -348,6 +376,8 @@
&irt_MojoWriteData,
&irt_MojoBeginWriteData,
&irt_MojoEndWriteData,
+ &irt_MojoSetDataPipeConsumerOptions,
+ &irt_MojoGetDataPipeConsumerOptions,
&irt_MojoReadData,
&irt_MojoBeginReadData,
&irt_MojoEndReadData,
diff --git a/mojo/nacl/sfi/nacl_bindings/mojo_syscall.cc b/mojo/nacl/sfi/nacl_bindings/mojo_syscall.cc
index b31a478..ebd243c 100644
--- a/mojo/nacl/sfi/nacl_bindings/mojo_syscall.cc
+++ b/mojo/nacl/sfi/nacl_bindings/mojo_syscall.cc
@@ -509,6 +509,76 @@
return 0;
}
case 12: {
+ if (num_params != 4) {
+ return -1;
+ }
+ MojoHandle data_pipe_consumer_handle_value;
+ const struct MojoDataPipeConsumerOptions* options;
+ MojoResult volatile* result_ptr;
+ MojoResult result_value;
+ {
+ ScopedCopyLock copy_lock(nap);
+ if (!ConvertScalarInput(nap, params[1],
+ &data_pipe_consumer_handle_value)) {
+ return -1;
+ }
+ if (!ConvertExtensibleStructInput(nap, params[2], true, &options)) {
+ return -1;
+ }
+ if (!ConvertScalarOutput(nap, params[3], false, &result_ptr)) {
+ return -1;
+ }
+ }
+
+ result_value = MojoSystemImplSetDataPipeConsumerOptions(
+ g_mojo_system, data_pipe_consumer_handle_value, options);
+
+ {
+ ScopedCopyLock copy_lock(nap);
+ *result_ptr = result_value;
+ }
+
+ return 0;
+ }
+ case 13: {
+ if (num_params != 5) {
+ return -1;
+ }
+ MojoHandle data_pipe_consumer_handle_value;
+ struct MojoDataPipeConsumerOptions* options;
+ uint32_t options_num_bytes_value;
+ MojoResult volatile* result_ptr;
+ MojoResult result_value;
+ {
+ ScopedCopyLock copy_lock(nap);
+ if (!ConvertScalarInput(nap, params[1],
+ &data_pipe_consumer_handle_value)) {
+ return -1;
+ }
+ if (!ConvertScalarInput(nap, params[3], &options_num_bytes_value)) {
+ return -1;
+ }
+ if (!ConvertScalarOutput(nap, params[4], false, &result_ptr)) {
+ return -1;
+ }
+ if (!ConvertArray(nap, params[2], options_num_bytes_value, 1, false,
+ &options)) {
+ return -1;
+ }
+ }
+
+ result_value = MojoSystemImplGetDataPipeConsumerOptions(
+ g_mojo_system, data_pipe_consumer_handle_value, options,
+ options_num_bytes_value);
+
+ {
+ ScopedCopyLock copy_lock(nap);
+ *result_ptr = result_value;
+ }
+
+ return 0;
+ }
+ case 14: {
if (num_params != 6) {
return -1;
}
@@ -553,10 +623,10 @@
return 0;
}
- case 13:
+ case 15:
fprintf(stderr, "MojoBeginReadData not implemented\n");
return -1;
- case 14: {
+ case 16: {
if (num_params != 4) {
return -1;
}
@@ -588,7 +658,7 @@
return 0;
}
- case 15: {
+ case 17: {
if (num_params != 5) {
return -1;
}
@@ -627,7 +697,7 @@
return 0;
}
- case 16: {
+ case 18: {
if (num_params != 5) {
return -1;
}
@@ -666,7 +736,7 @@
return 0;
}
- case 17: {
+ case 19: {
if (num_params != 5) {
return -1;
}
@@ -702,10 +772,10 @@
return 0;
}
- case 18:
+ case 20:
fprintf(stderr, "MojoMapBuffer not implemented\n");
return -1;
- case 19:
+ case 21:
fprintf(stderr, "MojoUnmapBuffer not implemented\n");
return -1;
}
diff --git a/mojo/nacl/sfi/nacl_bindings_generator/interface.py b/mojo/nacl/sfi/nacl_bindings_generator/interface.py
index 1c97be1..00f2490 100644
--- a/mojo/nacl/sfi/nacl_bindings_generator/interface.py
+++ b/mojo/nacl/sfi/nacl_bindings_generator/interface.py
@@ -82,6 +82,17 @@
f.Param('data_pipe_producer_handle').In('MojoHandle')
f.Param('num_bytes_written').In('uint32_t')
+ f = mojo.Func('MojoSetDataPipeConsumerOptions', 'MojoResult')
+ f.Param('data_pipe_consumer_handle').In('MojoHandle')
+ p = f.Param('options')
+ p.InExtensibleStruct('MojoDataPipeConsumerOptions').Optional()
+
+ f = mojo.Func('MojoGetDataPipeConsumerOptions', 'MojoResult')
+ f.Param('data_pipe_consumer_handle').In('MojoHandle')
+ p = f.Param('options')
+ p.OutExtensibleStruct('MojoDataPipeConsumerOptions', 'options_num_bytes')
+ f.Param('options_num_bytes').In('uint32_t')
+
f = mojo.Func('MojoReadData', 'MojoResult')
f.Param('data_pipe_consumer_handle').In('MojoHandle')
f.Param('elements').OutArray('void', 'num_bytes')
diff --git a/mojo/public/c/system/tests/core_unittest.cc b/mojo/public/c/system/tests/core_unittest.cc
index b64f14b..f718633 100644
--- a/mojo/public/c/system/tests/core_unittest.cc
+++ b/mojo/public/c/system/tests/core_unittest.cc
@@ -74,8 +74,6 @@
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
MojoEndWriteData(MOJO_HANDLE_INVALID, 1u));
buffer_size = static_cast<uint32_t>(sizeof(buffer));
-// TODO(vtl): Enable once I've added support for NaCl.
-#ifndef __native_client__
MojoDataPipeConsumerOptions dpc_options = {
sizeof(MojoDataPipeConsumerOptions), 0u};
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
@@ -84,7 +82,6 @@
MojoGetDataPipeConsumerOptions(
MOJO_HANDLE_INVALID, &dpc_options,
static_cast<uint32_t>(sizeof(dpc_options))));
-#endif
EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
MojoReadData(MOJO_HANDLE_INVALID, buffer, &buffer_size,
MOJO_READ_DATA_FLAG_NONE));
@@ -318,8 +315,6 @@
// the producer never-writable?
}
-// TODO(vtl): Enable once I've added support for NaCl.
-#ifndef __native_client__
TEST(CoreTest, DataPipeReadThreshold) {
MojoHandle hp = MOJO_HANDLE_INVALID;
MojoHandle hc = MOJO_HANDLE_INVALID;
@@ -419,7 +414,6 @@
EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hp));
EXPECT_EQ(MOJO_RESULT_OK, MojoClose(hc));
}
-#endif
// TODO(ncbray): enable this test once NaCl supports the corresponding APIs.
#ifdef __native_client__
diff --git a/mojo/public/platform/nacl/libmojo.cc b/mojo/public/platform/nacl/libmojo.cc
index bb96760..bcd9cf3 100644
--- a/mojo/public/platform/nacl/libmojo.cc
+++ b/mojo/public/platform/nacl/libmojo.cc
@@ -154,6 +154,27 @@
num_bytes_written);
}
+MojoResult MojoSetDataPipeConsumerOptions(
+ MojoHandle data_pipe_consumer_handle,
+ const struct MojoDataPipeConsumerOptions* options) {
+ struct nacl_irt_mojo* irt_mojo = get_irt_mojo();
+ if (!irt_mojo)
+ abort();
+ return irt_mojo->MojoSetDataPipeConsumerOptions(data_pipe_consumer_handle,
+ options);
+}
+
+MojoResult MojoGetDataPipeConsumerOptions(
+ MojoHandle data_pipe_consumer_handle,
+ struct MojoDataPipeConsumerOptions* options,
+ uint32_t options_num_bytes) {
+ struct nacl_irt_mojo* irt_mojo = get_irt_mojo();
+ if (!irt_mojo)
+ abort();
+ return irt_mojo->MojoGetDataPipeConsumerOptions(data_pipe_consumer_handle,
+ options, options_num_bytes);
+}
+
MojoResult MojoReadData(MojoHandle data_pipe_consumer_handle,
void* elements,
uint32_t* num_bytes,
diff --git a/mojo/public/platform/nacl/mojo_irt.h b/mojo/public/platform/nacl/mojo_irt.h
index 4d23403..92ad744 100644
--- a/mojo/public/platform/nacl/mojo_irt.h
+++ b/mojo/public/platform/nacl/mojo_irt.h
@@ -61,6 +61,13 @@
MojoWriteDataFlags flags);
MojoResult (*MojoEndWriteData)(MojoHandle data_pipe_producer_handle,
uint32_t num_bytes_written);
+ MojoResult (*MojoSetDataPipeConsumerOptions)(
+ MojoHandle data_pipe_consumer_handle,
+ const struct MojoDataPipeConsumerOptions* options);
+ MojoResult (*MojoGetDataPipeConsumerOptions)(
+ MojoHandle data_pipe_consumer_handle,
+ struct MojoDataPipeConsumerOptions* options,
+ uint32_t options_num_bytes);
MojoResult (*MojoReadData)(MojoHandle data_pipe_consumer_handle,
void* elements,
uint32_t* num_bytes,
diff --git a/mojo/public/platform/native/system_impl_private.h b/mojo/public/platform/native/system_impl_private.h
index 0540cca..3ebe2c1 100644
--- a/mojo/public/platform/native/system_impl_private.h
+++ b/mojo/public/platform/native/system_impl_private.h
@@ -101,6 +101,15 @@
MojoResult MojoSystemImplEndWriteData(MojoSystemImpl system,
MojoHandle data_pipe_producer_handle,
uint32_t num_elements_written);
+MojoResult MojoSystemImplSetDataPipeConsumerOptions(
+ MojoSystemImpl system,
+ MojoHandle data_pipe_consumer_handle,
+ const struct MojoDataPipeConsumerOptions* options);
+MojoResult MojoSystemImplGetDataPipeConsumerOptions(
+ MojoSystemImpl system,
+ MojoHandle data_pipe_consumer_handle,
+ struct MojoDataPipeConsumerOptions* options,
+ uint32_t options_num_bytes);
MojoResult MojoSystemImplReadData(MojoSystemImpl system,
MojoHandle data_pipe_consumer_handle,
void* elements,
diff --git a/mojo/public/platform/native/system_impl_private_thunks.c b/mojo/public/platform/native/system_impl_private_thunks.c
index 61a945f..3129f5e 100644
--- a/mojo/public/platform/native/system_impl_private_thunks.c
+++ b/mojo/public/platform/native/system_impl_private_thunks.c
@@ -138,6 +138,25 @@
num_elements_written);
}
+MojoResult MojoSystemImplSetDataPipeConsumerOptions(
+ MojoSystemImpl system,
+ MojoHandle data_pipe_consumer_handle,
+ const struct MojoDataPipeConsumerOptions* options) {
+ assert(g_system_impl_thunks.SetDataPipeConsumerOptions);
+ return g_system_impl_thunks.SetDataPipeConsumerOptions(
+ system, data_pipe_consumer_handle, options);
+}
+
+MojoResult MojoSystemImplGetDataPipeConsumerOptions(
+ MojoSystemImpl system,
+ MojoHandle data_pipe_consumer_handle,
+ struct MojoDataPipeConsumerOptions* options,
+ uint32_t options_num_bytes) {
+ assert(g_system_impl_thunks.GetDataPipeConsumerOptions);
+ return g_system_impl_thunks.GetDataPipeConsumerOptions(
+ system, data_pipe_consumer_handle, options, options_num_bytes);
+}
+
MojoResult MojoSystemImplReadData(MojoSystemImpl system,
MojoHandle data_pipe_consumer_handle,
void* elements,
diff --git a/mojo/public/platform/native/system_impl_private_thunks.h b/mojo/public/platform/native/system_impl_private_thunks.h
index 565bc6d..09d0ce0 100644
--- a/mojo/public/platform/native/system_impl_private_thunks.h
+++ b/mojo/public/platform/native/system_impl_private_thunks.h
@@ -82,6 +82,15 @@
MojoResult (*EndWriteData)(MojoSystemImpl system,
MojoHandle data_pipe_producer_handle,
uint32_t num_elements_written);
+ MojoResult (*SetDataPipeConsumerOptions)(
+ MojoSystemImpl system,
+ MojoHandle data_pipe_consumer_handle,
+ const struct MojoDataPipeConsumerOptions* options);
+ MojoResult (*GetDataPipeConsumerOptions)(
+ MojoSystemImpl system,
+ MojoHandle data_pipe_consumer_handle,
+ struct MojoDataPipeConsumerOptions* options,
+ uint32_t options_num_bytes);
MojoResult (*ReadData)(MojoSystemImpl system,
MojoHandle data_pipe_consumer_handle,
void* elements,
@@ -144,6 +153,8 @@
MojoSystemImplWriteData,
MojoSystemImplBeginWriteData,
MojoSystemImplEndWriteData,
+ MojoSystemImplSetDataPipeConsumerOptions,
+ MojoSystemImplGetDataPipeConsumerOptions,
MojoSystemImplReadData,
MojoSystemImplBeginReadData,
MojoSystemImplEndReadData,
diff --git a/mojo/public/platform/native/system_thunks.c b/mojo/public/platform/native/system_thunks.c
index 467f8e5..8c5a4a8 100644
--- a/mojo/public/platform/native/system_thunks.c
+++ b/mojo/public/platform/native/system_thunks.c
@@ -102,6 +102,23 @@
return g_thunks.EndWriteData(data_pipe_producer_handle, num_elements_written);
}
+MojoResult MojoSetDataPipeConsumerOptions(
+ MojoHandle data_pipe_consumer_handle,
+ const struct MojoDataPipeConsumerOptions* options) {
+ assert(g_thunks.SetDataPipeConsumerOptions);
+ return g_thunks.SetDataPipeConsumerOptions(data_pipe_consumer_handle,
+ options);
+}
+
+MojoResult MojoGetDataPipeConsumerOptions(
+ MojoHandle data_pipe_consumer_handle,
+ struct MojoDataPipeConsumerOptions* options,
+ uint32_t options_num_bytes) {
+ assert(g_thunks.GetDataPipeConsumerOptions);
+ return g_thunks.GetDataPipeConsumerOptions(data_pipe_consumer_handle,
+ options, options_num_bytes);
+}
+
MojoResult MojoReadData(MojoHandle data_pipe_consumer_handle,
void* elements,
uint32_t* num_elements,