Chromium Code Reviews| Index: chrome/browser/metrics/leak_detector/leak_detector_controller.h |
| diff --git a/chrome/browser/metrics/leak_detector/leak_detector_controller.h b/chrome/browser/metrics/leak_detector/leak_detector_controller.h |
| index 6651bb790795625e490be584b6b1a2b3101ae51d..4364c7bf1794abc3135619ba078952a7286fdc2a 100644 |
| --- a/chrome/browser/metrics/leak_detector/leak_detector_controller.h |
| +++ b/chrome/browser/metrics/leak_detector/leak_detector_controller.h |
| @@ -12,6 +12,7 @@ |
| #include "base/macros.h" |
| #include "base/threading/thread_checker.h" |
| #include "chrome/browser/metrics/leak_detector/leak_detector_remote_controller.h" |
| +#include "chrome/browser/metrics/metrics_memory_details.h" |
| #include "components/metrics/leak_detector/leak_detector.h" |
| #include "components/metrics/proto/memory_leak_report.pb.h" |
| @@ -40,7 +41,28 @@ class LeakDetectorController |
| const std::vector<MemoryLeakReportProto>& reports) override; |
| void OnRemoteProcessShutdown() override; |
| + // Indicates that collecting memory usage is running. This is made protected |
| + // to help unit tests suppress starting memory metrics job. |
| + bool waiting_for_collect_memory_usage_; |
|
Simon Que
2016/10/07 06:24:58
This is not a good design pattern because you're e
mwlodar
2016/10/07 18:54:35
Analogous construction done with an initialization
|
| + |
| private: |
| + // Accumulates total memory usage info inside MetricsMemoryDetails. |
| + class TotalMemoryGrowthTracker : public MemoryGrowthTracker { |
| + public: |
| + TotalMemoryGrowthTracker(); |
| + ~TotalMemoryGrowthTracker(); |
| + |
| + // Updates the inner counter by sample (in kb). Returns always false |
| + // to suppress generating growth/shrink histograms in MetricsMemoryDetails. |
| + bool UpdateSample(base::ProcessId pid, int sample, int* diff) override; |
| + |
| + size_t total_usage_kb() const { return total_usage_kb_; } |
| + void reset() { total_usage_kb_ = 0; } |
| + |
| + private: |
| + size_t total_usage_kb_; |
| + }; |
| + |
| // Returns true to indicate that LeakDetector should be enabled on a renderer |
| // process. This is determined as follows: |
| // 1. If the number of processes running LeakDetector is not at max, returns |
| @@ -55,6 +77,10 @@ class LeakDetectorController |
| void StoreLeakReports(const std::vector<MemoryLeakReportProto>& reports, |
| MemoryLeakReportProto::ProcessType process_type); |
| + // Method called from MetricsMemoryDetails when memory usage gets measured. |
| + // Updates |memory_usage_info| in stored_reports_[i] for i >= |index|. |
| + void OnMemoryDetailCollectionDone(size_t index); |
| + |
| // All leak reports received through OnLeakFound() are stored in protobuf |
| // format. |
| std::vector<MemoryLeakReportProto> stored_reports_; |
| @@ -85,6 +111,12 @@ class LeakDetectorController |
| // For thread safety. |
| base::ThreadChecker thread_checker_; |
| + // An object passed to MetricsMemoryDetails for collecting memory usage. |
| + TotalMemoryGrowthTracker total_memory_growth_tracker_; |
| + |
| + // For passing |this| into a callback. |
| + base::WeakPtrFactory<LeakDetectorController> weak_ptr_factory_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(LeakDetectorController); |
| }; |