| Index: base/tracked_objects.cc
|
| ===================================================================
|
| --- base/tracked_objects.cc (revision 107921)
|
| +++ base/tracked_objects.cc (working copy)
|
| @@ -220,7 +220,7 @@
|
|
|
| // static
|
| void ThreadData::WriteHTML(const std::string& query, std::string* output) {
|
| - if (status_ == UNINITIALIZED)
|
| + if (!ThreadData::tracking_status())
|
| return; // Not yet initialized.
|
|
|
| DataCollector collected_data; // Gather data.
|
| @@ -406,18 +406,8 @@
|
| ? tracked_objects::TrackedTime(completed_task.time_posted)
|
| : tracked_objects::TrackedTime(completed_task.delayed_run_time);
|
|
|
| - // Watch out for a race where status_ is changing, and hence one or both
|
| - // of start_of_run or end_of_run is zero. IN that case, we didn't bother to
|
| - // get a time value since we "weren't tracking" and we were trying to be
|
| - // efficient by not calling for a genuine time value. For simplicity, we'll
|
| - // use a default zero duration when we can't calculate a true value.
|
| - Duration queue_duration;
|
| - Duration run_duration;
|
| - if (!start_of_run.is_null()) {
|
| - queue_duration = start_of_run - effective_post_time;
|
| - if (!end_of_run.is_null())
|
| - run_duration = end_of_run - start_of_run;
|
| - }
|
| + Duration queue_duration = start_of_run - effective_post_time;
|
| + Duration run_duration = end_of_run - start_of_run;
|
| current_thread_data->TallyADeath(*birth, queue_duration, run_duration);
|
| }
|
|
|
| @@ -449,13 +439,8 @@
|
| if (!current_thread_data)
|
| return;
|
|
|
| - Duration queue_duration;
|
| - Duration run_duration;
|
| - if (!start_of_run.is_null()) {
|
| - queue_duration = start_of_run - time_posted;
|
| - if (!end_of_run.is_null())
|
| - run_duration = end_of_run - start_of_run;
|
| - }
|
| + Duration queue_duration = start_of_run - time_posted;
|
| + Duration run_duration = end_of_run - start_of_run;
|
| current_thread_data->TallyADeath(*birth, queue_duration, run_duration);
|
| }
|
|
|
| @@ -539,9 +524,9 @@
|
|
|
| // static
|
| TrackedTime ThreadData::Now() {
|
| - if (kTrackAllTaskObjects && tracking_status())
|
| - return TrackedTime::Now();
|
| - return TrackedTime(); // Super fast when disabled, or not compiled.
|
| + if (!kTrackAllTaskObjects || status_ != ACTIVE)
|
| + return TrackedTime(); // Super fast when disabled, or not compiled.
|
| + return TrackedTime::Now();
|
| }
|
|
|
| // static
|
| @@ -561,19 +546,6 @@
|
| unregistered_thread_data_pool_ = NULL;
|
| }
|
|
|
| - // Put most global static back in pristine shape.
|
| - thread_number_counter_ = 0;
|
| - tls_index_.Set(NULL);
|
| - status_ = UNINITIALIZED;
|
| -
|
| - // To avoid any chance of racing in unit tests, which is the only place we
|
| - // call this function, we will leak all the data structures we recovered.
|
| - // These structures could plausibly be used by other threads in earlier tests
|
| - // that are still running.
|
| - return;
|
| -
|
| - // If we wanted to cleanup (on a single thread), here is what we would do.
|
| -
|
| if (final_pool) {
|
| // The thread_data_list contains *all* the instances, and we'll use it to
|
| // delete them. This pool has pointers to some instances, and we just
|
| @@ -595,6 +567,10 @@
|
| next_thread_data->death_map_.clear();
|
| delete next_thread_data; // Includes all Death Records.
|
| }
|
| + // Put most global static back in pristine shape.
|
| + thread_number_counter_ = 0;
|
| + tls_index_.Set(NULL);
|
| + status_ = UNINITIALIZED;
|
| }
|
|
|
| //------------------------------------------------------------------------------
|
|
|