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

Side by Side 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 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 #include "mojo/android/system/core_impl.h" 5 #include "mojo/android/system/core_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/android/base_jni_registrar.h" 10 #include "base/android/base_jni_registrar.h"
11 #include "base/android/jni_android.h" 11 #include "base/android/jni_android.h"
12 #include "base/android/jni_registrar.h" 12 #include "base/android/jni_registrar.h"
13 #include "base/android/library_loader/library_loader_hooks.h" 13 #include "base/android/library_loader/library_loader_hooks.h"
14 #include "base/android/scoped_java_ref.h" 14 #include "base/android/scoped_java_ref.h"
15 #include "jni/CoreImpl_jni.h" 15 #include "jni/CoreImpl_jni.h"
16 #include "mojo/public/c/system/core.h" 16 #include "mojo/public/c/system/core.h"
17 17
18 namespace mojo { 18 namespace mojo {
19 namespace android { 19 namespace android {
20 20
21 using base::android::JavaParamRef; 21 using base::android::JavaParamRef;
22 using base::android::ScopedJavaLocalRef; 22 using base::android::ScopedJavaLocalRef;
23 23
24 static jlong GetTimeTicksNow(JNIEnv* env, 24 static jlong GetTimeTicksNow(JNIEnv* env,
25 const JavaParamRef<jobject>& jcaller) { 25 const JavaParamRef<jobject>& jcaller) {
26 return MojoGetTimeTicksNow(); 26 return MojoGetTimeTicksNow();
27 } 27 }
28 28
29 static jint WaitMany(JNIEnv* env,
30 const JavaParamRef<jobject>& jcaller,
31 const JavaParamRef<jobject>& buffer,
32 jlong deadline) {
33 // |buffer| contains, in this order
34 // input: The array of N handles (MojoHandle, 4 bytes each)
35 // input: The array of N signals (MojoHandleSignals, 4 bytes each)
36 // space for output: The array of N handle states (MojoHandleSignalsState, 8
37 // bytes each)
38 // space for output: The result index (uint32_t, 4 bytes)
39 uint8_t* buffer_start =
40 static_cast<uint8_t*>(env->GetDirectBufferAddress(buffer));
41 DCHECK(buffer_start);
42 DCHECK_EQ(reinterpret_cast<uintptr_t>(buffer_start) % 8, 0u);
43 // Each handle of the input array contributes 4 (MojoHandle) + 4
44 // (MojoHandleSignals) + 8 (MojoHandleSignalsState) = 16 bytes to the size of
45 // the buffer.
46 const size_t size_per_handle = 16;
47 const size_t buffer_size = env->GetDirectBufferCapacity(buffer);
48 DCHECK_EQ((buffer_size - 4) % size_per_handle, 0u);
49
50 const size_t nb_handles = (buffer_size - 4) / size_per_handle;
51 const MojoHandle* handle_start =
52 reinterpret_cast<const MojoHandle*>(buffer_start);
53 const MojoHandleSignals* signals_start =
54 reinterpret_cast<const MojoHandleSignals*>(buffer_start + 4 * nb_handles);
55 MojoHandleSignalsState* states_start =
56 reinterpret_cast<MojoHandleSignalsState*>(buffer_start + 8 * nb_handles);
57 uint32_t* result_index =
58 reinterpret_cast<uint32_t*>(buffer_start + 16 * nb_handles);
59 *result_index = static_cast<uint32_t>(-1);
60 return MojoWaitMany(handle_start, signals_start, nb_handles, deadline,
61 result_index, states_start);
62 }
63
29 static ScopedJavaLocalRef<jobject> CreateMessagePipe( 64 static ScopedJavaLocalRef<jobject> CreateMessagePipe(
30 JNIEnv* env, 65 JNIEnv* env,
31 const JavaParamRef<jobject>& jcaller, 66 const JavaParamRef<jobject>& jcaller,
32 const JavaParamRef<jobject>& options_buffer) { 67 const JavaParamRef<jobject>& options_buffer) {
33 const MojoCreateMessagePipeOptions* options = NULL; 68 const MojoCreateMessagePipeOptions* options = NULL;
34 if (options_buffer) { 69 if (options_buffer) {
35 const void* buffer_start = env->GetDirectBufferAddress(options_buffer); 70 const void* buffer_start = env->GetDirectBufferAddress(options_buffer);
36 DCHECK(buffer_start); 71 DCHECK(buffer_start);
37 DCHECK_EQ(reinterpret_cast<const uintptr_t>(buffer_start) % 8, 0u); 72 DCHECK_EQ(reinterpret_cast<const uintptr_t>(buffer_start) % 8, 0u);
38 const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer); 73 const size_t buffer_size = env->GetDirectBufferCapacity(options_buffer);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 MojoResult result = MojoCreateSharedBuffer(options, num_bytes, &handle); 120 MojoResult result = MojoCreateSharedBuffer(options, num_bytes, &handle);
86 return Java_CoreImpl_newResultAndInteger(env, result, handle); 121 return Java_CoreImpl_newResultAndInteger(env, result, handle);
87 } 122 }
88 123
89 static jint Close(JNIEnv* env, 124 static jint Close(JNIEnv* env,
90 const JavaParamRef<jobject>& jcaller, 125 const JavaParamRef<jobject>& jcaller,
91 jint mojo_handle) { 126 jint mojo_handle) {
92 return MojoClose(mojo_handle); 127 return MojoClose(mojo_handle);
93 } 128 }
94 129
95 static jint QueryHandleSignalsState(JNIEnv* env, 130 static jint Wait(JNIEnv* env,
96 const JavaParamRef<jobject>& jcaller, 131 const JavaParamRef<jobject>& jcaller,
97 jint mojo_handle, 132 const JavaParamRef<jobject>& buffer,
98 const JavaParamRef<jobject>& buffer) { 133 jint mojo_handle,
99 MojoHandleSignalsState* signals_state = 134 jint signals,
100 static_cast<MojoHandleSignalsState*>(env->GetDirectBufferAddress(buffer)); 135 jlong deadline) {
101 DCHECK(signals_state); 136 // Buffer contains space for the MojoHandleSignalsState
102 DCHECK_EQ(sizeof(MojoHandleSignalsState), 137 void* buffer_start = env->GetDirectBufferAddress(buffer);
138 DCHECK(buffer_start);
139 DCHECK_EQ(reinterpret_cast<const uintptr_t>(buffer_start) % 8, 0u);
140 DCHECK_EQ(sizeof(struct MojoHandleSignalsState),
103 static_cast<size_t>(env->GetDirectBufferCapacity(buffer))); 141 static_cast<size_t>(env->GetDirectBufferCapacity(buffer)));
104 return MojoQueryHandleSignalsState(mojo_handle, signals_state); 142 struct MojoHandleSignalsState* signals_state =
143 static_cast<struct MojoHandleSignalsState*>(buffer_start);
144 return MojoWait(mojo_handle, signals, deadline, signals_state);
105 } 145 }
106 146
107 static jint WriteMessage(JNIEnv* env, 147 static jint WriteMessage(JNIEnv* env,
108 const JavaParamRef<jobject>& jcaller, 148 const JavaParamRef<jobject>& jcaller,
109 jint mojo_handle, 149 jint mojo_handle,
110 const JavaParamRef<jobject>& bytes, 150 const JavaParamRef<jobject>& bytes,
111 jint num_bytes, 151 jint num_bytes,
112 const JavaParamRef<jobject>& handles_buffer, 152 const JavaParamRef<jobject>& handles_buffer,
113 jint flags) { 153 jint flags) {
114 const void* buffer_start = 0; 154 const void* buffer_start = 0;
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 return 0; 340 return 0;
301 return alignment - offset; 341 return alignment - offset;
302 } 342 }
303 343
304 bool RegisterCoreImpl(JNIEnv* env) { 344 bool RegisterCoreImpl(JNIEnv* env) {
305 return RegisterNativesImpl(env); 345 return RegisterNativesImpl(env);
306 } 346 }
307 347
308 } // namespace android 348 } // namespace android
309 } // namespace mojo 349 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698