diff options
author | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-10 19:43:42 +0000 |
---|---|---|
committer | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-10 19:43:42 +0000 |
commit | 702a12dae9a2ed34362e381df7419c314e4124bf (patch) | |
tree | c9980ba18234d26584d03629600e06996744e7ce /base/tracked_objects.cc | |
parent | c07eef4e772952ab4ad0213b581c97e92f00831e (diff) | |
download | chromium_src-702a12dae9a2ed34362e381df7419c314e4124bf.zip chromium_src-702a12dae9a2ed34362e381df7419c314e4124bf.tar.gz chromium_src-702a12dae9a2ed34362e381df7419c314e4124bf.tar.bz2 |
Propogate status setting for profiler to track parents
[Reland: https://src.chromium.org/viewvc/chrome?view=rev&revision=120789
with minor change to avoid race on status change.]
This allows child processes to track ancestry, and report
it to the browser process.
Parent tracking is only turned on based on an
environment variable.
r=rtenneti
Review URL: https://chromiumcodereview.appspot.com/9363007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121491 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/tracked_objects.cc')
-rw-r--r-- | base/tracked_objects.cc | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/base/tracked_objects.cc b/base/tracked_objects.cc index e7d7bd1..87af8dc 100644 --- a/base/tracked_objects.cc +++ b/base/tracked_objects.cc @@ -393,7 +393,7 @@ Births* ThreadData::TallyABirthIfActive(const Location& location) { if (!kTrackAllTaskObjects) return NULL; // Not compiled in. - if (!tracking_status()) + if (!TrackingStatus()) return NULL; ThreadData* current_thread_data = Get(); if (!current_thread_data) @@ -622,28 +622,31 @@ bool ThreadData::Initialize() { } // static -bool ThreadData::InitializeAndSetTrackingStatus(bool status) { +bool ThreadData::InitializeAndSetTrackingStatus(Status status) { + DCHECK_GE(status, DEACTIVATED); + DCHECK_LE(status, PROFILING_CHILDREN_ACTIVE); + if (!Initialize()) // No-op if already initialized. return false; // Not compiled in. - if (!status) { - status_ = DEACTIVATED; - } else { - if (kTrackParentChildLinks) - status_ = PROFILING_CHILDREN_ACTIVE; - else - status_ = PROFILING_ACTIVE; - } + if (!kTrackParentChildLinks && status > DEACTIVATED) + status = PROFILING_ACTIVE; + status_ = status; return true; } // static -bool ThreadData::tracking_status() { +ThreadData::Status ThreadData::status() { + return status_; +} + +// static +bool ThreadData::TrackingStatus() { return status_ > DEACTIVATED; } // static -bool ThreadData::tracking_parent_child_status() { +bool ThreadData::TrackingParentChildStatus() { return status_ >= PROFILING_CHILDREN_ACTIVE; } @@ -664,7 +667,7 @@ TrackedTime ThreadData::NowForEndOfRun() { // static TrackedTime ThreadData::Now() { - if (kTrackAllTaskObjects && tracking_status()) + if (kTrackAllTaskObjects && TrackingStatus()) return TrackedTime::Now(); return TrackedTime(); // Super fast when disabled, or not compiled. } @@ -686,7 +689,7 @@ void ThreadData::ShutdownSingleThreadedCleanup(bool leak) { // This is only called from test code, where we need to cleanup so that // additional tests can be run. // We must be single threaded... but be careful anyway. - if (!InitializeAndSetTrackingStatus(false)) + if (!InitializeAndSetTrackingStatus(DEACTIVATED)) return; ThreadData* thread_data_list; { |