// 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. #include "mojo/android/system/base_run_loop.h" #include #include "base/android/base_jni_registrar.h" #include "base/android/jni_android.h" #include "base/android/jni_registrar.h" #include "base/bind.h" #include "base/message_loop/message_loop.h" #include "jni/BaseRunLoop_jni.h" #include "mojo/message_pump/message_pump_mojo.h" namespace mojo { namespace android { static jlong CreateBaseRunLoop(JNIEnv* env, const JavaParamRef& jcaller) { base::MessageLoop* message_loop = new base::MessageLoop(common::MessagePumpMojo::Create()); return reinterpret_cast(message_loop); } static void Run(JNIEnv* env, const JavaParamRef& jcaller, jlong runLoopID) { reinterpret_cast(runLoopID)->Run(); } static void RunUntilIdle(JNIEnv* env, const JavaParamRef& jcaller, jlong runLoopID) { reinterpret_cast(runLoopID)->RunUntilIdle(); } static void Quit(JNIEnv* env, const JavaParamRef& jcaller, jlong runLoopID) { reinterpret_cast(runLoopID)->QuitWhenIdle(); } static void RunJavaRunnable( const base::android::ScopedJavaGlobalRef& runnable_ref) { Java_BaseRunLoop_runRunnable(base::android::AttachCurrentThread(), runnable_ref.obj()); } static void PostDelayedTask(JNIEnv* env, const JavaParamRef& jcaller, jlong runLoopID, const JavaParamRef& runnable, jlong delay) { base::android::ScopedJavaGlobalRef runnable_ref; // ScopedJavaGlobalRef do not hold onto the env reference, so it is safe to // use it across threads. |RunJavaRunnable| will acquire a new JNIEnv before // running the Runnable. runnable_ref.Reset(env, runnable); reinterpret_cast(runLoopID)->PostDelayedTask( FROM_HERE, base::Bind(&RunJavaRunnable, runnable_ref), base::TimeDelta::FromMicroseconds(delay)); } static void DeleteMessageLoop(JNIEnv* env, const JavaParamRef& jcaller, jlong runLoopID) { base::MessageLoop* message_loop = reinterpret_cast(runLoopID); delete message_loop; } bool RegisterBaseRunLoop(JNIEnv* env) { return RegisterNativesImpl(env); } } // namespace android } // namespace mojo