Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Unified Diff: chrome/browser/metrics/leak_detector/leak_detector_controller.h

Issue 2396743002: Leak reports collect information about the memory usage (Closed)
Patch Set: Refactoring after Simon's comments 2 Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..cef0deb694588ce1cef22caed7f10a7318ec86b5 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"
@@ -41,6 +42,23 @@ class LeakDetectorController
void OnRemoteProcessShutdown() override;
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 +73,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 +107,15 @@ class LeakDetectorController
// For thread safety.
base::ThreadChecker thread_checker_;
+ // An object passed to MetricsMemoryDetails for collecting memory usage.
+ TotalMemoryGrowthTracker total_memory_growth_tracker_;
+
+ // Indicates that collecting memory usage is running.
+ bool waiting_for_collect_memory_usage_;
+
+ // For passing |this| into a callback.
+ base::WeakPtrFactory<LeakDetectorController> weak_ptr_factory_;
+
DISALLOW_COPY_AND_ASSIGN(LeakDetectorController);
};

Powered by Google App Engine
This is Rietveld 408576698