diff options
author | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-31 22:36:21 +0000 |
---|---|---|
committer | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-31 22:36:21 +0000 |
commit | b2a9bbd42c6d5215c43067582fa2bca3cfc5e20e (patch) | |
tree | 3a19dea8153c354505ede0d67f4dd20fb03c4326 /base/threading | |
parent | daf82f8e54e875ad6e97aef6952ef181de65caeb (diff) | |
download | chromium_src-b2a9bbd42c6d5215c43067582fa2bca3cfc5e20e.zip chromium_src-b2a9bbd42c6d5215c43067582fa2bca3cfc5e20e.tar.gz chromium_src-b2a9bbd42c6d5215c43067582fa2bca3cfc5e20e.tar.bz2 |
Enable tracking of objects by default
This is a reland of accumulated patches including CLs
8414036, 8425010, 8425013, 8424013.
It fully enables tracking of objects, as seen in about:tracking
in teh release build.
The problem this had in its initaial landing centered on
Mac instability in base_unittest. We were encountering crash
on exit of the tests, with a stack dump involving pthreads.
r=rtenneti
BUG=101856
Review URL: http://codereview.chromium.org/8429009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@108026 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/threading')
-rw-r--r-- | base/threading/thread.cc | 2 | ||||
-rw-r--r-- | base/threading/worker_pool_posix.cc | 19 | ||||
-rw-r--r-- | base/threading/worker_pool_posix.h | 6 | ||||
-rw-r--r-- | base/threading/worker_pool_win.cc | 24 |
4 files changed, 19 insertions, 32 deletions
diff --git a/base/threading/thread.cc b/base/threading/thread.cc index 2a8d999..d49f247 100644 --- a/base/threading/thread.cc +++ b/base/threading/thread.cc @@ -152,9 +152,7 @@ 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 41fa01a..917565d 100644 --- a/base/threading/worker_pool_posix.cc +++ b/base/threading/worker_pool_posix.cc @@ -88,15 +88,14 @@ void WorkerThread::ThreadMain() { "src_file", pending_task.posted_from.file_name(), "src_func", pending_task.posted_from.function_name()); -#if defined(TRACK_ALL_TASK_OBJECTS) - TimeTicks start_of_run = tracked_objects::ThreadData::Now(); -#endif // defined(TRACK_ALL_TASK_OBJECTS) + tracked_objects::TrackedTime start_time = + tracked_objects::ThreadData::Now(); + pending_task.task.Run(); -#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) + + tracked_objects::ThreadData::TallyRunOnWorkerThreadIfTracking( + pending_task.birth_tally, pending_task.time_posted, + start_time, tracked_objects::ThreadData::Now()); } // The WorkerThread is non-joinable, so it deletes itself. @@ -122,10 +121,8 @@ PosixDynamicThreadPool::PendingTask::PendingTask( const base::Closure& task) : posted_from(posted_from), task(task) { -#if defined(TRACK_ALL_TASK_OBJECTS) - post_births = tracked_objects::ThreadData::TallyABirthIfActive(posted_from); + birth_tally = 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 c0a60cc..2cc1150 100644 --- a/base/threading/worker_pool_posix.h +++ b/base/threading/worker_pool_posix.h @@ -53,13 +53,11 @@ 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* post_births; + tracked_objects::Births* birth_tally; // Time the task was posted. - TimeTicks time_posted; -#endif // defined(TRACK_ALL_TASK_OBJECTS) + tracked_objects::TrackedTime time_posted; const tracked_objects::Location posted_from; diff --git a/base/threading/worker_pool_win.cc b/base/threading/worker_pool_win.cc index 0cd3d96..b73cabd 100644 --- a/base/threading/worker_pool_win.cc +++ b/base/threading/worker_pool_win.cc @@ -20,19 +20,15 @@ struct PendingTask { const base::Closure& task) : posted_from(posted_from), task(task) { -#if defined(TRACK_ALL_TASK_OBJECTS) - post_births = tracked_objects::ThreadData::TallyABirthIfActive(posted_from); + birth_tally = 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* post_births; + tracked_objects::Births* birth_tally; // Time the task was posted. - TimeTicks time_posted; -#endif // defined(TRACK_ALL_TASK_OBJECTS) + tracked_objects::TrackedTime time_posted; // The site this PendingTask was posted from. tracked_objects::Location posted_from; @@ -47,15 +43,13 @@ DWORD CALLBACK WorkItemCallback(void* param) { "src_file", pending_task->posted_from.file_name(), "src_func", pending_task->posted_from.function_name()); -#if defined(TRACK_ALL_TASK_OBJECTS) - TimeTicks start_of_run = tracked_objects::ThreadData::Now(); -#endif // defined(TRACK_ALL_TASK_OBJECTS) + tracked_objects::TrackedTime start_time = tracked_objects::ThreadData::Now(); + pending_task->task.Run(); -#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) + + tracked_objects::ThreadData::TallyRunOnWorkerThreadIfTracking( + pending_task->birth_tally, pending_task->time_posted, + start_time, tracked_objects::ThreadData::Now()); delete pending_task; return 0; |