| 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;
|
|
|