summaryrefslogtreecommitdiffstats
path: root/base/threading
diff options
context:
space:
mode:
authorjbates@chromium.org <jbates@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-03 17:51:25 +0000
committerjbates@chromium.org <jbates@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-03 17:51:25 +0000
commit19d8a90fbc1fd7c26a873dc84fcbc875c509cf11 (patch)
treefc4334d1a7764649899ee6bbfef21c347f1a11fb /base/threading
parente4a2d08560a6853ce728c142ee71a104f14acea0 (diff)
downloadchromium_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.cc7
-rw-r--r--base/threading/worker_pool_posix.h2
-rw-r--r--base/threading/worker_pool_win.cc10
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(