Index: mojo/android/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java |
diff --git a/mojo/android/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java b/mojo/android/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..112b825db165a05ab9a6974d8da9e76489a0312b |
--- /dev/null |
+++ b/mojo/android/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java |
@@ -0,0 +1,68 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.mojo.system.impl; |
+ |
+import org.chromium.base.CalledByNative; |
+import org.chromium.base.JNINamespace; |
+import org.chromium.mojo.system.RunLoop; |
+ |
+import java.lang.Runnable; |
+ |
+/** |
+ * Implementation of {@link RunLoop} suitable for the base:: message loop implementation. |
+ */ |
+@JNINamespace("mojo::android") |
+class BaseRunLoop implements RunLoop { |
+ /** |
+ * Pointer to the C run loop. |
+ */ |
+ private long mRunLoopID; |
+ private final CoreImpl mCore; |
+ |
+ BaseRunLoop(CoreImpl core) { |
+ this.mCore = core; |
+ this.mRunLoopID = nativeCreateBaseRunLoop(); |
+ } |
+ |
+ @Override |
+ public void run() { |
+ nativeRun(mRunLoopID); |
+ } |
+ |
+ @Override |
+ public void runUntilIdle() { |
+ nativeRunUntilIdle(mRunLoopID); |
+ } |
+ |
+ @Override |
+ public void quit() { |
+ nativeQuit(mRunLoopID); |
+ } |
+ |
+ @Override |
+ public void postDelayedTask(Runnable runnable, long delay) { |
+ nativePostDelayedTask(mRunLoopID, runnable, delay); |
+ } |
+ |
+ @Override |
+ public void close() { |
qsr
2015/02/10 11:58:18
close should be callable multiple time, so you sho
etiennej
2015/02/10 14:32:04
Done.
|
+ // We don't want to de-register a different run loop! |
+ assert mCore.getCurrentRunLoop() == this : "We can only close the current run loop"; |
+ mCore.releaseRunLoop(); |
+ nativeDeleteMessageLoop(mRunLoopID); |
+ } |
+ |
+ @CalledByNative |
+ private static void runRunnable(Runnable runnable) { |
+ runnable.run(); |
+ } |
+ |
+ private native long nativeCreateBaseRunLoop(); |
+ private native void nativeRun(long runLoopID); |
+ private native void nativeRunUntilIdle(long runLoopID); |
+ private native void nativeQuit(long runLoopID); |
+ private native void nativePostDelayedTask(long runLoopID, Runnable runnable, long delay); |
+ private native void nativeDeleteMessageLoop(long runLoopID); |
+} |