| Index: base/win/memory_pressure_monitor_unittest.cc
|
| diff --git a/base/win/memory_pressure_monitor_unittest.cc b/base/win/memory_pressure_monitor_unittest.cc
|
| deleted file mode 100644
|
| index 40a25a79dd8170ea9a86292d0ececeac04b410d6..0000000000000000000000000000000000000000
|
| --- a/base/win/memory_pressure_monitor_unittest.cc
|
| +++ /dev/null
|
| @@ -1,298 +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 "base/win/memory_pressure_monitor.h"
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/memory/memory_pressure_listener.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace base {
|
| -namespace win {
|
| -
|
| -namespace {
|
| -
|
| -struct PressureSettings {
|
| - int phys_left_mb;
|
| - MemoryPressureListener::MemoryPressureLevel level;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -// This is outside of the anonymous namespace so that it can be seen as a friend
|
| -// to the monitor class.
|
| -class TestMemoryPressureMonitor : public MemoryPressureMonitor {
|
| - public:
|
| - using MemoryPressureMonitor::CalculateCurrentPressureLevel;
|
| - using MemoryPressureMonitor::CheckMemoryPressure;
|
| -
|
| - static const DWORDLONG kMBBytes = 1024 * 1024;
|
| -
|
| - explicit TestMemoryPressureMonitor(bool large_memory)
|
| - : mem_status_() {
|
| - // Generate a plausible amount of memory.
|
| - mem_status_.ullTotalPhys =
|
| - static_cast<DWORDLONG>(GenerateTotalMemoryMb(large_memory)) * kMBBytes;
|
| -
|
| - // Rerun InferThresholds using the test fixture's GetSystemMemoryStatus.
|
| - InferThresholds();
|
| - // Stop the timer.
|
| - StopObserving();
|
| - }
|
| -
|
| - TestMemoryPressureMonitor(int system_memory_mb,
|
| - int moderate_threshold_mb,
|
| - int critical_threshold_mb)
|
| - : MemoryPressureMonitor(moderate_threshold_mb, critical_threshold_mb),
|
| - mem_status_() {
|
| - // Set the amount of system memory.
|
| - mem_status_.ullTotalPhys = static_cast<DWORDLONG>(
|
| - system_memory_mb * kMBBytes);
|
| -
|
| - // Stop the timer.
|
| - StopObserving();
|
| - }
|
| -
|
| - virtual ~TestMemoryPressureMonitor() {}
|
| -
|
| - MOCK_METHOD1(OnMemoryPressure,
|
| - void(MemoryPressureListener::MemoryPressureLevel level));
|
| -
|
| - // Generates an amount of total memory that is consistent with the requested
|
| - // memory model.
|
| - int GenerateTotalMemoryMb(bool large_memory) {
|
| - int total_mb = 64;
|
| - while (total_mb < MemoryPressureMonitor::kLargeMemoryThresholdMb)
|
| - total_mb *= 2;
|
| - if (large_memory)
|
| - return total_mb * 2;
|
| - return total_mb / 2;
|
| - }
|
| -
|
| - // Sets up the memory status to reflect the provided absolute memory left.
|
| - void SetMemoryFree(int phys_left_mb) {
|
| - // ullTotalPhys is set in the constructor and not modified.
|
| -
|
| - // Set the amount of available memory.
|
| - mem_status_.ullAvailPhys =
|
| - static_cast<DWORDLONG>(phys_left_mb) * kMBBytes;
|
| - DCHECK_LT(mem_status_.ullAvailPhys, mem_status_.ullTotalPhys);
|
| -
|
| - // These fields are unused.
|
| - mem_status_.dwMemoryLoad = 0;
|
| - mem_status_.ullTotalPageFile = 0;
|
| - mem_status_.ullAvailPageFile = 0;
|
| - mem_status_.ullTotalVirtual = 0;
|
| - mem_status_.ullAvailVirtual = 0;
|
| - }
|
| -
|
| - void SetNone() {
|
| - SetMemoryFree(moderate_threshold_mb() + 1);
|
| - }
|
| -
|
| - void SetModerate() {
|
| - SetMemoryFree(moderate_threshold_mb() - 1);
|
| - }
|
| -
|
| - void SetCritical() {
|
| - SetMemoryFree(critical_threshold_mb() - 1);
|
| - }
|
| -
|
| - private:
|
| - bool GetSystemMemoryStatus(MEMORYSTATUSEX* mem_status) override {
|
| - // Simply copy the memory status set by the test fixture.
|
| - *mem_status = mem_status_;
|
| - return true;
|
| - }
|
| -
|
| - MEMORYSTATUSEX mem_status_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TestMemoryPressureMonitor);
|
| -};
|
| -
|
| -class WinMemoryPressureMonitorTest : public testing::Test {
|
| - protected:
|
| - void CalculateCurrentMemoryPressureLevelTest(
|
| - TestMemoryPressureMonitor* monitor) {
|
| -
|
| - int mod = monitor->moderate_threshold_mb();
|
| - monitor->SetMemoryFree(mod + 1);
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
|
| - monitor->CalculateCurrentPressureLevel());
|
| -
|
| - monitor->SetMemoryFree(mod);
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
|
| - monitor->CalculateCurrentPressureLevel());
|
| -
|
| - monitor->SetMemoryFree(mod - 1);
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
|
| - monitor->CalculateCurrentPressureLevel());
|
| -
|
| - int crit = monitor->critical_threshold_mb();
|
| - monitor->SetMemoryFree(crit + 1);
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
|
| - monitor->CalculateCurrentPressureLevel());
|
| -
|
| - monitor->SetMemoryFree(crit);
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL,
|
| - monitor->CalculateCurrentPressureLevel());
|
| -
|
| - monitor->SetMemoryFree(crit - 1);
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL,
|
| - monitor->CalculateCurrentPressureLevel());
|
| - }
|
| -
|
| - base::MessageLoopForUI message_loop_;
|
| -};
|
| -
|
| -// Tests the fundamental direct calculation of memory pressure with automatic
|
| -// small-memory thresholds.
|
| -TEST_F(WinMemoryPressureMonitorTest, CalculateCurrentMemoryPressureLevelSmall) {
|
| - static const int kModerateMb =
|
| - MemoryPressureMonitor::kSmallMemoryDefaultModerateThresholdMb;
|
| - static const int kCriticalMb =
|
| - MemoryPressureMonitor::kSmallMemoryDefaultCriticalThresholdMb;
|
| -
|
| - TestMemoryPressureMonitor monitor(false); // Small-memory model.
|
| -
|
| - EXPECT_EQ(kModerateMb, monitor.moderate_threshold_mb());
|
| - EXPECT_EQ(kCriticalMb, monitor.critical_threshold_mb());
|
| -
|
| - ASSERT_NO_FATAL_FAILURE(CalculateCurrentMemoryPressureLevelTest(&monitor));
|
| -}
|
| -
|
| -// Tests the fundamental direct calculation of memory pressure with automatic
|
| -// large-memory thresholds.
|
| -TEST_F(WinMemoryPressureMonitorTest, CalculateCurrentMemoryPressureLevelLarge) {
|
| - static const int kModerateMb =
|
| - MemoryPressureMonitor::kLargeMemoryDefaultModerateThresholdMb;
|
| - static const int kCriticalMb =
|
| - MemoryPressureMonitor::kLargeMemoryDefaultCriticalThresholdMb;
|
| -
|
| - TestMemoryPressureMonitor monitor(true); // Large-memory model.
|
| -
|
| - EXPECT_EQ(kModerateMb, monitor.moderate_threshold_mb());
|
| - EXPECT_EQ(kCriticalMb, monitor.critical_threshold_mb());
|
| -
|
| - ASSERT_NO_FATAL_FAILURE(CalculateCurrentMemoryPressureLevelTest(&monitor));
|
| -}
|
| -
|
| -// Tests the fundamental direct calculation of memory pressure with manually
|
| -// specified threshold levels.
|
| -TEST_F(WinMemoryPressureMonitorTest,
|
| - CalculateCurrentMemoryPressureLevelCustom) {
|
| - static const int kSystemMb = 512;
|
| - static const int kModerateMb = 256;
|
| - static const int kCriticalMb = 128;
|
| -
|
| - TestMemoryPressureMonitor monitor(kSystemMb, kModerateMb, kCriticalMb);
|
| -
|
| - EXPECT_EQ(kModerateMb, monitor.moderate_threshold_mb());
|
| - EXPECT_EQ(kCriticalMb, monitor.critical_threshold_mb());
|
| -
|
| - ASSERT_NO_FATAL_FAILURE(CalculateCurrentMemoryPressureLevelTest(&monitor));
|
| -}
|
| -
|
| -// This test tests the various transition states from memory pressure, looking
|
| -// for the correct behavior on event reposting as well as state updates.
|
| -TEST_F(WinMemoryPressureMonitorTest, CheckMemoryPressure) {
|
| - // Large-memory.
|
| - testing::StrictMock<TestMemoryPressureMonitor> monitor(true);
|
| - MemoryPressureListener listener(
|
| - base::Bind(&TestMemoryPressureMonitor::OnMemoryPressure,
|
| - base::Unretained(&monitor)));
|
| -
|
| - // Checking the memory pressure at 0% load should not produce any
|
| - // events.
|
| - monitor.SetNone();
|
| - monitor.CheckMemoryPressure();
|
| - message_loop_.RunUntilIdle();
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
|
| - monitor.GetCurrentPressureLevel());
|
| -
|
| - // Setting the memory level to 80% should produce a moderate pressure level.
|
| - EXPECT_CALL(monitor,
|
| - OnMemoryPressure(MemoryPressureListener::
|
| - MEMORY_PRESSURE_LEVEL_MODERATE));
|
| - monitor.SetModerate();
|
| - monitor.CheckMemoryPressure();
|
| - message_loop_.RunUntilIdle();
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
|
| - monitor.GetCurrentPressureLevel());
|
| - testing::Mock::VerifyAndClearExpectations(&monitor);
|
| -
|
| - // Check that the event gets reposted after a while.
|
| - for (int i = 0; i < monitor.kModeratePressureCooldownCycles; ++i) {
|
| - if (i + 1 == monitor.kModeratePressureCooldownCycles) {
|
| - EXPECT_CALL(monitor,
|
| - OnMemoryPressure(MemoryPressureListener::
|
| - MEMORY_PRESSURE_LEVEL_MODERATE));
|
| - }
|
| - monitor.CheckMemoryPressure();
|
| - message_loop_.RunUntilIdle();
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
|
| - monitor.GetCurrentPressureLevel());
|
| - testing::Mock::VerifyAndClearExpectations(&monitor);
|
| - }
|
| -
|
| - // Setting the memory usage to 99% should produce critical levels.
|
| - EXPECT_CALL(monitor,
|
| - OnMemoryPressure(MemoryPressureListener::
|
| - MEMORY_PRESSURE_LEVEL_CRITICAL));
|
| - monitor.SetCritical();
|
| - monitor.CheckMemoryPressure();
|
| - message_loop_.RunUntilIdle();
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL,
|
| - monitor.GetCurrentPressureLevel());
|
| - testing::Mock::VerifyAndClearExpectations(&monitor);
|
| -
|
| - // Calling it again should immediately produce a second call.
|
| - EXPECT_CALL(monitor,
|
| - OnMemoryPressure(MemoryPressureListener::
|
| - MEMORY_PRESSURE_LEVEL_CRITICAL));
|
| - monitor.CheckMemoryPressure();
|
| - message_loop_.RunUntilIdle();
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL,
|
| - monitor.GetCurrentPressureLevel());
|
| - testing::Mock::VerifyAndClearExpectations(&monitor);
|
| -
|
| - // When lowering the pressure again there should be a notification and the
|
| - // pressure should go back to moderate.
|
| - EXPECT_CALL(monitor,
|
| - OnMemoryPressure(MemoryPressureListener::
|
| - MEMORY_PRESSURE_LEVEL_MODERATE));
|
| - monitor.SetModerate();
|
| - monitor.CheckMemoryPressure();
|
| - message_loop_.RunUntilIdle();
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
|
| - monitor.GetCurrentPressureLevel());
|
| - testing::Mock::VerifyAndClearExpectations(&monitor);
|
| -
|
| - // Check that the event gets reposted after a while.
|
| - for (int i = 0; i < monitor.kModeratePressureCooldownCycles; ++i) {
|
| - if (i + 1 == monitor.kModeratePressureCooldownCycles) {
|
| - EXPECT_CALL(monitor,
|
| - OnMemoryPressure(MemoryPressureListener::
|
| - MEMORY_PRESSURE_LEVEL_MODERATE));
|
| - }
|
| - monitor.CheckMemoryPressure();
|
| - message_loop_.RunUntilIdle();
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
|
| - monitor.GetCurrentPressureLevel());
|
| - testing::Mock::VerifyAndClearExpectations(&monitor);
|
| - }
|
| -
|
| - // Going down to no pressure should not produce an notification.
|
| - monitor.SetNone();
|
| - monitor.CheckMemoryPressure();
|
| - message_loop_.RunUntilIdle();
|
| - EXPECT_EQ(MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
|
| - monitor.GetCurrentPressureLevel());
|
| - testing::Mock::VerifyAndClearExpectations(&monitor);
|
| -}
|
| -
|
| -} // namespace win
|
| -} // namespace base
|
|
|