diff options
| -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);  |