Index: base/memory/memory_pressure_monitor.cc |
diff --git a/base/memory/memory_pressure_monitor.cc b/base/memory/memory_pressure_monitor.cc |
index 00633f1dd61981af41c7738d9c182d97367b9aef..ed350b81b98681610030511229b8a680cb2ca3d0 100644 |
--- a/base/memory/memory_pressure_monitor.cc |
+++ b/base/memory/memory_pressure_monitor.cc |
@@ -5,12 +5,39 @@ |
#include "base/memory/memory_pressure_monitor.h" |
#include "base/logging.h" |
+#include "base/metrics/histogram_macros.h" |
namespace base { |
namespace { |
MemoryPressureMonitor* g_monitor = nullptr; |
+// Enumeration of UMA memory pressure levels. This needs to be kept in sync with |
+// histograms.xml and the memory pressure levels defined in |
+// MemoryPressureListener. |
+enum MemoryPressureLevelUMA { |
+ UMA_MEMORY_PRESSURE_LEVEL_NONE = 0, |
+ UMA_MEMORY_PRESSURE_LEVEL_MODERATE = 1, |
+ UMA_MEMORY_PRESSURE_LEVEL_CRITICAL = 2, |
+ // This must be the last value in the enum. |
+ UMA_MEMORY_PRESSURE_LEVEL_COUNT, |
+}; |
+ |
+// Converts a memory pressure level to an UMA enumeration value. |
+MemoryPressureLevelUMA MemoryPressureLevelToUmaEnumValue( |
+ base::MemoryPressureListener::MemoryPressureLevel level) { |
+ switch (level) { |
+ case MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE: |
+ return UMA_MEMORY_PRESSURE_LEVEL_NONE; |
+ case MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE: |
+ return UMA_MEMORY_PRESSURE_LEVEL_MODERATE; |
+ case MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL: |
+ return UMA_MEMORY_PRESSURE_LEVEL_CRITICAL; |
+ } |
+ NOTREACHED(); |
+ return UMA_MEMORY_PRESSURE_LEVEL_NONE; |
+} |
+ |
} // namespace |
MemoryPressureMonitor::MemoryPressureMonitor() { |
@@ -27,5 +54,18 @@ MemoryPressureMonitor::~MemoryPressureMonitor() { |
MemoryPressureMonitor* MemoryPressureMonitor::Get() { |
return g_monitor; |
} |
+void MemoryPressureMonitor::RecordMemoryPressure( |
+ base::MemoryPressureListener::MemoryPressureLevel level, |
+ int ticks) { |
+ // Use the more primitive STATIC_HISTOGRAM_POINTER_BLOCK macro because the |
+ // simple UMA_HISTOGRAM macros don't expose 'AddCount' functionality. |
+ STATIC_HISTOGRAM_POINTER_BLOCK( |
+ "Memory.PressureLevel", |
+ AddCount(MemoryPressureLevelToUmaEnumValue(level), ticks), |
+ base::LinearHistogram::FactoryGet( |
+ "Memory.PressureLevel", 1, UMA_MEMORY_PRESSURE_LEVEL_COUNT, |
+ UMA_MEMORY_PRESSURE_LEVEL_COUNT + 1, |
+ base::HistogramBase::kUmaTargetedHistogramFlag)); |
+} |
} // namespace base |