More threads work.
Adds stubs (and sometimes implementations) for dalvik.system.VMStack and
java.lang.Thread native methods. There was a bug in the dalvik
thread priority setting code, where the current thread and the passed-in
thread were confused.
I've also pulled Mutex and ThreadList out into their own files, and
moved some functionality around (with the aim of having more stuff
private, especially locks).
Change-Id: Ieb0f22669cac3df44ca34f7868f8e7d4dfa09ab6
diff --git a/src/runtime.cc b/src/runtime.cc
index 9517bc2..454a38c 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -14,6 +14,7 @@
#include "jni_internal.h"
#include "signal_catcher.h"
#include "thread.h"
+#include "thread_list.h"
// TODO: this drags in cutil/log.h, which conflicts with our logging.h.
#include "JniConstants.h"
@@ -363,7 +364,7 @@
abort_ = options->hook_abort_;
default_stack_size_ = options->stack_size_;
- thread_list_ = ThreadList::Create();
+ thread_list_ = new ThreadList;
intern_table_ = new InternTable;
@@ -407,18 +408,17 @@
void Runtime::RegisterRuntimeNativeMethods(JNIEnv* env) {
#define REGISTER(FN) extern void FN(JNIEnv*); FN(env)
- //REGISTER(register_dalvik_bytecode_OpcodeInfo);
//REGISTER(register_dalvik_system_DexFile);
//REGISTER(register_dalvik_system_VMDebug);
//REGISTER(register_dalvik_system_VMRuntime);
- //REGISTER(register_dalvik_system_VMStack);
+ REGISTER(register_dalvik_system_VMStack);
//REGISTER(register_dalvik_system_Zygote);
//REGISTER(register_java_lang_Class);
REGISTER(register_java_lang_Object);
REGISTER(register_java_lang_Runtime);
REGISTER(register_java_lang_String);
REGISTER(register_java_lang_System);
- //REGISTER(register_java_lang_Thread);
+ REGISTER(register_java_lang_Thread);
REGISTER(register_java_lang_Throwable);
//REGISTER(register_java_lang_VMClassLoader);
//REGISTER(register_java_lang_reflect_AccessibleObject);
@@ -434,7 +434,7 @@
#undef REGISTER
}
-void Runtime::DumpStatistics(std::ostream& os) {
+void Runtime::Dump(std::ostream& os) {
// TODO: dump other runtime statistics?
os << "Loaded classes: " << class_linker_->NumLoadedClasses() << "\n";
os << "Intern table size: " << GetInternTable()->Size() << "\n";
@@ -445,6 +445,8 @@
// gDvm.pBootLoaderAlloc->curOffset);
// LOGI("GC precise methods: %d", dvmPointerSetGetCount(gDvm.preciseMethods));
os << "\n";
+
+ thread_list_->Dump(os);
}
void Runtime::BlockSignals() {