summaryrefslogtreecommitdiffstats
path: root/base/threading
diff options
context:
space:
mode:
authorjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-28 21:41:50 +0000
committerjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-28 21:41:50 +0000
commit6b26b96010bb329642eeb56c2da56e9340cbe847 (patch)
tree4a96ac4da4f82990a0ac4bcb2a33c4a41d56bed1 /base/threading
parentb1799be90161b0fd41e78851d9d7e130a202adbf (diff)
downloadchromium_src-6b26b96010bb329642eeb56c2da56e9340cbe847.zip
chromium_src-6b26b96010bb329642eeb56c2da56e9340cbe847.tar.gz
chromium_src-6b26b96010bb329642eeb56c2da56e9340cbe847.tar.bz2
Revert 107793 - Fully enable about:tracking by default
Support is now controlled by the flag: --enable-tracking and the default is always on. To turn it off, use: --enable-tracking=0 All profiler code is compiled now in release and official builds (in addition to debug, where it was already active), but most entry points can be disabled (turned into no-ops) by a single const bool setting atop tracked_objects.cc (in case folks want to revert the perf-impact of this change). Transition to faster Now() service on Windows for the profiler use only. The TimeTicks::Now() function on Window uses locking to get a 64 bit time value. This CL transitions times used for profiling to more directly use a 32 bit Time interface, which is actually what drives the 64 bit TimeTicks. By using the smaller value, we avoid the need for locks, or even atomic operations for the most part in the tracking system. On linux, we just down-sample the standard TimeTicks to 32 bits for consistency (clean ability to snapshot asyncronously without atomics... but I should verify that such is helpful to performance). I've also put in yet more cleanup and refactoring. r=rtenneti bug=101856 Review URL: http://codereview.chromium.org/8391019 TBR=jar@chromium.org Review URL: http://codereview.chromium.org/8400073 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107799 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/threading')
-rw-r--r--base/threading/thread.cc2
-rw-r--r--base/threading/worker_pool_posix.cc19
-rw-r--r--base/threading/worker_pool_posix.h6
-rw-r--r--base/threading/worker_pool_win.cc24
4 files changed, 32 insertions, 19 deletions
diff --git a/base/threading/thread.cc b/base/threading/thread.cc
index d49f247..2a8d999 100644
--- a/base/threading/thread.cc
+++ b/base/threading/thread.cc
@@ -152,7 +152,9 @@ void Thread::ThreadMain() {
ANNOTATE_THREAD_NAME(name_.c_str()); // Tell the name to race detector.
message_loop.set_thread_name(name_);
message_loop_ = &message_loop;
+#if defined(TRACK_ALL_TASK_OBJECTS)
tracked_objects::ThreadData::InitializeThreadContext(name_);
+#endif // TRACK_ALL_TASK_OBJECTS
// Let the thread do extra initialization.
// Let's do this before signaling we are started.
diff --git a/base/threading/worker_pool_posix.cc b/base/threading/worker_pool_posix.cc
index 917565d..41fa01a 100644
--- a/base/threading/worker_pool_posix.cc
+++ b/base/threading/worker_pool_posix.cc
@@ -88,14 +88,15 @@ void WorkerThread::ThreadMain() {
"src_file", pending_task.posted_from.file_name(),
"src_func", pending_task.posted_from.function_name());
- tracked_objects::TrackedTime start_time =
- tracked_objects::ThreadData::Now();
-
+#if defined(TRACK_ALL_TASK_OBJECTS)
+ TimeTicks start_of_run = tracked_objects::ThreadData::Now();
+#endif // defined(TRACK_ALL_TASK_OBJECTS)
pending_task.task.Run();
-
- tracked_objects::ThreadData::TallyRunOnWorkerThreadIfTracking(
- pending_task.birth_tally, pending_task.time_posted,
- start_time, tracked_objects::ThreadData::Now());
+#if defined(TRACK_ALL_TASK_OBJECTS)
+ tracked_objects::ThreadData::TallyADeathIfActive(pending_task.post_births,
+ pending_task.time_posted, TimeTicks(), start_of_run,
+ tracked_objects::ThreadData::Now());
+#endif // defined(TRACK_ALL_TASK_OBJECTS)
}
// The WorkerThread is non-joinable, so it deletes itself.
@@ -121,8 +122,10 @@ PosixDynamicThreadPool::PendingTask::PendingTask(
const base::Closure& task)
: posted_from(posted_from),
task(task) {
- birth_tally = tracked_objects::ThreadData::TallyABirthIfActive(posted_from);
+#if defined(TRACK_ALL_TASK_OBJECTS)
+ post_births = tracked_objects::ThreadData::TallyABirthIfActive(posted_from);
time_posted = tracked_objects::ThreadData::Now();
+#endif // defined(TRACK_ALL_TASK_OBJECTS)
}
PosixDynamicThreadPool::PendingTask::~PendingTask() {
diff --git a/base/threading/worker_pool_posix.h b/base/threading/worker_pool_posix.h
index 2cc1150..c0a60cc 100644
--- a/base/threading/worker_pool_posix.h
+++ b/base/threading/worker_pool_posix.h
@@ -53,11 +53,13 @@ class BASE_EXPORT PosixDynamicThreadPool
const base::Closure& task);
~PendingTask();
+#if defined(TRACK_ALL_TASK_OBJECTS)
// Counter for location where the Closure was posted from.
- tracked_objects::Births* birth_tally;
+ tracked_objects::Births* post_births;
// Time the task was posted.
- tracked_objects::TrackedTime time_posted;
+ TimeTicks time_posted;
+#endif // defined(TRACK_ALL_TASK_OBJECTS)
const tracked_objects::Location posted_from;
diff --git a/base/threading/worker_pool_win.cc b/base/threading/worker_pool_win.cc
index b73cabd..0cd3d96 100644
--- a/base/threading/worker_pool_win.cc
+++ b/base/threading/worker_pool_win.cc
@@ -20,15 +20,19 @@ struct PendingTask {
const base::Closure& task)
: posted_from(posted_from),
task(task) {
- birth_tally = tracked_objects::ThreadData::TallyABirthIfActive(posted_from);
+#if defined(TRACK_ALL_TASK_OBJECTS)
+ post_births = tracked_objects::ThreadData::TallyABirthIfActive(posted_from);
time_posted = tracked_objects::ThreadData::Now();
+#endif // defined(TRACK_ALL_TASK_OBJECTS)
}
+#if defined(TRACK_ALL_TASK_OBJECTS)
// Counter for location where the Closure was posted from.
- tracked_objects::Births* birth_tally;
+ tracked_objects::Births* post_births;
// Time the task was posted.
- tracked_objects::TrackedTime time_posted;
+ TimeTicks time_posted;
+#endif // defined(TRACK_ALL_TASK_OBJECTS)
// The site this PendingTask was posted from.
tracked_objects::Location posted_from;
@@ -43,13 +47,15 @@ DWORD CALLBACK WorkItemCallback(void* param) {
"src_file", pending_task->posted_from.file_name(),
"src_func", pending_task->posted_from.function_name());
- tracked_objects::TrackedTime start_time = tracked_objects::ThreadData::Now();
-
+#if defined(TRACK_ALL_TASK_OBJECTS)
+ TimeTicks start_of_run = tracked_objects::ThreadData::Now();
+#endif // defined(TRACK_ALL_TASK_OBJECTS)
pending_task->task.Run();
-
- tracked_objects::ThreadData::TallyRunOnWorkerThreadIfTracking(
- pending_task->birth_tally, pending_task->time_posted,
- start_time, tracked_objects::ThreadData::Now());
+#if defined(TRACK_ALL_TASK_OBJECTS)
+ tracked_objects::ThreadData::TallyADeathIfActive(pending_task->post_births,
+ pending_task->time_posted, TimeTicks::TimeTicks(), start_of_run,
+ tracked_objects::ThreadData::Now());
+#endif // defined(TRACK_ALL_TASK_OBJECTS)
delete pending_task;
return 0;