system_memory_pressure_evaluator_mac_unittest.cc 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/memory_pressure/system_memory_pressure_evaluator_mac.h"
  5. #include "base/bind.h"
  6. #include "base/callback_helpers.h"
  7. #include "base/mac/scoped_cftyperef.h"
  8. #include "base/test/metrics/histogram_tester.h"
  9. #include "base/test/task_environment.h"
  10. #include "components/memory_pressure/multi_source_memory_pressure_monitor.h"
  11. #include "testing/gtest/include/gtest/gtest.h"
  12. namespace memory_pressure {
  13. namespace mac {
  14. class TestSystemMemoryPressureEvaluator : public SystemMemoryPressureEvaluator {
  15. public:
  16. using SystemMemoryPressureEvaluator::
  17. MemoryPressureLevelForMacMemoryPressureLevel;
  18. TestSystemMemoryPressureEvaluator(std::unique_ptr<MemoryPressureVoter> voter)
  19. : SystemMemoryPressureEvaluator(std::move(voter)) {}
  20. TestSystemMemoryPressureEvaluator(const TestSystemMemoryPressureEvaluator&) =
  21. delete;
  22. TestSystemMemoryPressureEvaluator& operator=(
  23. const TestSystemMemoryPressureEvaluator&) = delete;
  24. // A HistogramTester for verifying correct UMA stat generation.
  25. base::HistogramTester tester;
  26. // Sets the raw macOS memory pressure level read by the memory pressure
  27. // evaluator.
  28. int macos_pressure_level_for_testing_;
  29. // Exposes the UpdatePressureLevel() method for testing.
  30. void UpdatePressureLevel() {
  31. SystemMemoryPressureEvaluator::UpdatePressureLevel();
  32. }
  33. private:
  34. int GetMacMemoryPressureLevel() override {
  35. return macos_pressure_level_for_testing_;
  36. }
  37. };
  38. TEST(MacSystemMemoryPressureEvaluatorTest,
  39. MemoryPressureFromMacMemoryPressure) {
  40. EXPECT_EQ(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
  41. TestSystemMemoryPressureEvaluator::
  42. MemoryPressureLevelForMacMemoryPressureLevel(
  43. DISPATCH_MEMORYPRESSURE_NORMAL));
  44. EXPECT_EQ(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
  45. TestSystemMemoryPressureEvaluator::
  46. MemoryPressureLevelForMacMemoryPressureLevel(
  47. DISPATCH_MEMORYPRESSURE_WARN));
  48. EXPECT_EQ(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL,
  49. TestSystemMemoryPressureEvaluator::
  50. MemoryPressureLevelForMacMemoryPressureLevel(
  51. DISPATCH_MEMORYPRESSURE_CRITICAL));
  52. EXPECT_EQ(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
  53. TestSystemMemoryPressureEvaluator::
  54. MemoryPressureLevelForMacMemoryPressureLevel(0));
  55. EXPECT_EQ(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
  56. TestSystemMemoryPressureEvaluator::
  57. MemoryPressureLevelForMacMemoryPressureLevel(3));
  58. EXPECT_EQ(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
  59. TestSystemMemoryPressureEvaluator::
  60. MemoryPressureLevelForMacMemoryPressureLevel(5));
  61. EXPECT_EQ(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
  62. TestSystemMemoryPressureEvaluator::
  63. MemoryPressureLevelForMacMemoryPressureLevel(-1));
  64. }
  65. TEST(MacSystemMemoryPressureEvaluatorTest, CurrentMemoryPressure) {
  66. base::test::TaskEnvironment task_environment(
  67. base::test::TaskEnvironment::MainThreadType::UI);
  68. TestSystemMemoryPressureEvaluator evaluator(nullptr);
  69. base::MemoryPressureListener::MemoryPressureLevel memory_pressure =
  70. evaluator.current_vote();
  71. EXPECT_TRUE(
  72. memory_pressure ==
  73. base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE ||
  74. memory_pressure ==
  75. base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE ||
  76. memory_pressure ==
  77. base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL);
  78. }
  79. TEST(MacSystemMemoryPressureEvaluatorTest, MemoryPressureConversion) {
  80. base::test::TaskEnvironment task_environment(
  81. base::test::TaskEnvironment::MainThreadType::UI);
  82. TestSystemMemoryPressureEvaluator evaluator(nullptr);
  83. evaluator.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_NORMAL;
  84. evaluator.UpdatePressureLevel();
  85. EXPECT_EQ(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE,
  86. evaluator.current_vote());
  87. evaluator.macos_pressure_level_for_testing_ = DISPATCH_MEMORYPRESSURE_WARN;
  88. evaluator.UpdatePressureLevel();
  89. EXPECT_EQ(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE,
  90. evaluator.current_vote());
  91. evaluator.macos_pressure_level_for_testing_ =
  92. DISPATCH_MEMORYPRESSURE_CRITICAL;
  93. evaluator.UpdatePressureLevel();
  94. EXPECT_EQ(base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL,
  95. evaluator.current_vote());
  96. }
  97. } // namespace mac
  98. } // namespace memory_pressure