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

Side by Side Diff: mojo/android/system/src/org/chromium/mojo/system/impl/CoreImpl.java

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 package org.chromium.mojo.system.impl; 5 package org.chromium.mojo.system.impl;
6 6
7 import org.chromium.base.annotations.CalledByNative; 7 import org.chromium.base.annotations.CalledByNative;
8 import org.chromium.base.annotations.JNINamespace; 8 import org.chromium.base.annotations.JNINamespace;
9 import org.chromium.base.annotations.MainDex; 9 import org.chromium.base.annotations.MainDex;
10 import org.chromium.mojo.system.Core; 10 import org.chromium.mojo.system.Core;
11 import org.chromium.mojo.system.Core.HandleSignalsState;
12 import org.chromium.mojo.system.DataPipe; 11 import org.chromium.mojo.system.DataPipe;
13 import org.chromium.mojo.system.DataPipe.ConsumerHandle; 12 import org.chromium.mojo.system.DataPipe.ConsumerHandle;
14 import org.chromium.mojo.system.DataPipe.ProducerHandle; 13 import org.chromium.mojo.system.DataPipe.ProducerHandle;
15 import org.chromium.mojo.system.Handle; 14 import org.chromium.mojo.system.Handle;
16 import org.chromium.mojo.system.MessagePipeHandle; 15 import org.chromium.mojo.system.MessagePipeHandle;
17 import org.chromium.mojo.system.MojoException; 16 import org.chromium.mojo.system.MojoException;
18 import org.chromium.mojo.system.MojoResult; 17 import org.chromium.mojo.system.MojoResult;
19 import org.chromium.mojo.system.Pair; 18 import org.chromium.mojo.system.Pair;
20 import org.chromium.mojo.system.ResultAnd; 19 import org.chromium.mojo.system.ResultAnd;
21 import org.chromium.mojo.system.RunLoop; 20 import org.chromium.mojo.system.RunLoop;
22 import org.chromium.mojo.system.SharedBufferHandle; 21 import org.chromium.mojo.system.SharedBufferHandle;
23 import org.chromium.mojo.system.SharedBufferHandle.DuplicateOptions; 22 import org.chromium.mojo.system.SharedBufferHandle.DuplicateOptions;
24 import org.chromium.mojo.system.SharedBufferHandle.MapFlags; 23 import org.chromium.mojo.system.SharedBufferHandle.MapFlags;
25 import org.chromium.mojo.system.UntypedHandle; 24 import org.chromium.mojo.system.UntypedHandle;
26 import org.chromium.mojo.system.Watcher; 25 import org.chromium.mojo.system.Watcher;
27 26
28 import java.nio.ByteBuffer; 27 import java.nio.ByteBuffer;
29 import java.nio.ByteOrder; 28 import java.nio.ByteOrder;
30 import java.util.ArrayList; 29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.List; 31 import java.util.List;
32 32
33 /** 33 /**
34 * Implementation of {@link Core}. 34 * Implementation of {@link Core}.
35 */ 35 */
36 @JNINamespace("mojo::android") 36 @JNINamespace("mojo::android")
37 @MainDex 37 @MainDex
38 public class CoreImpl implements Core { 38 public class CoreImpl implements Core {
39 /** 39 /**
40 * Discard flag for the |MojoReadData| operation. 40 * Discard flag for the |MojoReadData| operation.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 84
85 /** 85 /**
86 * @see Core#getTimeTicksNow() 86 * @see Core#getTimeTicksNow()
87 */ 87 */
88 @Override 88 @Override
89 public long getTimeTicksNow() { 89 public long getTimeTicksNow() {
90 return nativeGetTimeTicksNow(); 90 return nativeGetTimeTicksNow();
91 } 91 }
92 92
93 /** 93 /**
94 * @see Core#waitMany(List, long)
95 */
96 @Override
97 public WaitManyResult waitMany(List<Pair<Handle, HandleSignals>> handles, lo ng deadline) {
98 // Allocate a direct buffer to allow native code not to reach back to ja va. The buffer
99 // layout will be:
100 // input: The array of handles (int, 4 bytes each)
101 // input: The array of signals (int, 4 bytes each)
102 // space for output: The array of handle states (2 ints, 8 bytes each)
103 // Space for output: The result index (int, 4 bytes)
104 // The handles and signals will be filled before calling the native meth od. When the native
105 // method returns, the handle states and the index will have been set.
106 ByteBuffer buffer = allocateDirectBuffer(handles.size() * 16 + 4);
107 int index = 0;
108 for (Pair<Handle, HandleSignals> handle : handles) {
109 buffer.putInt(HANDLE_SIZE * index, getMojoHandle(handle.first));
110 buffer.putInt(
111 HANDLE_SIZE * handles.size() + FLAG_SIZE * index, handle.sec ond.getFlags());
112 index++;
113 }
114 int code = nativeWaitMany(buffer, deadline);
115 WaitManyResult result = new WaitManyResult();
116 result.setMojoResult(filterMojoResultForWait(code));
117 result.setHandleIndex(buffer.getInt(handles.size() * 16));
118 if (result.getMojoResult() != MojoResult.INVALID_ARGUMENT
119 && result.getMojoResult() != MojoResult.RESOURCE_EXHAUSTED) {
120 HandleSignalsState[] states = new HandleSignalsState[handles.size()] ;
121 for (int i = 0; i < handles.size(); ++i) {
122 states[i] = new HandleSignalsState(
123 new HandleSignals(buffer.getInt(8 * (handles.size() + i) )),
124 new HandleSignals(buffer.getInt(8 * (handles.size() + i) + 4)));
125 }
126 result.setSignalStates(Arrays.asList(states));
127 }
128 return result;
129 }
130
131 /**
132 * @see Core#wait(Handle, HandleSignals, long)
133 */
134 @Override
135 public WaitResult wait(Handle handle, HandleSignals signals, long deadline) {
136 // Allocate a direct buffer to allow native code not to reach back to ja va. Buffer will
137 // contain spaces to write the handle state.
138 ByteBuffer buffer = allocateDirectBuffer(8);
139 WaitResult result = new WaitResult();
140 result.setMojoResult(filterMojoResultForWait(
141 nativeWait(buffer, getMojoHandle(handle), signals.getFlags(), de adline)));
142 HandleSignalsState signalsState = new HandleSignalsState(
143 new HandleSignals(buffer.getInt(0)), new HandleSignals(buffer.ge tInt(4)));
144 result.setHandleSignalsState(signalsState);
145 return result;
146 }
147
148 /**
94 * @see Core#createMessagePipe(MessagePipeHandle.CreateOptions) 149 * @see Core#createMessagePipe(MessagePipeHandle.CreateOptions)
95 */ 150 */
96 @Override 151 @Override
97 public Pair<MessagePipeHandle, MessagePipeHandle> createMessagePipe( 152 public Pair<MessagePipeHandle, MessagePipeHandle> createMessagePipe(
98 MessagePipeHandle.CreateOptions options) { 153 MessagePipeHandle.CreateOptions options) {
99 ByteBuffer optionsBuffer = null; 154 ByteBuffer optionsBuffer = null;
100 if (options != null) { 155 if (options != null) {
101 optionsBuffer = allocateDirectBuffer(8); 156 optionsBuffer = allocateDirectBuffer(8);
102 optionsBuffer.putInt(0, 8); 157 optionsBuffer.putInt(0, 8);
103 optionsBuffer.putInt(4, options.getFlags().getFlags()); 158 optionsBuffer.putInt(4, options.getFlags().getFlags());
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 return nativeClose(mojoHandle); 255 return nativeClose(mojoHandle);
201 } 256 }
202 257
203 void close(int mojoHandle) { 258 void close(int mojoHandle) {
204 int mojoResult = nativeClose(mojoHandle); 259 int mojoResult = nativeClose(mojoHandle);
205 if (mojoResult != MojoResult.OK) { 260 if (mojoResult != MojoResult.OK) {
206 throw new MojoException(mojoResult); 261 throw new MojoException(mojoResult);
207 } 262 }
208 } 263 }
209 264
210 HandleSignalsState queryHandleSignalsState(int mojoHandle) {
211 ByteBuffer buffer = allocateDirectBuffer(8);
212 int result = nativeQueryHandleSignalsState(mojoHandle, buffer);
213 if (result != MojoResult.OK) throw new MojoException(result);
214 return new HandleSignalsState(
215 new HandleSignals(buffer.getInt(0)), new HandleSignals(buffer.ge tInt(4)));
216 }
217
218 /** 265 /**
219 * @see MessagePipeHandle#writeMessage(ByteBuffer, List, MessagePipeHandle.W riteFlags) 266 * @see MessagePipeHandle#writeMessage(ByteBuffer, List, MessagePipeHandle.W riteFlags)
220 */ 267 */
221 void writeMessage(MessagePipeHandleImpl pipeHandle, ByteBuffer bytes, 268 void writeMessage(MessagePipeHandleImpl pipeHandle, ByteBuffer bytes,
222 List<? extends Handle> handles, MessagePipeHandle.WriteFlags flags) { 269 List<? extends Handle> handles, MessagePipeHandle.WriteFlags flags) {
223 ByteBuffer handlesBuffer = null; 270 ByteBuffer handlesBuffer = null;
224 if (handles != null && !handles.isEmpty()) { 271 if (handles != null && !handles.isEmpty()) {
225 handlesBuffer = allocateDirectBuffer(handles.size() * HANDLE_SIZE); 272 handlesBuffer = allocateDirectBuffer(handles.size() * HANDLE_SIZE);
226 for (Handle handle : handles) { 273 for (Handle handle : handles) {
227 handlesBuffer.putInt(getMojoHandle(handle)); 274 handlesBuffer.putInt(getMojoHandle(handle));
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 } 518 }
472 519
473 @CalledByNative 520 @CalledByNative
474 private static ResultAnd<IntegerPair> newNativeCreationResult( 521 private static ResultAnd<IntegerPair> newNativeCreationResult(
475 int mojoResult, int mojoHandle1, int mojoHandle2) { 522 int mojoResult, int mojoHandle1, int mojoHandle2) {
476 return new ResultAnd<>(mojoResult, new IntegerPair(mojoHandle1, mojoHand le2)); 523 return new ResultAnd<>(mojoResult, new IntegerPair(mojoHandle1, mojoHand le2));
477 } 524 }
478 525
479 private native long nativeGetTimeTicksNow(); 526 private native long nativeGetTimeTicksNow();
480 527
528 private native int nativeWaitMany(ByteBuffer buffer, long deadline);
529
481 private native ResultAnd<IntegerPair> nativeCreateMessagePipe(ByteBuffer opt ionsBuffer); 530 private native ResultAnd<IntegerPair> nativeCreateMessagePipe(ByteBuffer opt ionsBuffer);
482 531
483 private native ResultAnd<IntegerPair> nativeCreateDataPipe(ByteBuffer option sBuffer); 532 private native ResultAnd<IntegerPair> nativeCreateDataPipe(ByteBuffer option sBuffer);
484 533
485 private native ResultAnd<Integer> nativeCreateSharedBuffer( 534 private native ResultAnd<Integer> nativeCreateSharedBuffer(
486 ByteBuffer optionsBuffer, long numBytes); 535 ByteBuffer optionsBuffer, long numBytes);
487 536
488 private native int nativeClose(int mojoHandle); 537 private native int nativeClose(int mojoHandle);
489 538
490 private native int nativeQueryHandleSignalsState(int mojoHandle, ByteBuffer signalsStateBuffer); 539 private native int nativeWait(ByteBuffer buffer, int mojoHandle, int signals , long deadline);
491 540
492 private native int nativeWriteMessage( 541 private native int nativeWriteMessage(
493 int mojoHandle, ByteBuffer bytes, int numBytes, ByteBuffer handlesBu ffer, int flags); 542 int mojoHandle, ByteBuffer bytes, int numBytes, ByteBuffer handlesBu ffer, int flags);
494 543
495 private native ResultAnd<MessagePipeHandle.ReadMessageResult> nativeReadMess age( 544 private native ResultAnd<MessagePipeHandle.ReadMessageResult> nativeReadMess age(
496 int mojoHandle, ByteBuffer bytes, ByteBuffer handlesBuffer, int flag s); 545 int mojoHandle, ByteBuffer bytes, ByteBuffer handlesBuffer, int flag s);
497 546
498 private native ResultAnd<Integer> nativeReadData( 547 private native ResultAnd<Integer> nativeReadData(
499 int mojoHandle, ByteBuffer elements, int elementsSize, int flags); 548 int mojoHandle, ByteBuffer elements, int elementsSize, int flags);
500 549
(...skipping 12 matching lines...) Expand all
513 562
514 private native ResultAnd<Integer> nativeDuplicate(int mojoHandle, ByteBuffer optionsBuffer); 563 private native ResultAnd<Integer> nativeDuplicate(int mojoHandle, ByteBuffer optionsBuffer);
515 564
516 private native ResultAnd<ByteBuffer> nativeMap( 565 private native ResultAnd<ByteBuffer> nativeMap(
517 int mojoHandle, long offset, long numBytes, int flags); 566 int mojoHandle, long offset, long numBytes, int flags);
518 567
519 private native int nativeUnmap(ByteBuffer buffer); 568 private native int nativeUnmap(ByteBuffer buffer);
520 569
521 private native int nativeGetNativeBufferOffset(ByteBuffer buffer, int alignm ent); 570 private native int nativeGetNativeBufferOffset(ByteBuffer buffer, int alignm ent);
522 } 571 }
OLDNEW
« no previous file with comments | « mojo/android/system/core_impl.cc ('k') | mojo/android/system/src/org/chromium/mojo/system/impl/HandleBase.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698