1bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// found in the LICENSE file. 4bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 5bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#ifndef BASE_THREADING_JAVA_THREAD_H_ 6bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#define BASE_THREADING_JAVA_THREAD_H_ 7bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 8bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include <jni.h> 9bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 10bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "base/android/scoped_java_ref.h" 11bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "base/memory/scoped_ptr.h" 12bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 13bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochnamespace base { 14bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 15bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass MessageLoop; 16bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass WaitableEvent; 17bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 18bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochnamespace android { 19bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 20bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// A Java Thread with a native message loop. To run tasks, post them 21bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// to the message loop and they will be scheduled along with Java tasks 22bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// on the thread. 23bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// This is useful for callbacks where the receiver expects a thread 24bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// with a prepared Looper. 25bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass BASE_EXPORT JavaHandlerThread { 26bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch public: 27bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch JavaHandlerThread(const char* name); 28bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch virtual ~JavaHandlerThread(); 29bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 30bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch base::MessageLoop* message_loop() const { return message_loop_.get(); } 31bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch void Start(); 32bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch void Stop(); 33bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 34bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Called from java on the newly created thread. 35bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Start() will not return before this methods has finished. 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void InitializeThread(JNIEnv* env, jobject obj, jlong event); 37bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 38bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch static bool RegisterBindings(JNIEnv* env); 39bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 40bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch private: 41bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch scoped_ptr<base::MessageLoop> message_loop_; 42bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch ScopedJavaGlobalRef<jobject> java_thread_; 43bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch}; 44bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 45bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} // namespace android 46bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch} // namespace base 47bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 48bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif // BASE_THREADING_JAVA_THREAD_H_ 49