diff options
Diffstat (limited to 'chromium/base/util/memory_pressure')
7 files changed, 104 insertions, 6 deletions
diff --git a/chromium/base/util/memory_pressure/BUILD.gn b/chromium/base/util/memory_pressure/BUILD.gn index 6065c9a7a4f..16bb4784b54 100644 --- a/chromium/base/util/memory_pressure/BUILD.gn +++ b/chromium/base/util/memory_pressure/BUILD.gn @@ -41,3 +41,16 @@ source_set("unittests") { "//testing/gtest", ] } + +static_library("test_support") { + testonly = true + sources = [ + "fake_memory_pressure_monitor.cc", + "fake_memory_pressure_monitor.h", + ] + + public_deps = [ + ":memory_pressure", + "//base", + ] +} diff --git a/chromium/base/util/memory_pressure/fake_memory_pressure_monitor.cc b/chromium/base/util/memory_pressure/fake_memory_pressure_monitor.cc new file mode 100644 index 00000000000..b9273c5a7ac --- /dev/null +++ b/chromium/base/util/memory_pressure/fake_memory_pressure_monitor.cc @@ -0,0 +1,33 @@ +// Copyright 2018 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/util/memory_pressure/fake_memory_pressure_monitor.h" + +namespace util { +namespace test { + +FakeMemoryPressureMonitor::FakeMemoryPressureMonitor() + : MultiSourceMemoryPressureMonitor(), + memory_pressure_level_(MemoryPressureLevel::MEMORY_PRESSURE_LEVEL_NONE) {} + +FakeMemoryPressureMonitor::~FakeMemoryPressureMonitor() {} + +void FakeMemoryPressureMonitor::SetAndNotifyMemoryPressure( + MemoryPressureLevel level) { + memory_pressure_level_ = level; + base::MemoryPressureListener::SimulatePressureNotification(level); +} + +base::MemoryPressureMonitor::MemoryPressureLevel +FakeMemoryPressureMonitor::GetCurrentPressureLevel() const { + return memory_pressure_level_; +} + +void FakeMemoryPressureMonitor::SetDispatchCallback( + const DispatchCallback& callback) { + LOG(ERROR) << "FakeMemoryPressureMonitor::SetDispatchCallback"; +} + +} // namespace test +} // namespace util diff --git a/chromium/base/util/memory_pressure/fake_memory_pressure_monitor.h b/chromium/base/util/memory_pressure/fake_memory_pressure_monitor.h new file mode 100644 index 00000000000..e972d08c001 --- /dev/null +++ b/chromium/base/util/memory_pressure/fake_memory_pressure_monitor.h @@ -0,0 +1,40 @@ +// Copyright 2018 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. + +#ifndef BASE_UTIL_MEMORY_PRESSURE_FAKE_MEMORY_PRESSURE_MONITOR_H_ +#define BASE_UTIL_MEMORY_PRESSURE_FAKE_MEMORY_PRESSURE_MONITOR_H_ + +#include "base/macros.h" +#include "base/util/memory_pressure/multi_source_memory_pressure_monitor.h" + +namespace util { +namespace test { + +class FakeMemoryPressureMonitor + : public ::util::MultiSourceMemoryPressureMonitor { + public: + using MemoryPressureLevel = + ::util::MultiSourceMemoryPressureMonitor::MemoryPressureLevel; + using DispatchCallback = + ::util::MultiSourceMemoryPressureMonitor::DispatchCallback; + + FakeMemoryPressureMonitor(); + ~FakeMemoryPressureMonitor() override; + + void SetAndNotifyMemoryPressure(MemoryPressureLevel level); + + // base::MemoryPressureMonitor overrides: + MemoryPressureLevel GetCurrentPressureLevel() const override; + void SetDispatchCallback(const DispatchCallback& callback) override; + + private: + MemoryPressureLevel memory_pressure_level_; + + DISALLOW_COPY_AND_ASSIGN(FakeMemoryPressureMonitor); +}; + +} // namespace test +} // namespace util + +#endif // BASE_UTIL_MEMORY_PRESSURE_FAKE_MEMORY_PRESSURE_MONITOR_H_ diff --git a/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor.cc b/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor.cc index e8c59d1ea70..2b9a2c43eb0 100644 --- a/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor.cc +++ b/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor.cc @@ -17,16 +17,23 @@ MultiSourceMemoryPressureMonitor::MultiSourceMemoryPressureMonitor() dispatch_callback_(base::BindRepeating( &base::MemoryPressureListener::NotifyMemoryPressure)), aggregator_(this) { - // This can't be in the parameter list because |sequence_checker_| wouldn't be - // available, which would be needed by the |system_evaluator_|'s constructor's - // call to CreateVoter(). +} + +MultiSourceMemoryPressureMonitor::~MultiSourceMemoryPressureMonitor() { + // Destroy system evaluator early while the remaining members of this class + // still exist. MultiSourceMemoryPressureMonitor implements + // MemoryPressureVoteAggregator::Delegate, and + // delegate_->OnMemoryPressureLevelChanged() gets indirectly called during + // ~SystemMemoryPressureEvaluator(). + system_evaluator_.reset(); +} + +void MultiSourceMemoryPressureMonitor::Start() { system_evaluator_ = SystemMemoryPressureEvaluator::CreateDefaultSystemEvaluator(this); StartMetricsTimer(); } -MultiSourceMemoryPressureMonitor::~MultiSourceMemoryPressureMonitor() = default; - void MultiSourceMemoryPressureMonitor::StartMetricsTimer() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Unretained is safe here since this task is running on a timer owned by this diff --git a/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor.h b/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor.h index 3787ed9d4d9..078d58a4320 100644 --- a/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor.h +++ b/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor.h @@ -30,6 +30,9 @@ class MultiSourceMemoryPressureMonitor MultiSourceMemoryPressureMonitor(); ~MultiSourceMemoryPressureMonitor() override; + // Start monitoring memory pressure using the platform-specific voter. + void Start(); + // MemoryPressureMonitor implementation. MemoryPressureLevel GetCurrentPressureLevel() const override; void SetDispatchCallback(const DispatchCallback& callback) override; diff --git a/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor_unittest.cc b/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor_unittest.cc index 8c119714736..d796e2168c3 100644 --- a/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor_unittest.cc +++ b/chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor_unittest.cc @@ -14,6 +14,7 @@ namespace util { TEST(MultiSourceMemoryPressureMonitorTest, RunDispatchCallback) { base::test::TaskEnvironment task_environment; MultiSourceMemoryPressureMonitor monitor; + monitor.Start(); auto* aggregator = monitor.aggregator_for_testing(); bool callback_called = false; diff --git a/chromium/base/util/memory_pressure/system_memory_pressure_evaluator_win_unittest.cc b/chromium/base/util/memory_pressure/system_memory_pressure_evaluator_win_unittest.cc index 8ef9d6a09b5..3e0297366b6 100644 --- a/chromium/base/util/memory_pressure/system_memory_pressure_evaluator_win_unittest.cc +++ b/chromium/base/util/memory_pressure/system_memory_pressure_evaluator_win_unittest.cc @@ -146,7 +146,8 @@ class WinSystemMemoryPressureEvaluatorTest : public testing::Test { evaluator->CalculateCurrentPressureLevel()); } - base::MessageLoopForUI message_loop_; + base::test::SingleThreadTaskEnvironment task_environment_{ + base::test::SingleThreadTaskEnvironment::MainThreadType::UI}; }; // Tests the fundamental direct calculation of memory pressure with automatic |