Log when a Thread tries to set its name.

Useful when debugging early failures to have thread names rather than just ids.

Change-Id: I3e00e530847cabb70a1894d2ddaaeb0251642aad
diff --git a/src/java_lang_Thread.cc b/src/java_lang_Thread.cc
index d2f1349..b1da60d 100644
--- a/src/java_lang_Thread.cc
+++ b/src/java_lang_Thread.cc
@@ -16,6 +16,7 @@
 
 #include "jni_internal.h"
 #include "object.h"
+#include "ScopedUtfChars.h"
 #include "thread.h"
 #include "thread_list.h"
 
@@ -72,11 +73,18 @@
 
 void Thread_nativeSetName(JNIEnv* env, jobject javaThread, jstring javaName) {
   ThreadListLock lock;
-  // TODO: needed for debugging (DDMS) support.
-  //Thread* thread = Thread::FromManagedThread(env, javaThread);
-  //StringObject* nameStr = (StringObject*) dvmDecodeIndirectRef(env, javaName);
-  //int threadId = (thread != NULL) ? thread->threadId : -1;
-  //dvmDdmSendThreadNameChange(threadId, nameStr);
+  Thread* thread = Thread::FromManagedThread(env, javaThread);
+  if (thread != NULL) {
+    ScopedUtfChars name(env, javaName);
+    if (name.c_str() == NULL) {
+      return;
+    }
+    LOG(INFO) << "Thread " << *thread << " changing name to '" << name.c_str() << "'";
+    // TODO: needed for debugging (DDMS) support.
+    //StringObject* nameStr = (StringObject*) dvmDecodeIndirectRef(env, javaName);
+    //int threadId = (thread != NULL) ? thread->threadId : -1;
+    //dvmDdmSendThreadNameChange(threadId, nameStr);
+  }
 }
 
 /*