From f0dc8b5519102b3d3e738aed846975ae4239421e Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Wed, 17 Dec 2014 10:13:30 -0800 Subject: Add systrace events to monitors and thread suspension Added systrace events to SuspendThreadByPeer, SuspendThreadByThreadId and monitor contention. Bug: 18379850 Bug: 17470248 Change-Id: I29eaf97c67361a6c6b437940b8729600d78696df --- runtime/thread_list.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'runtime/thread_list.cc') diff --git a/runtime/thread_list.cc b/runtime/thread_list.cc index 6a9111f..65a8bd0 100644 --- a/runtime/thread_list.cc +++ b/runtime/thread_list.cc @@ -454,6 +454,9 @@ void ThreadList::ResumeAll() { } void ThreadList::Resume(Thread* thread, bool for_debugger) { + // This assumes there was an ATRACE_BEGIN when we suspended the thread. + ATRACE_END(); + Thread* self = Thread::Current(); DCHECK_NE(thread, self); VLOG(threads) << "Resume(" << reinterpret_cast(thread) << ") starting..." @@ -564,6 +567,12 @@ Thread* ThreadList::SuspendThreadByPeer(jobject peer, bool request_suspension, // done. if (thread->IsSuspended()) { VLOG(threads) << "SuspendThreadByPeer thread suspended: " << *thread; + if (ATRACE_ENABLED()) { + std::string name; + thread->GetThreadName(name); + ATRACE_BEGIN(StringPrintf("SuspendThreadByPeer suspended %s for peer=%p", name.c_str(), + peer).c_str()); + } return thread; } if (total_delay_us >= kTimeoutUs) { @@ -648,6 +657,12 @@ Thread* ThreadList::SuspendThreadByThreadId(uint32_t thread_id, bool debug_suspe // count, or else we've waited and it has self suspended) or is the current thread, we're // done. if (thread->IsSuspended()) { + if (ATRACE_ENABLED()) { + std::string name; + thread->GetThreadName(name); + ATRACE_BEGIN(StringPrintf("SuspendThreadByThreadId suspended %s id=%d", + name.c_str(), thread_id).c_str()); + } VLOG(threads) << "SuspendThreadByThreadId thread suspended: " << *thread; return thread; } -- cgit v1.1