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 4da7d24bfdb75a38bb9be99b5877819b8c5ed3bf..8112c761e5e713e747cb015d8226e62a754c87a8 100644 |
--- a/base/chromeos/memory_pressure_observer_chromeos.cc |
+++ b/base/chromeos/memory_pressure_observer_chromeos.cc |
@@ -24,25 +24,56 @@ const int kModerateMemoryPressureCooldown = |
kModerateMemoryPressureCooldownMs / kMemoryPressureIntervalMs; |
// Threshold constants to emit pressure events. |
-const int kMemoryPressureModerateThresholdPercent = 70; |
-const int kMemoryPressureCriticalThresholdPercent = 90; |
+const int kNormalMemoryPressureModerateThresholdPercent = 60; |
+const int kNormalMemoryPressureCriticalThresholdPercent = 90; |
+const int kAggressiveMemoryPressureModerateThresholdPercent = 35; |
+const int kAggressiveMemoryPressureCriticalThresholdPercent = 70; |
+ |
+// Converts a |MemoryPressureThreshold| value into a used memory percentage for |
+// the moderate pressure event. |
+int GetModerateMemoryThresholdInPercent( |
+ MemoryPressureObserverChromeOS::MemoryPressureThresholds thresholds) { |
+ return thresholds == MemoryPressureObserverChromeOS:: |
+ THRESHOLD_AGGRESSIVE_CACHE_DISCARD || |
+ thresholds == MemoryPressureObserverChromeOS::THRESHOLD_AGGRESSIVE |
+ ? kAggressiveMemoryPressureModerateThresholdPercent |
+ : kNormalMemoryPressureModerateThresholdPercent; |
+} |
+ |
+// Converts a |MemoryPressureThreshold| value into a used memory percentage for |
+// the critical pressure event. |
+int GetCriticalMemoryThresholdInPercent( |
+ MemoryPressureObserverChromeOS::MemoryPressureThresholds thresholds) { |
+ return thresholds == MemoryPressureObserverChromeOS:: |
+ THRESHOLD_AGGRESSIVE_TAB_DISCARD || |
+ thresholds == MemoryPressureObserverChromeOS::THRESHOLD_AGGRESSIVE |
+ ? kAggressiveMemoryPressureCriticalThresholdPercent |
+ : kNormalMemoryPressureCriticalThresholdPercent; |
+} |
// Converts free percent of memory into a memory pressure value. |
MemoryPressureListener::MemoryPressureLevel GetMemoryPressureLevelFromFillLevel( |
- int memory_fill_level) { |
- if (memory_fill_level < kMemoryPressureModerateThresholdPercent) |
+ int actual_fill_level, |
+ int moderate_threshold, |
+ int critical_threshold) { |
+ if (actual_fill_level < moderate_threshold) |
return MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE; |
- return memory_fill_level < kMemoryPressureCriticalThresholdPercent ? |
- MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE : |
- MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL; |
+ return actual_fill_level < critical_threshold |
+ ? MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE |
+ : MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL; |
} |
} // namespace |
-MemoryPressureObserverChromeOS::MemoryPressureObserverChromeOS() |
+MemoryPressureObserverChromeOS::MemoryPressureObserverChromeOS( |
+ MemoryPressureThresholds thresholds) |
: current_memory_pressure_level_( |
- MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE), |
+ MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE), |
moderate_pressure_repeat_count_(0), |
+ moderate_pressure_threshold_percent_( |
+ GetModerateMemoryThresholdInPercent(thresholds)), |
+ critical_pressure_threshold_percent_( |
+ GetCriticalMemoryThresholdInPercent(thresholds)), |
weak_ptr_factory_(this) { |
StartObserving(); |
} |
@@ -74,7 +105,9 @@ void MemoryPressureObserverChromeOS::CheckMemoryPressure() { |
MemoryPressureListener::MemoryPressureLevel old_pressure = |
current_memory_pressure_level_; |
current_memory_pressure_level_ = |
- GetMemoryPressureLevelFromFillLevel(GetUsedMemoryInPercent()); |
+ GetMemoryPressureLevelFromFillLevel(GetUsedMemoryInPercent(), |
+ moderate_pressure_threshold_percent_, |
+ critical_pressure_threshold_percent_); |
// In case there is no memory pressure we do not notify. |
if (current_memory_pressure_level_ == |
MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE) { |