| Index: base/chromeos/memory_pressure_observer_chromeos.cc
|
| diff --git a/base/chromeos/memory_pressure_observer_chromeos.cc b/base/chromeos/memory_pressure_observer_chromeos.cc
|
| index 8112c761e5e713e747cb015d8226e62a754c87a8..5691eb8b4ed1dbd626e85ef1ea617886396eeafd 100644
|
| --- a/base/chromeos/memory_pressure_observer_chromeos.cc
|
| +++ b/base/chromeos/memory_pressure_observer_chromeos.cc
|
| @@ -5,6 +5,7 @@
|
| #include "base/chromeos/memory_pressure_observer_chromeos.h"
|
|
|
| #include "base/message_loop/message_loop.h"
|
| +#include "base/metrics/histogram_macros.h"
|
| #include "base/process/process_metrics.h"
|
| #include "base/time/time.h"
|
|
|
| @@ -29,6 +30,16 @@ const int kNormalMemoryPressureCriticalThresholdPercent = 90;
|
| const int kAggressiveMemoryPressureModerateThresholdPercent = 35;
|
| const int kAggressiveMemoryPressureCriticalThresholdPercent = 70;
|
|
|
| +// The possible state for memory pressure level. The values should be in line
|
| +// with values in MemoryPressureListener::MemoryPressureLevel and should be
|
| +// updated if more memory pressure levels are introduced.
|
| +enum MemoryPressureLevelUMA {
|
| + MEMORY_PRESSURE_LEVEL_NONE = 0,
|
| + MEMORY_PRESSURE_LEVEL_MODERATE,
|
| + MEMORY_PRESSURE_LEVEL_CRITICAL,
|
| + NUM_MEMORY_PRESSURE_LEVELS
|
| +};
|
| +
|
| // Converts a |MemoryPressureThreshold| value into a used memory percentage for
|
| // the moderate pressure event.
|
| int GetModerateMemoryThresholdInPercent(
|
| @@ -92,7 +103,8 @@ void MemoryPressureObserverChromeOS::ScheduleEarlyCheck() {
|
| void MemoryPressureObserverChromeOS::StartObserving() {
|
| timer_.Start(FROM_HERE,
|
| TimeDelta::FromMilliseconds(kMemoryPressureIntervalMs),
|
| - Bind(&MemoryPressureObserverChromeOS::CheckMemoryPressure,
|
| + Bind(&MemoryPressureObserverChromeOS::
|
| + CheckMemoryPressureAndRecordStatistics,
|
| weak_ptr_factory_.GetWeakPtr()));
|
| }
|
|
|
| @@ -101,6 +113,28 @@ void MemoryPressureObserverChromeOS::StopObserving() {
|
| timer_.Stop();
|
| }
|
|
|
| +void MemoryPressureObserverChromeOS::CheckMemoryPressureAndRecordStatistics() {
|
| + CheckMemoryPressure();
|
| +
|
| + // Record UMA histogram statistics for the current memory pressure level.
|
| + MemoryPressureLevelUMA memory_pressure_level_uma(MEMORY_PRESSURE_LEVEL_NONE);
|
| + switch (current_memory_pressure_level_) {
|
| + case MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE:
|
| + memory_pressure_level_uma = MEMORY_PRESSURE_LEVEL_NONE;
|
| + break;
|
| + case MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE:
|
| + memory_pressure_level_uma = MEMORY_PRESSURE_LEVEL_MODERATE;
|
| + break;
|
| + case MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL:
|
| + memory_pressure_level_uma = MEMORY_PRESSURE_LEVEL_CRITICAL;
|
| + break;
|
| + }
|
| +
|
| + UMA_HISTOGRAM_ENUMERATION("ChromeOS.MemoryPressureLevel",
|
| + memory_pressure_level_uma,
|
| + NUM_MEMORY_PRESSURE_LEVELS);
|
| +}
|
| +
|
| void MemoryPressureObserverChromeOS::CheckMemoryPressure() {
|
| MemoryPressureListener::MemoryPressureLevel old_pressure =
|
| current_memory_pressure_level_;
|
|
|