diff options
author | jbates@chromium.org <jbates@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-03 17:51:25 +0000 |
---|---|---|
committer | jbates@chromium.org <jbates@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-03 17:51:25 +0000 |
commit | 19d8a90fbc1fd7c26a873dc84fcbc875c509cf11 (patch) | |
tree | fc4334d1a7764649899ee6bbfef21c347f1a11fb /base/threading | |
parent | e4a2d08560a6853ce728c142ee71a104f14acea0 (diff) | |
download | chromium_src-19d8a90fbc1fd7c26a873dc84fcbc875c509cf11.zip chromium_src-19d8a90fbc1fd7c26a873dc84fcbc875c509cf11.tar.gz chromium_src-19d8a90fbc1fd7c26a873dc84fcbc875c509cf11.tar.bz2 |
Add trace code to track all posted tasks in message_loop and WorkerThreads (non-official builds only).
It's very helpful to understand what chrome is doing at runtime. Sometimes a thread in chrome does something expensive that causes a frame hitch. With this change, any expensive task will show up clearly in traces, with the file/function of where the task was posted.
TEST=go to about:tracing, run a trace and notice that all tasks are traced.
Review URL: http://codereview.chromium.org/7778033
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@103740 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/threading')
-rw-r--r-- | base/threading/worker_pool_posix.cc | 7 | ||||
-rw-r--r-- | base/threading/worker_pool_posix.h | 2 | ||||
-rw-r--r-- | base/threading/worker_pool_win.cc | 10 |
3 files changed, 17 insertions, 2 deletions
diff --git a/base/threading/worker_pool_posix.cc b/base/threading/worker_pool_posix.cc index c3a382c..3a4408c 100644 --- a/base/threading/worker_pool_posix.cc +++ b/base/threading/worker_pool_posix.cc @@ -5,6 +5,7 @@ #include "base/threading/worker_pool_posix.h" #include "base/bind.h" +#include "base/debug/trace_event.h" #include "base/lazy_instance.h" #include "base/logging.h" #include "base/memory/ref_counted.h" @@ -83,6 +84,9 @@ void WorkerThread::ThreadMain() { PosixDynamicThreadPool::PendingTask pending_task = pool_->WaitForTask(); if (pending_task.task.is_null()) break; + UNSHIPPED_TRACE_EVENT2("task", "WorkerThread::ThreadMain::Run", + "src_file", pending_task.posted_from.file_name(), + "src_func", pending_task.posted_from.function_name()); pending_task.task.Run(); } @@ -107,7 +111,8 @@ bool WorkerPool::PostTask(const tracked_objects::Location& from_here, PosixDynamicThreadPool::PendingTask::PendingTask( const tracked_objects::Location& posted_from, const base::Closure& task) - : task(task) { + : posted_from(posted_from), + task(task) { } PosixDynamicThreadPool::PendingTask::~PendingTask() { diff --git a/base/threading/worker_pool_posix.h b/base/threading/worker_pool_posix.h index 990f50a..59593e2 100644 --- a/base/threading/worker_pool_posix.h +++ b/base/threading/worker_pool_posix.h @@ -55,6 +55,8 @@ class BASE_EXPORT PosixDynamicThreadPool // tracked_objects::TallyADeathIfActive() and // tracked_objects::TallyABirthIfActive correctly. + const tracked_objects::Location posted_from; + // The task to run. base::Closure task; }; diff --git a/base/threading/worker_pool_win.cc b/base/threading/worker_pool_win.cc index 2aa423f..b7eaad1 100644 --- a/base/threading/worker_pool_win.cc +++ b/base/threading/worker_pool_win.cc @@ -5,6 +5,7 @@ #include "base/threading/worker_pool.h" #include "base/bind.h" +#include "base/debug/trace_event.h" #include "base/logging.h" #include "base/task.h" #include "base/tracked_objects.h" @@ -17,7 +18,8 @@ struct PendingTask { PendingTask( const tracked_objects::Location& posted_from, const base::Closure& task) - : task(task) { + : posted_from(posted_from), + task(task) { #if defined(TRACK_ALL_TASK_OBJECTS) post_births = tracked_objects::ThreadData::TallyABirthIfActive(posted_from); time_posted = TimeTicks::Now(); @@ -32,12 +34,18 @@ struct PendingTask { TimeTicks time_posted; #endif // defined(TRACK_ALL_TASK_OBJECTS) + // The site this PendingTask was posted from. + tracked_objects::Location posted_from; + // The task to run. base::Closure task; }; DWORD CALLBACK WorkItemCallback(void* param) { PendingTask* pending_task = static_cast<PendingTask*>(param); + UNSHIPPED_TRACE_EVENT2("task", "WorkItemCallback::Run", + "src_file", pending_task->posted_from.file_name(), + "src_func", pending_task->posted_from.function_name()); pending_task->task.Run(); #if defined(TRACK_ALL_TASK_OBJECTS) tracked_objects::ThreadData::TallyADeathIfActive( |