diff options
| author | 2013-08-29 17:05:32 +0000 | |
|---|---|---|
| committer | 2013-08-29 17:05:32 +0000 | |
| commit | bd1edce8f129382f20cff74ddeb4a03aea50b02c (patch) | |
| tree | 79a8d38d7af7d39a6785241bbbefc22d70c80566 | |
| parent | a7d56cf5e0fe6da41969f6dd841aef0d73f09d93 (diff) | |
| parent | 920af3e556c730a5fbdab90a6d0ec1a2dbe8940b (diff) | |
Merge "Fix thread status in THST chunk to use JDWP thread state." into dalvik-dev
| -rw-r--r-- | runtime/debugger.cc | 55 | ||||
| -rw-r--r-- | runtime/debugger.h | 2 | ||||
| -rw-r--r-- | runtime/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc | 2 |
3 files changed, 36 insertions, 23 deletions
diff --git a/runtime/debugger.cc b/runtime/debugger.cc index a72ae22d71..e01857f994 100644 --- a/runtime/debugger.cc +++ b/runtime/debugger.cc @@ -1661,6 +1661,38 @@ JDWP::ObjectId Dbg::GetMainThreadGroupId() { return gRegistry->Add(group); } +JDWP::JdwpThreadStatus Dbg::ToJdwpThreadStatus(ThreadState state) { + switch (state) { + case kBlocked: + return JDWP::TS_MONITOR; + case kNative: + case kRunnable: + case kSuspended: + return JDWP::TS_RUNNING; + case kSleeping: + return JDWP::TS_SLEEPING; + case kStarting: + case kTerminated: + return JDWP::TS_ZOMBIE; + case kTimedWaiting: + case kWaitingForDebuggerSend: + case kWaitingForDebuggerSuspension: + case kWaitingForDebuggerToAttach: + case kWaitingForGcToComplete: + case kWaitingForCheckPointsToRun: + case kWaitingForJniOnLoad: + case kWaitingForSignalCatcherOutput: + case kWaitingInMainDebuggerLoop: + case kWaitingInMainSignalCatcherLoop: + case kWaitingPerformingGc: + case kWaiting: + return JDWP::TS_WAIT; + // Don't add a 'default' here so the compiler can spot incompatible enum changes. + } + LOG(FATAL) << "Unknown thread state: " << state; + return JDWP::TS_ZOMBIE; +} + JDWP::JdwpError Dbg::GetThreadStatus(JDWP::ObjectId thread_id, JDWP::JdwpThreadStatus* pThreadStatus, JDWP::JdwpSuspendStatus* pSuspendStatus) { ScopedObjectAccess soa(Thread::Current()); @@ -1681,28 +1713,7 @@ JDWP::JdwpError Dbg::GetThreadStatus(JDWP::ObjectId thread_id, JDWP::JdwpThreadS *pSuspendStatus = JDWP::SUSPEND_STATUS_SUSPENDED; } - switch (thread->GetState()) { - case kBlocked: *pThreadStatus = JDWP::TS_MONITOR; break; - case kNative: *pThreadStatus = JDWP::TS_RUNNING; break; - case kRunnable: *pThreadStatus = JDWP::TS_RUNNING; break; - case kSleeping: *pThreadStatus = JDWP::TS_SLEEPING; break; - case kStarting: *pThreadStatus = JDWP::TS_ZOMBIE; break; - case kSuspended: *pThreadStatus = JDWP::TS_RUNNING; break; - case kTerminated: *pThreadStatus = JDWP::TS_ZOMBIE; break; - case kTimedWaiting: *pThreadStatus = JDWP::TS_WAIT; break; - case kWaitingForDebuggerSend: *pThreadStatus = JDWP::TS_WAIT; break; - case kWaitingForDebuggerSuspension: *pThreadStatus = JDWP::TS_WAIT; break; - case kWaitingForDebuggerToAttach: *pThreadStatus = JDWP::TS_WAIT; break; - case kWaitingForGcToComplete: *pThreadStatus = JDWP::TS_WAIT; break; - case kWaitingForCheckPointsToRun: *pThreadStatus = JDWP::TS_WAIT; break; - case kWaitingForJniOnLoad: *pThreadStatus = JDWP::TS_WAIT; break; - case kWaitingForSignalCatcherOutput: *pThreadStatus = JDWP::TS_WAIT; break; - case kWaitingInMainDebuggerLoop: *pThreadStatus = JDWP::TS_WAIT; break; - case kWaitingInMainSignalCatcherLoop: *pThreadStatus = JDWP::TS_WAIT; break; - case kWaitingPerformingGc: *pThreadStatus = JDWP::TS_WAIT; break; - case kWaiting: *pThreadStatus = JDWP::TS_WAIT; break; - // Don't add a 'default' here so the compiler can spot incompatible enum changes. - } + *pThreadStatus = ToJdwpThreadStatus(thread->GetState()); return JDWP::ERR_NONE; } diff --git a/runtime/debugger.h b/runtime/debugger.h index 2282305ac2..d0fe445df1 100644 --- a/runtime/debugger.h +++ b/runtime/debugger.h @@ -29,6 +29,7 @@ #include "jni.h" #include "jvalue.h" #include "root_visitor.h" +#include "thread_state.h" namespace art { namespace mirror { @@ -268,6 +269,7 @@ class Dbg { SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); static JDWP::ObjectId GetMainThreadGroupId(); + static JDWP::JdwpThreadStatus ToJdwpThreadStatus(ThreadState state); static JDWP::JdwpError GetThreadStatus(JDWP::ObjectId thread_id, JDWP::JdwpThreadStatus* pThreadStatus, JDWP::JdwpSuspendStatus* pSuspendStatus); static JDWP::JdwpError GetThreadDebugSuspendCount(JDWP::ObjectId thread_id, JDWP::ExpandBuf* pReply); // static void WaitForSuspend(JDWP::ObjectId thread_id); diff --git a/runtime/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc b/runtime/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc index 5ba29946d1..13cd978ef3 100644 --- a/runtime/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc +++ b/runtime/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc @@ -114,7 +114,7 @@ static void ThreadStatsGetterCallback(Thread* t, void* context) { std::vector<uint8_t>& bytes = *reinterpret_cast<std::vector<uint8_t>*>(context); JDWP::Append4BE(bytes, t->GetThinLockId()); - JDWP::Append1BE(bytes, t->GetState()); + JDWP::Append1BE(bytes, Dbg::ToJdwpThreadStatus(t->GetState())); JDWP::Append4BE(bytes, t->GetTid()); JDWP::Append4BE(bytes, utime); JDWP::Append4BE(bytes, stime); |