summaryrefslogtreecommitdiffstats
path: root/chromium/base/util/memory_pressure
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/base/util/memory_pressure')
-rw-r--r--chromium/base/util/memory_pressure/BUILD.gn13
-rw-r--r--chromium/base/util/memory_pressure/fake_memory_pressure_monitor.cc33
-rw-r--r--chromium/base/util/memory_pressure/fake_memory_pressure_monitor.h40
-rw-r--r--chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor.cc17
-rw-r--r--chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor.h3
-rw-r--r--chromium/base/util/memory_pressure/multi_source_memory_pressure_monitor_unittest.cc1
-rw-r--r--chromium/base/util/memory_pressure/system_memory_pressure_evaluator_win_unittest.cc3
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