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

Unified Diff: mojo/android/system/core_impl.cc

Issue 2750273002: Revert of Mojo EDK: Introduce MojoQueryHandleSignalsState API (Closed)
Patch Set: Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: mojo/android/system/core_impl.cc
diff --git a/mojo/android/system/core_impl.cc b/mojo/android/system/core_impl.cc
index e53ed75c32cb55086bf10d9fbfcb682909c23460..5cbd754fe90cb84e4667cf6ff4851aeb1920fc95 100644
--- a/mojo/android/system/core_impl.cc
+++ b/mojo/android/system/core_impl.cc
@@ -26,6 +26,41 @@
return MojoGetTimeTicksNow();
}
+static jint WaitMany(JNIEnv* env,
+ const JavaParamRef<jobject>& jcaller,
+ const JavaParamRef<jobject>& buffer,
+ jlong deadline) {
+ // |buffer| contains, in this order
+ // input: The array of N handles (MojoHandle, 4 bytes each)
+ // input: The array of N signals (MojoHandleSignals, 4 bytes each)
+ // space for output: The array of N handle states (MojoHandleSignalsState, 8
+ // bytes each)
+ // space for output: The result index (uint32_t, 4 bytes)
+ uint8_t* buffer_start =
+ static_cast<uint8_t*>(env->GetDirectBufferAddress(buffer));
+ DCHECK(buffer_start);
+ DCHECK_EQ(reinterpret_cast<uintptr_t>(buffer_start) % 8, 0u);
+ // Each handle of the input array contributes 4 (MojoHandle) + 4
+ // (MojoHandleSignals) + 8 (MojoHandleSignalsState) = 16 bytes to the size of
+ // the buffer.
+ const size_t size_per_handle = 16;
+ const size_t buffer_size = env->GetDirectBufferCapacity(buffer);
+ DCHECK_EQ((buffer_size - 4) % size_per_handle, 0u);
+
+ const size_t nb_handles = (buffer_size - 4) / size_per_handle;
+ const MojoHandle* handle_start =
+ reinterpret_cast<const MojoHandle*>(buffer_start);
+ const MojoHandleSignals* signals_start =
+ reinterpret_cast<const MojoHandleSignals*>(buffer_start + 4 * nb_handles);
+ MojoHandleSignalsState* states_start =
+ reinterpret_cast<MojoHandleSignalsState*>(buffer_start + 8 * nb_handles);
+ uint32_t* result_index =
+ reinterpret_cast<uint32_t*>(buffer_start + 16 * nb_handles);
+ *result_index = static_cast<uint32_t>(-1);
+ return MojoWaitMany(handle_start, signals_start, nb_handles, deadline,
+ result_index, states_start);
+}
+
static ScopedJavaLocalRef<jobject> CreateMessagePipe(
JNIEnv* env,
const JavaParamRef<jobject>& jcaller,
@@ -92,16 +127,21 @@
return MojoClose(mojo_handle);
}
-static jint QueryHandleSignalsState(JNIEnv* env,
- const JavaParamRef<jobject>& jcaller,
- jint mojo_handle,
- const JavaParamRef<jobject>& buffer) {
- MojoHandleSignalsState* signals_state =
- static_cast<MojoHandleSignalsState*>(env->GetDirectBufferAddress(buffer));
- DCHECK(signals_state);
- DCHECK_EQ(sizeof(MojoHandleSignalsState),
+static jint Wait(JNIEnv* env,
+ const JavaParamRef<jobject>& jcaller,
+ const JavaParamRef<jobject>& buffer,
+ jint mojo_handle,
+ jint signals,
+ jlong deadline) {
+ // Buffer contains space for the MojoHandleSignalsState
+ void* buffer_start = env->GetDirectBufferAddress(buffer);
+ DCHECK(buffer_start);
+ DCHECK_EQ(reinterpret_cast<const uintptr_t>(buffer_start) % 8, 0u);
+ DCHECK_EQ(sizeof(struct MojoHandleSignalsState),
static_cast<size_t>(env->GetDirectBufferCapacity(buffer)));
- return MojoQueryHandleSignalsState(mojo_handle, signals_state);
+ struct MojoHandleSignalsState* signals_state =
+ static_cast<struct MojoHandleSignalsState*>(buffer_start);
+ return MojoWait(mojo_handle, signals, deadline, signals_state);
}
static jint WriteMessage(JNIEnv* env,

Powered by Google App Engine
This is Rietveld 408576698