Commit 29bb4ab6 authored by Victor Miura's avatar Victor Miura Committed by Commit Bot

Fix Java thread names on Android.

To get correct thread names in Chrome tracing, it's necessary to register
threads with the base::ThreadIdNameManager and set the thread name.

BUG=873377

Change-Id: Icb8d68f941f95f65c53ae19b16e05f0d85c9bfbd
Reviewed-on: https://chromium-review.googlesource.com/1192589Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Commit-Queue: Victor Miura <vmiura@chromium.org>
Cr-Commit-Position: refs/heads/master@{#587242}
parent 889526f0
......@@ -12,6 +12,7 @@
#include "base/run_loop.h"
#include "base/synchronization/waitable_event.h"
#include "base/threading/platform_thread_internal_posix.h"
#include "base/threading/thread_id_name_manager.h"
#include "base/threading/thread_restrictions.h"
#include "jni/JavaHandlerThread_jni.h"
......@@ -23,14 +24,17 @@ namespace android {
JavaHandlerThread::JavaHandlerThread(const char* name,
base::ThreadPriority priority)
: JavaHandlerThread(Java_JavaHandlerThread_create(
AttachCurrentThread(),
ConvertUTF8ToJavaString(AttachCurrentThread(), name),
base::internal::ThreadPriorityToNiceValue(priority))) {}
: JavaHandlerThread(
name,
Java_JavaHandlerThread_create(
AttachCurrentThread(),
ConvertUTF8ToJavaString(AttachCurrentThread(), name),
base::internal::ThreadPriorityToNiceValue(priority))) {}
JavaHandlerThread::JavaHandlerThread(
const char* name,
const base::android::ScopedJavaLocalRef<jobject>& obj)
: java_thread_(obj) {}
: name_(name), java_thread_(obj) {}
JavaHandlerThread::~JavaHandlerThread() {
JNIEnv* env = base::android::AttachCurrentThread();
......@@ -77,6 +81,13 @@ void JavaHandlerThread::Stop() {
void JavaHandlerThread::InitializeThread(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jlong event) {
base::ThreadIdNameManager::GetInstance()->RegisterThread(
base::PlatformThread::CurrentHandle().platform_handle(),
base::PlatformThread::CurrentId());
if (name_)
PlatformThread::SetName(name_);
// TYPE_JAVA to get the Android java style message loop.
message_loop_ =
std::make_unique<MessageLoopForUI>(base::MessageLoop::TYPE_JAVA);
......@@ -88,7 +99,12 @@ void JavaHandlerThread::OnLooperStopped(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
DCHECK(task_runner()->BelongsToCurrentThread());
message_loop_.reset();
CleanUp();
base::ThreadIdNameManager::GetInstance()->RemoveName(
base::PlatformThread::CurrentHandle().platform_handle(),
base::PlatformThread::CurrentId());
}
void JavaHandlerThread::StopMessageLoopForTesting() {
......
......@@ -33,6 +33,7 @@ class BASE_EXPORT JavaHandlerThread {
// Wrap and connect to an existing JavaHandlerThread.
// |obj| is an instance of JavaHandlerThread.
explicit JavaHandlerThread(
const char* name,
const base::android::ScopedJavaLocalRef<jobject>& obj);
virtual ~JavaHandlerThread();
......@@ -86,6 +87,7 @@ class BASE_EXPORT JavaHandlerThread {
void StopOnThread();
void QuitThreadSafely();
const char* name_;
ScopedJavaGlobalRef<jobject> java_thread_;
};
......
......@@ -15,8 +15,8 @@ namespace android {
// static
std::unique_ptr<JavaHandlerThread> JavaHandlerThreadHelpers::CreateJavaFirst() {
return std::make_unique<JavaHandlerThread>(
Java_JavaHandlerThreadHelpers_testAndGetJavaHandlerThread(
base::android::AttachCurrentThread()));
nullptr, Java_JavaHandlerThreadHelpers_testAndGetJavaHandlerThread(
base::android::AttachCurrentThread()));
}
// static
......
......@@ -18,8 +18,9 @@ base::MessageLoop* LauncherThread::GetMessageLoop() {
}
LauncherThread::LauncherThread()
: java_handler_thread_(Java_LauncherThread_getHandlerThread(
base::android::AttachCurrentThread())) {
: java_handler_thread_(nullptr,
Java_LauncherThread_getHandlerThread(
base::android::AttachCurrentThread())) {
java_handler_thread_.Start();
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment