Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 // Activity tracking provides a low-overhead method of collecting information | 5 // Activity tracking provides a low-overhead method of collecting information |
| 6 // about the state of the application for analysis both while it is running | 6 // about the state of the application for analysis both while it is running |
| 7 // and after it has terminated unexpectedly. Its primary purpose is to help | 7 // and after it has terminated unexpectedly. Its primary purpose is to help |
| 8 // locate reasons the browser becomes unresponsive by providing insight into | 8 // locate reasons the browser becomes unresponsive by providing insight into |
| 9 // what all the various threads and processes are (or were) doing. | 9 // what all the various threads and processes are (or were) doing. |
| 10 | 10 |
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 535 // Type identifiers used when storing in persistent memory so they can be | 535 // Type identifiers used when storing in persistent memory so they can be |
| 536 // identified during extraction; the first 4 bytes of the SHA1 of the name | 536 // identified during extraction; the first 4 bytes of the SHA1 of the name |
| 537 // is used as a unique integer. A "version number" is added to the base | 537 // is used as a unique integer. A "version number" is added to the base |
| 538 // so that, if the structure of that object changes, stored older versions | 538 // so that, if the structure of that object changes, stored older versions |
| 539 // will be safely ignored. These are public so that an external process | 539 // will be safely ignored. These are public so that an external process |
| 540 // can recognize records of this type within an allocator. | 540 // can recognize records of this type within an allocator. |
| 541 enum : uint32_t { | 541 enum : uint32_t { |
| 542 kTypeIdActivityTracker = 0x5D7381AF + 3, // SHA1(ActivityTracker) v3 | 542 kTypeIdActivityTracker = 0x5D7381AF + 3, // SHA1(ActivityTracker) v3 |
| 543 kTypeIdUserDataRecord = 0x615EDDD7 + 1, // SHA1(UserDataRecord) v1 | 543 kTypeIdUserDataRecord = 0x615EDDD7 + 1, // SHA1(UserDataRecord) v1 |
| 544 kTypeIdGlobalDataRecord = 0xAFE61ABE + 1, // SHA1(GlobalDataRecord) v1 | 544 kTypeIdGlobalDataRecord = 0xAFE61ABE + 1, // SHA1(GlobalDataRecord) v1 |
| 545 kTypeIdGlobalLogMessage = 0x4CF434F9 + 1, // SHA1(GlobalLogMessage) v1 | |
| 545 | 546 |
| 546 kTypeIdActivityTrackerFree = ~kTypeIdActivityTracker, | 547 kTypeIdActivityTrackerFree = ~kTypeIdActivityTracker, |
| 547 kTypeIdUserDataRecordFree = ~kTypeIdUserDataRecord, | 548 kTypeIdUserDataRecordFree = ~kTypeIdUserDataRecord, |
| 548 }; | 549 }; |
| 549 | 550 |
| 550 // This is a thin wrapper around the thread-tracker's ScopedActivity that | 551 // This is a thin wrapper around the thread-tracker's ScopedActivity that |
| 551 // accesses the global tracker to provide some of the information, notably | 552 // accesses the global tracker to provide some of the information, notably |
| 552 // which thread-tracker to use. It is safe to create even if activity | 553 // which thread-tracker to use. It is safe to create even if activity |
| 553 // tracking is not enabled. | 554 // tracking is not enabled. |
| 554 class BASE_EXPORT ScopedThreadActivity | 555 class BASE_EXPORT ScopedThreadActivity |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 646 void ReleaseTrackerForCurrentThreadForTesting(); | 647 void ReleaseTrackerForCurrentThreadForTesting(); |
| 647 | 648 |
| 648 // Gets a reference to memory for holding user-defined activity data. If | 649 // Gets a reference to memory for holding user-defined activity data. If |
| 649 // the reference is valid, it's memory will be returned. If not, then a | 650 // the reference is valid, it's memory will be returned. If not, then a |
| 650 // new reference will be created (and stored) and that memory returned. | 651 // new reference will be created (and stored) and that memory returned. |
| 651 void* GetUserDataMemory(PersistentMemoryAllocator::Reference* reference); | 652 void* GetUserDataMemory(PersistentMemoryAllocator::Reference* reference); |
| 652 | 653 |
| 653 // Releases memory for user-defined activity data. | 654 // Releases memory for user-defined activity data. |
| 654 void ReleaseUserDataMemory(PersistentMemoryAllocator::Reference* reference); | 655 void ReleaseUserDataMemory(PersistentMemoryAllocator::Reference* reference); |
| 655 | 656 |
| 657 // Records a log message. The current implementation does NOT recycle these | |
| 658 // only store critical messages such as FATAL ones. | |
|
manzagop (departed)
2016/12/02 20:08:09
nit for your next cl: can you mention this is best
| |
| 659 void RecordLogMessage(StringPiece message); | |
| 660 | |
| 656 // Accesses the global data record for storing arbitrary key/value pairs. | 661 // Accesses the global data record for storing arbitrary key/value pairs. |
| 657 ActivityUserData& user_data() { return user_data_; } | 662 ActivityUserData& user_data() { return user_data_; } |
| 658 | 663 |
| 659 private: | 664 private: |
| 660 friend class ActivityTrackerTest; | 665 friend class ActivityTrackerTest; |
| 661 | 666 |
| 662 enum : int { | 667 enum : int { |
| 663 // The maximum number of threads that can be tracked within a process. If | 668 // The maximum number of threads that can be tracked within a process. If |
| 664 // more than this number run concurrently, tracking of new ones may cease. | 669 // more than this number run concurrently, tracking of new ones may cease. |
| 665 kMaxThreadCount = 100, | 670 kMaxThreadCount = 100, |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 858 ScopedProcessWaitActivity(const void* program_counter, | 863 ScopedProcessWaitActivity(const void* program_counter, |
| 859 const base::Process* process); | 864 const base::Process* process); |
| 860 DISALLOW_COPY_AND_ASSIGN(ScopedProcessWaitActivity); | 865 DISALLOW_COPY_AND_ASSIGN(ScopedProcessWaitActivity); |
| 861 }; | 866 }; |
| 862 #endif | 867 #endif |
| 863 | 868 |
| 864 } // namespace debug | 869 } // namespace debug |
| 865 } // namespace base | 870 } // namespace base |
| 866 | 871 |
| 867 #endif // BASE_DEBUG_ACTIVITY_TRACKER_H_ | 872 #endif // BASE_DEBUG_ACTIVITY_TRACKER_H_ |
| OLD | NEW |