OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/memory_pressure/memory_pressure_monitor.h" | 5 #include "components/memory_pressure/memory_pressure_monitor.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> |
8 | 9 |
9 #include "base/bind.h" | 10 #include "base/bind.h" |
10 #include "base/task_runner.h" | 11 #include "base/task_runner.h" |
11 #include "base/test/simple_test_tick_clock.h" | 12 #include "base/test/simple_test_tick_clock.h" |
12 #include "base/tracked_objects.h" | 13 #include "base/tracked_objects.h" |
13 #include "components/memory_pressure/memory_pressure_stats_collector.h" | 14 #include "components/memory_pressure/memory_pressure_stats_collector.h" |
14 #include "components/memory_pressure/test_memory_pressure_calculator.h" | 15 #include "components/memory_pressure/test_memory_pressure_calculator.h" |
15 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
17 | 18 |
(...skipping 10 matching lines...) Expand all Loading... |
28 MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL; | 29 MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL; |
29 | 30 |
30 using testing::_; | 31 using testing::_; |
31 | 32 |
32 } // namespace | 33 } // namespace |
33 | 34 |
34 // A mock task runner. This isn't directly a TaskRunner as the reference | 35 // A mock task runner. This isn't directly a TaskRunner as the reference |
35 // counting confuses gmock. | 36 // counting confuses gmock. |
36 class LenientMockTaskRunner { | 37 class LenientMockTaskRunner { |
37 public: | 38 public: |
38 MOCK_METHOD3(PostDelayedTask, | 39 MOCK_METHOD2(PostDelayedTask, |
39 bool(const tracked_objects::Location&, | 40 bool(const tracked_objects::Location&, base::TimeDelta)); |
40 const base::Closure&, | |
41 base::TimeDelta)); | |
42 }; | 41 }; |
43 using MockTaskRunner = testing::StrictMock<LenientMockTaskRunner>; | 42 using MockTaskRunner = testing::StrictMock<LenientMockTaskRunner>; |
44 | 43 |
45 // A TaskRunner implementation that wraps a MockTaskRunner. | 44 // A TaskRunner implementation that wraps a MockTaskRunner. |
46 class TaskRunnerProxy : public base::TaskRunner { | 45 class TaskRunnerProxy : public base::TaskRunner { |
47 public: | 46 public: |
48 // The provided |mock| must outlive this object. | 47 // The provided |mock| must outlive this object. |
49 explicit TaskRunnerProxy(MockTaskRunner* mock) : mock_(mock) {} | 48 explicit TaskRunnerProxy(MockTaskRunner* mock) : mock_(mock) {} |
50 bool RunsTasksOnCurrentThread() const override { return true; } | 49 bool RunsTasksOnCurrentThread() const override { return true; } |
51 bool PostDelayedTask(const tracked_objects::Location& location, | 50 bool PostDelayedTask(const tracked_objects::Location& location, |
52 const base::Closure& closure, | 51 base::Closure closure, |
53 base::TimeDelta delta) override { | 52 base::TimeDelta delta) override { |
54 return mock_->PostDelayedTask(location, closure, delta); | 53 return mock_->PostDelayedTask(location, delta); |
55 } | 54 } |
56 | 55 |
57 private: | 56 private: |
58 MockTaskRunner* mock_; | 57 MockTaskRunner* mock_; |
59 ~TaskRunnerProxy() override {} | 58 ~TaskRunnerProxy() override {} |
60 }; | 59 }; |
61 | 60 |
62 class TestMemoryPressureMonitor : public MemoryPressureMonitor { | 61 class TestMemoryPressureMonitor : public MemoryPressureMonitor { |
63 public: | 62 public: |
64 // Expose the callback that is used for scheduled checks. | 63 // Expose the callback that is used for scheduled checks. |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 #endif // !MEMORY_PRESSURE_IS_POLLING | 161 #endif // !MEMORY_PRESSURE_IS_POLLING |
163 | 162 |
164 // Advances the tick clock by the given number of milliseconds. | 163 // Advances the tick clock by the given number of milliseconds. |
165 void Tick(int ms) { | 164 void Tick(int ms) { |
166 tick_clock_.Advance(base::TimeDelta::FromMilliseconds(ms)); | 165 tick_clock_.Advance(base::TimeDelta::FromMilliseconds(ms)); |
167 } | 166 } |
168 | 167 |
169 // Sets expectations for tasks scheduled via |mock_task_runner_|. | 168 // Sets expectations for tasks scheduled via |mock_task_runner_|. |
170 void ExpectTaskPosted(int delay_ms) { | 169 void ExpectTaskPosted(int delay_ms) { |
171 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(delay_ms); | 170 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(delay_ms); |
172 EXPECT_CALL(mock_task_runner_, PostDelayedTask(_, _, delay)) | 171 EXPECT_CALL(mock_task_runner_, PostDelayedTask(_, delay)) |
173 .WillOnce(testing::Return(true)); | 172 .WillOnce(testing::Return(true)); |
174 } | 173 } |
175 | 174 |
176 // Sets up expectations for calls to |mock_dispatch_|. | 175 // Sets up expectations for calls to |mock_dispatch_|. |
177 void ExpectDispatch(MemoryPressureLevel level) { | 176 void ExpectDispatch(MemoryPressureLevel level) { |
178 EXPECT_CALL(mock_dispatch_, Dispatch(level)); | 177 EXPECT_CALL(mock_dispatch_, Dispatch(level)); |
179 } | 178 } |
180 void ExpectDispatchModerate() { | 179 void ExpectDispatchModerate() { |
181 EXPECT_CALL(mock_dispatch_, Dispatch(MEMORY_PRESSURE_LEVEL_MODERATE)); | 180 EXPECT_CALL(mock_dispatch_, Dispatch(MEMORY_PRESSURE_LEVEL_MODERATE)); |
182 } | 181 } |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 ExpectDispatchCritical(); | 380 ExpectDispatchCritical(); |
382 monitor_->OnMemoryPressureChanged(MEMORY_PRESSURE_LEVEL_CRITICAL); | 381 monitor_->OnMemoryPressureChanged(MEMORY_PRESSURE_LEVEL_CRITICAL); |
383 VerifyAndClearExpectations(); | 382 VerifyAndClearExpectations(); |
384 ExpectCritical(); | 383 ExpectCritical(); |
385 EXPECT_EQ(2u, monitor_->scheduled_checks().size()); | 384 EXPECT_EQ(2u, monitor_->scheduled_checks().size()); |
386 } | 385 } |
387 | 386 |
388 #endif // !MEMORY_PRESSURE_IS_POLLING | 387 #endif // !MEMORY_PRESSURE_IS_POLLING |
389 | 388 |
390 } // namespace memory_pressure | 389 } // namespace memory_pressure |
OLD | NEW |