Index: chrome/browser/metrics/metrics_memory_details.cc |
diff --git a/chrome/browser/metrics/metrics_memory_details.cc b/chrome/browser/metrics/metrics_memory_details.cc |
index 807bc0921b82f41e578cee406727cbf81181799d..316d1a6f606aedbb2ab6e4ce8427634eeff317fb 100644 |
--- a/chrome/browser/metrics/metrics_memory_details.cc |
+++ b/chrome/browser/metrics/metrics_memory_details.cc |
@@ -12,6 +12,7 @@ |
#include "base/metrics/histogram_macros.h" |
#include "base/single_thread_task_runner.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "base/sys_info.h" |
#include "base/threading/thread_task_runner_handle.h" |
#include "build/build_config.h" |
#include "components/nacl/common/nacl_process_type.h" |
@@ -56,11 +57,23 @@ bool MemoryGrowthTracker::UpdateSample(base::ProcessId pid, |
return false; |
} |
+PeakMemoryUsageTracker::PeakMemoryUsageTracker() : peak_(0) {} |
+ |
+bool PeakMemoryUsageTracker::Update(int memory_usage) { |
+ if (memory_usage > peak_) { |
+ peak_ = memory_usage; |
+ return true; |
+ } |
+ return false; |
+} |
+ |
MetricsMemoryDetails::MetricsMemoryDetails( |
const base::Closure& callback, |
- MemoryGrowthTracker* memory_growth_tracker) |
+ MemoryGrowthTracker* memory_growth_tracker, |
+ PeakMemoryUsageTracker* peak_memory_usage_tracker) |
: callback_(callback), |
memory_growth_tracker_(memory_growth_tracker), |
+ peak_memory_usage_tracker_(peak_memory_usage_tracker), |
generate_histograms_(true) {} |
MetricsMemoryDetails::~MetricsMemoryDetails() { |
@@ -199,6 +212,25 @@ void MetricsMemoryDetails::UpdateHistograms() { |
int total_sample = static_cast<int>(aggregate_memory / 1024); |
UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Total2", total_sample); |
+ if (peak_memory_usage_tracker_) { |
+ int previous_peak = peak_memory_usage_tracker_->peak(); |
+ if (peak_memory_usage_tracker_->Update( |
+ static_cast<int>(aggregate_memory))) { |
+ int physical_memory = |
+ static_cast<int>(base::SysInfo::AmountOfPhysicalMemory()); |
+ int previous_peak_percentage = std::min( |
+ static_cast<int>(100.0 * previous_peak / physical_memory), 100); |
+ int new_peak_percentage = |
+ std::min(static_cast<int>(100.0 * peak_memory_usage_tracker_->peak() / |
+ physical_memory), |
+ 100); |
+ for (int i = previous_peak_percentage + 1; i <= new_peak_percentage; |
+ ++i) { |
+ UMA_HISTOGRAM_COUNTS_100("Memory.Total2.RelativePeak", i); |
+ } |
+ } |
+ } |
+ |
// Predict the number of processes needed when isolating all sites and when |
// isolating only HTTPS sites. |
int all_renderer_count = renderer_count + chrome_count + extension_count; |