OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/tracked_objects.h" | 5 #include "base/tracked_objects.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 | 8 |
9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 // static | 84 // static |
85 ThreadData* ThreadData::first_ = NULL; | 85 ThreadData* ThreadData::first_ = NULL; |
86 // static | 86 // static |
87 Lock ThreadData::list_lock_; | 87 Lock ThreadData::list_lock_; |
88 | 88 |
89 // static | 89 // static |
90 ThreadData::Status ThreadData::status_ = ThreadData::UNINITIALIZED; | 90 ThreadData::Status ThreadData::status_ = ThreadData::UNINITIALIZED; |
91 | 91 |
92 ThreadData::ThreadData() : next_(NULL), message_loop_(MessageLoop::current()) {} | 92 ThreadData::ThreadData() : next_(NULL), message_loop_(MessageLoop::current()) {} |
93 | 93 |
| 94 ThreadData::~ThreadData() {} |
| 95 |
94 // static | 96 // static |
95 ThreadData* ThreadData::current() { | 97 ThreadData* ThreadData::current() { |
96 if (!tls_index_.initialized()) | 98 if (!tls_index_.initialized()) |
97 return NULL; | 99 return NULL; |
98 | 100 |
99 ThreadData* registry = static_cast<ThreadData*>(tls_index_.Get()); | 101 ThreadData* registry = static_cast<ThreadData*>(tls_index_.Get()); |
100 if (!registry) { | 102 if (!registry) { |
101 // We have to create a new registry for ThreadData. | 103 // We have to create a new registry for ThreadData. |
102 bool too_late_to_create = false; | 104 bool too_late_to_create = false; |
103 { | 105 { |
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
577 // TODO(jar): Provide version that gathers stats safely via PostTask in all | 579 // TODO(jar): Provide version that gathers stats safely via PostTask in all |
578 // cases where thread_data supplies a message_loop to post to. Be careful to | 580 // cases where thread_data supplies a message_loop to post to. Be careful to |
579 // handle message_loops that are destroyed!?! | 581 // handle message_loops that are destroyed!?! |
580 for (ThreadData* thread_data = my_list; | 582 for (ThreadData* thread_data = my_list; |
581 thread_data; | 583 thread_data; |
582 thread_data = thread_data->next()) { | 584 thread_data = thread_data->next()) { |
583 Append(*thread_data); | 585 Append(*thread_data); |
584 } | 586 } |
585 } | 587 } |
586 | 588 |
| 589 DataCollector::~DataCollector() { |
| 590 } |
| 591 |
587 void DataCollector::Append(const ThreadData& thread_data) { | 592 void DataCollector::Append(const ThreadData& thread_data) { |
588 // Get copy of data (which is done under ThreadData's lock). | 593 // Get copy of data (which is done under ThreadData's lock). |
589 ThreadData::BirthMap birth_map; | 594 ThreadData::BirthMap birth_map; |
590 thread_data.SnapshotBirthMap(&birth_map); | 595 thread_data.SnapshotBirthMap(&birth_map); |
591 ThreadData::DeathMap death_map; | 596 ThreadData::DeathMap death_map; |
592 thread_data.SnapshotDeathMap(&death_map); | 597 thread_data.SnapshotDeathMap(&death_map); |
593 | 598 |
594 // Use our lock to protect our accumulation activity. | 599 // Use our lock to protect our accumulation activity. |
595 AutoLock lock(accumulation_lock_); | 600 AutoLock lock(accumulation_lock_); |
596 | 601 |
(...skipping 23 matching lines...) Expand all Loading... |
620 for (BirthCount::iterator it = global_birth_count_.begin(); | 625 for (BirthCount::iterator it = global_birth_count_.begin(); |
621 it != global_birth_count_.end(); ++it) { | 626 it != global_birth_count_.end(); ++it) { |
622 if (it->second > 0) | 627 if (it->second > 0) |
623 collection_.push_back(Snapshot(*it->first, it->second)); | 628 collection_.push_back(Snapshot(*it->first, it->second)); |
624 } | 629 } |
625 } | 630 } |
626 | 631 |
627 //------------------------------------------------------------------------------ | 632 //------------------------------------------------------------------------------ |
628 // Aggregation | 633 // Aggregation |
629 | 634 |
| 635 Aggregation::Aggregation() |
| 636 : birth_count_(0) { |
| 637 } |
| 638 |
| 639 Aggregation::~Aggregation() { |
| 640 } |
| 641 |
630 void Aggregation::AddDeathSnapshot(const Snapshot& snapshot) { | 642 void Aggregation::AddDeathSnapshot(const Snapshot& snapshot) { |
631 AddBirth(snapshot.birth()); | 643 AddBirth(snapshot.birth()); |
632 death_threads_[snapshot.death_thread()]++; | 644 death_threads_[snapshot.death_thread()]++; |
633 AddDeathData(snapshot.death_data()); | 645 AddDeathData(snapshot.death_data()); |
634 } | 646 } |
635 | 647 |
636 void Aggregation::AddBirths(const Births& births) { | 648 void Aggregation::AddBirths(const Births& births) { |
637 AddBirth(births); | 649 AddBirth(births); |
638 birth_count_ += births.birth_count(); | 650 birth_count_ += births.birth_count(); |
639 } | 651 } |
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1020 (combined_selectors_ & BIRTH_THREAD) ? "*" : | 1032 (combined_selectors_ & BIRTH_THREAD) ? "*" : |
1021 sample.birth().birth_thread()->ThreadName().c_str(), | 1033 sample.birth().birth_thread()->ThreadName().c_str(), |
1022 (combined_selectors_ & DEATH_THREAD) ? "*" : | 1034 (combined_selectors_ & DEATH_THREAD) ? "*" : |
1023 sample.DeathThreadName().c_str()); | 1035 sample.DeathThreadName().c_str()); |
1024 sample.birth().location().Write(!(combined_selectors_ & BIRTH_FILE), | 1036 sample.birth().location().Write(!(combined_selectors_ & BIRTH_FILE), |
1025 !(combined_selectors_ & BIRTH_FUNCTION), | 1037 !(combined_selectors_ & BIRTH_FUNCTION), |
1026 output); | 1038 output); |
1027 } | 1039 } |
1028 | 1040 |
1029 } // namespace tracked_objects | 1041 } // namespace tracked_objects |
OLD | NEW |