Index: components/memory_pressure/direct_memory_pressure_calculator_linux_unittest.cc |
diff --git a/components/memory_pressure/direct_memory_pressure_calculator_linux_unittest.cc b/components/memory_pressure/direct_memory_pressure_calculator_linux_unittest.cc |
deleted file mode 100644 |
index 591f973915e8c6b2e83c987ceca2b0f67923e381..0000000000000000000000000000000000000000 |
--- a/components/memory_pressure/direct_memory_pressure_calculator_linux_unittest.cc |
+++ /dev/null |
@@ -1,244 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "components/memory_pressure/direct_memory_pressure_calculator_linux.h" |
- |
-#include "base/process/process_metrics.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace memory_pressure { |
- |
-namespace { |
- |
-const int kKBperMB = 1024; |
-const int kTotalMemoryInMB = 4096; |
- |
-} // namespace |
- |
-// This is out of the anonymous namespace space because it is a friend of |
-// DirectMemoryPressureCalculator. |
-class TestDirectMemoryPressureCalculator |
- : public DirectMemoryPressureCalculator { |
- public: |
- TestDirectMemoryPressureCalculator() |
- : DirectMemoryPressureCalculator(20, 10) { |
- // The values passed to the MemoryPressureCalculator constructor are dummy |
- // values that are immediately overwritten by InferTresholds. |
- |
- // Simulate 4GB of RAM. |
- mem_info_.total = kTotalMemoryInMB * kKBperMB; |
- |
- // Run InferThresholds using the test fixture's GetSystemMemoryStatus. |
- InferThresholds(); |
- } |
- |
- TestDirectMemoryPressureCalculator(int total_memory_mb, |
- int moderate_threshold_mb, |
- int critical_threshold_mb) |
- : DirectMemoryPressureCalculator(moderate_threshold_mb, |
- critical_threshold_mb) { |
- mem_info_.total = total_memory_mb * kKBperMB; |
- mem_info_.pgmajfault = 0; |
- } |
- |
- void InitPageFaultMonitor() override {} |
- |
- // Sets up the memory status to reflect the provided absolute memory left. |
- void SetMemoryFree(int phys_left_mb) { |
- // |total| is set in the constructor and not modified. |
- |
- // Set the amount of free memory. |
- mem_info_.free = phys_left_mb * kKBperMB; |
- DCHECK_LT(mem_info_.free, mem_info_.total); |
- } |
- |
- void SetNone() { SetMemoryFree(moderate_threshold_mb() + 1); } |
- void SetModerate() { SetMemoryFree(moderate_threshold_mb() - 1); } |
- void SetCritical() { SetMemoryFree(critical_threshold_mb() - 1); } |
- |
- double GetEwma() { return current_faults_per_second_; } |
- |
- // Set the next CPU time to be read. |
- void SetCpuTime(double cpu_time) { |
- user_cpu_time_ = base::TimeDelta::FromSecondsD(cpu_time); |
- } |
- // Set the next page faults value to be read. |
- void SetPageFaults(uint64_t page_faults) { |
- mem_info_.pgmajfault = page_faults; |
- } |
- |
- void SetPageFaultMonitorState(double user_exec_time, |
- uint64_t major_page_faults, |
- double current_faults, |
- double low_pass_half_life, |
- double moderate_multiplier, |
- double critical_multiplier) { |
- last_user_exec_time_ = base::TimeDelta::FromSecondsD(user_exec_time); |
- last_major_page_faults_ = major_page_faults; |
- current_faults_per_second_ = current_faults; |
- low_pass_half_life_seconds_ = low_pass_half_life; |
- moderate_multiplier_ = moderate_multiplier; |
- critical_multiplier_ = critical_multiplier; |
- } |
- |
- private: |
- bool GetSystemMemoryInfo(base::SystemMemoryInfoKB* mem_info) const override { |
- // Simply copy the memory information set by the test fixture. |
- *mem_info = mem_info_; |
- return true; |
- } |
- |
- base::TimeDelta GetUserCpuTimeSinceBoot() const override { |
- return user_cpu_time_; |
- } |
- |
- base::TimeDelta user_cpu_time_; |
- base::SystemMemoryInfoKB mem_info_; |
-}; |
- |
-class DirectMemoryPressureCalculatorTest : public testing::Test { |
- public: |
- void CalculateCurrentPressureLevelTest( |
- TestDirectMemoryPressureCalculator* calc) { |
- int mod = calc->moderate_threshold_mb(); |
- calc->SetMemoryFree(mod + 1); |
- EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE, |
- calc->CalculateCurrentPressureLevel()); |
- |
- calc->SetNone(); |
- EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE, |
- calc->CalculateCurrentPressureLevel()); |
- |
- calc->SetMemoryFree(mod); |
- EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE, |
- calc->CalculateCurrentPressureLevel()); |
- |
- calc->SetMemoryFree(mod - 1); |
- EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE, |
- calc->CalculateCurrentPressureLevel()); |
- |
- int crit = calc->critical_threshold_mb(); |
- calc->SetMemoryFree(crit + 1); |
- EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE, |
- calc->CalculateCurrentPressureLevel()); |
- |
- calc->SetModerate(); |
- EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE, |
- calc->CalculateCurrentPressureLevel()); |
- |
- EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE, |
- calc->CalculateCurrentPressureLevel()); |
- |
- calc->SetMemoryFree(crit); |
- EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL, |
- calc->CalculateCurrentPressureLevel()); |
- |
- calc->SetMemoryFree(crit - 1); |
- EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL, |
- calc->CalculateCurrentPressureLevel()); |
- |
- calc->SetCritical(); |
- EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL, |
- calc->CalculateCurrentPressureLevel()); |
- } |
-}; |
- |
-// Tests the fundamental direct calculation of memory pressure with automatic |
-// small-memory thresholds. |
-TEST_F(DirectMemoryPressureCalculatorTest, |
- CalculateCurrentMemoryPressureLevel) { |
- TestDirectMemoryPressureCalculator calc; |
- |
- static const int kModerateMb = |
- (100 - DirectMemoryPressureCalculator::kDefaultModerateThresholdPc) * |
- kTotalMemoryInMB / 100; |
- static const int kCriticalMb = |
- (100 - DirectMemoryPressureCalculator::kDefaultCriticalThresholdPc) * |
- kTotalMemoryInMB / 100; |
- |
- EXPECT_EQ(kModerateMb, calc.moderate_threshold_mb()); |
- EXPECT_EQ(kCriticalMb, calc.critical_threshold_mb()); |
- |
- ASSERT_NO_FATAL_FAILURE(CalculateCurrentPressureLevelTest(&calc)); |
-} |
- |
-// Tests the fundamental direct calculation of memory pressure with manually |
-// specified threshold levels. |
-TEST_F(DirectMemoryPressureCalculatorTest, |
- CalculateCurrentMemoryPressureLevelCustom) { |
- static const int kSystemMb = 512; |
- static const int kModerateMb = 256; |
- static const int kCriticalMb = 128; |
- |
- TestDirectMemoryPressureCalculator calc(kSystemMb, kModerateMb, kCriticalMb); |
- |
- EXPECT_EQ(kModerateMb, calc.moderate_threshold_mb()); |
- EXPECT_EQ(kCriticalMb, calc.critical_threshold_mb()); |
- |
- ASSERT_NO_FATAL_FAILURE(CalculateCurrentPressureLevelTest(&calc)); |
-} |
- |
-// Double-check the math of the Ewma portion of the page fault monitor. |
-TEST_F(DirectMemoryPressureCalculatorTest, Ewma) { |
- double half_life = 100.0; |
- |
- double cpu_time = 0; |
- uint64_t page_faults = 1; |
- |
- double ewma = 100.0; |
- |
- TestDirectMemoryPressureCalculator calc; |
- calc.SetPageFaultMonitorState(cpu_time, page_faults, ewma, half_life, 0, 0); |
- // Advance by one half-life. The ewma should be cut in half. |
- calc.SetCpuTime(half_life); |
- calc.SetPageFaults(page_faults); |
- calc.CalculateCurrentPressureLevel(); |
- ewma /= 2; |
- EXPECT_DOUBLE_EQ(ewma, calc.GetEwma()); |
- |
- // We should get the same result if we advance by increments of 10 up to 100. |
- ewma = 100.0; |
- calc.SetPageFaultMonitorState(cpu_time, page_faults, ewma, half_life, 0, 0); |
- static const int kIncrements = 10; |
- for(int i = 1; i <= kIncrements; i++) { |
- calc.SetCpuTime(i * half_life / kIncrements); |
- calc.SetPageFaults(page_faults); |
- calc.CalculateCurrentPressureLevel(); |
- } |
- ewma /= 2; |
- EXPECT_DOUBLE_EQ(ewma, calc.GetEwma()); |
- |
- static const struct { |
- uint64_t delta_time; |
- uint64_t delta_faults; |
- double expected_ewma; |
- } kSamples[] = { |
- // 0.5*0.0 + 0.5*10 = 5.0 |
- { 1, 10, 5.0 }, |
- // 0.5*5.0 + 0.5*10 = 7.5 |
- { 1, 10, 7.5 }, |
- // 0.25*7.5 + 0.75*(0/2) = 1.875 |
- { 2, 0, 1.875 }, |
- // 0.125*1.875 + 0.875*(420/3) = 122.734375 |
- { 3, 420, 122.734375 }, |
- // 0.5*122.734375 + 0.5*24 = 73.3671875 |
- { 1, 24, 73.3671875 }, |
- }; |
- |
- cpu_time = 1; |
- page_faults = 1; |
- ewma = 0.0; |
- half_life = 1.0; |
- calc.SetPageFaultMonitorState(cpu_time, page_faults, ewma, half_life, 0, 0); |
- for (size_t i = 0 ; i < arraysize(kSamples); i++) { |
- cpu_time += kSamples[i].delta_time; |
- page_faults += kSamples[i].delta_faults; |
- calc.SetCpuTime(cpu_time); |
- calc.SetPageFaults(page_faults); |
- calc.CalculateCurrentPressureLevel(); |
- EXPECT_DOUBLE_EQ(kSamples[i].expected_ewma, calc.GetEwma()); |
- } |
-} |
- |
-} // namespace memory_pressure |