Index: mojo/android/system/src/org/chromium/mojo/system/impl/CoreImpl.java |
diff --git a/mojo/android/system/src/org/chromium/mojo/system/impl/CoreImpl.java b/mojo/android/system/src/org/chromium/mojo/system/impl/CoreImpl.java |
index 8330586714ab02779d4020b7a8ffbba3227be343..173f80180f6639f25ef85991a409cb4ada75a49c 100644 |
--- a/mojo/android/system/src/org/chromium/mojo/system/impl/CoreImpl.java |
+++ b/mojo/android/system/src/org/chromium/mojo/system/impl/CoreImpl.java |
@@ -8,6 +8,7 @@ import org.chromium.base.annotations.CalledByNative; |
import org.chromium.base.annotations.JNINamespace; |
import org.chromium.base.annotations.MainDex; |
import org.chromium.mojo.system.Core; |
+import org.chromium.mojo.system.Core.HandleSignalsState; |
import org.chromium.mojo.system.DataPipe; |
import org.chromium.mojo.system.DataPipe.ConsumerHandle; |
import org.chromium.mojo.system.DataPipe.ProducerHandle; |
@@ -27,7 +28,6 @@ import org.chromium.mojo.system.Watcher; |
import java.nio.ByteBuffer; |
import java.nio.ByteOrder; |
import java.util.ArrayList; |
-import java.util.Arrays; |
import java.util.List; |
/** |
@@ -91,61 +91,6 @@ public class CoreImpl implements Core { |
} |
/** |
- * @see Core#waitMany(List, long) |
- */ |
- @Override |
- public WaitManyResult waitMany(List<Pair<Handle, HandleSignals>> handles, long deadline) { |
- // Allocate a direct buffer to allow native code not to reach back to java. The buffer |
- // layout will be: |
- // input: The array of handles (int, 4 bytes each) |
- // input: The array of signals (int, 4 bytes each) |
- // space for output: The array of handle states (2 ints, 8 bytes each) |
- // Space for output: The result index (int, 4 bytes) |
- // The handles and signals will be filled before calling the native method. When the native |
- // method returns, the handle states and the index will have been set. |
- ByteBuffer buffer = allocateDirectBuffer(handles.size() * 16 + 4); |
- int index = 0; |
- for (Pair<Handle, HandleSignals> handle : handles) { |
- buffer.putInt(HANDLE_SIZE * index, getMojoHandle(handle.first)); |
- buffer.putInt( |
- HANDLE_SIZE * handles.size() + FLAG_SIZE * index, handle.second.getFlags()); |
- index++; |
- } |
- int code = nativeWaitMany(buffer, deadline); |
- WaitManyResult result = new WaitManyResult(); |
- result.setMojoResult(filterMojoResultForWait(code)); |
- result.setHandleIndex(buffer.getInt(handles.size() * 16)); |
- if (result.getMojoResult() != MojoResult.INVALID_ARGUMENT |
- && result.getMojoResult() != MojoResult.RESOURCE_EXHAUSTED) { |
- HandleSignalsState[] states = new HandleSignalsState[handles.size()]; |
- for (int i = 0; i < handles.size(); ++i) { |
- states[i] = new HandleSignalsState( |
- new HandleSignals(buffer.getInt(8 * (handles.size() + i))), |
- new HandleSignals(buffer.getInt(8 * (handles.size() + i) + 4))); |
- } |
- result.setSignalStates(Arrays.asList(states)); |
- } |
- return result; |
- } |
- |
- /** |
- * @see Core#wait(Handle, HandleSignals, long) |
- */ |
- @Override |
- public WaitResult wait(Handle handle, HandleSignals signals, long deadline) { |
- // Allocate a direct buffer to allow native code not to reach back to java. Buffer will |
- // contain spaces to write the handle state. |
- ByteBuffer buffer = allocateDirectBuffer(8); |
- WaitResult result = new WaitResult(); |
- result.setMojoResult(filterMojoResultForWait( |
- nativeWait(buffer, getMojoHandle(handle), signals.getFlags(), deadline))); |
- HandleSignalsState signalsState = new HandleSignalsState( |
- new HandleSignals(buffer.getInt(0)), new HandleSignals(buffer.getInt(4))); |
- result.setHandleSignalsState(signalsState); |
- return result; |
- } |
- |
- /** |
* @see Core#createMessagePipe(MessagePipeHandle.CreateOptions) |
*/ |
@Override |
@@ -262,6 +207,14 @@ public class CoreImpl implements Core { |
} |
} |
+ HandleSignalsState queryHandleSignalsState(int mojoHandle) { |
+ ByteBuffer buffer = allocateDirectBuffer(8); |
+ int result = nativeQueryHandleSignalsState(mojoHandle, buffer); |
+ if (result != MojoResult.OK) throw new MojoException(result); |
+ return new HandleSignalsState( |
+ new HandleSignals(buffer.getInt(0)), new HandleSignals(buffer.getInt(4))); |
+ } |
+ |
/** |
* @see MessagePipeHandle#writeMessage(ByteBuffer, List, MessagePipeHandle.WriteFlags) |
*/ |
@@ -525,8 +478,6 @@ public class CoreImpl implements Core { |
private native long nativeGetTimeTicksNow(); |
- private native int nativeWaitMany(ByteBuffer buffer, long deadline); |
- |
private native ResultAnd<IntegerPair> nativeCreateMessagePipe(ByteBuffer optionsBuffer); |
private native ResultAnd<IntegerPair> nativeCreateDataPipe(ByteBuffer optionsBuffer); |
@@ -536,7 +487,7 @@ public class CoreImpl implements Core { |
private native int nativeClose(int mojoHandle); |
- private native int nativeWait(ByteBuffer buffer, int mojoHandle, int signals, long deadline); |
+ private native int nativeQueryHandleSignalsState(int mojoHandle, ByteBuffer signalsStateBuffer); |
private native int nativeWriteMessage( |
int mojoHandle, ByteBuffer bytes, int numBytes, ByteBuffer handlesBuffer, int flags); |