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 "base/task_scheduler/delayed_task_manager.h" | 5 #include "base/task_scheduler/delayed_task_manager.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
13 #include "base/task_scheduler/task.h" | 13 #include "base/task_scheduler/task.h" |
| 14 #include "base/task_scheduler/test_utils.h" |
14 #include "base/test/test_mock_time_task_runner.h" | 15 #include "base/test/test_mock_time_task_runner.h" |
15 #include "base/time/time.h" | 16 #include "base/time/time.h" |
16 #include "testing/gmock/include/gmock/gmock.h" | 17 #include "testing/gmock/include/gmock/gmock.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
18 | 19 |
19 namespace base { | 20 namespace base { |
20 namespace internal { | 21 namespace internal { |
21 namespace { | 22 namespace { |
22 | 23 |
23 constexpr TimeDelta kLongDelay = TimeDelta::FromHours(1); | 24 constexpr TimeDelta kLongDelay = TimeDelta::FromHours(1); |
(...skipping 17 matching lines...) Expand all Loading... |
41 | 42 |
42 class TaskSchedulerDelayedTaskManagerTest : public testing::Test { | 43 class TaskSchedulerDelayedTaskManagerTest : public testing::Test { |
43 public: | 44 public: |
44 TaskSchedulerDelayedTaskManagerTest() | 45 TaskSchedulerDelayedTaskManagerTest() |
45 : delayed_task_manager_(service_thread_task_runner_->GetMockTickClock()) { | 46 : delayed_task_manager_(service_thread_task_runner_->GetMockTickClock()) { |
46 } | 47 } |
47 ~TaskSchedulerDelayedTaskManagerTest() override = default; | 48 ~TaskSchedulerDelayedTaskManagerTest() override = default; |
48 | 49 |
49 protected: | 50 protected: |
50 std::unique_ptr<Task> CreateTask(TimeDelta delay) { | 51 std::unique_ptr<Task> CreateTask(TimeDelta delay) { |
51 auto task = | 52 auto task = MakeUnique<Task>(FROM_HERE, BindOnce(&DoNothing), |
52 MakeUnique<Task>(FROM_HERE, BindOnce(&DoNothing), TaskTraits(), delay); | 53 test::CreateTaskTraits(), delay); |
53 | 54 |
54 // The constructor of Task computes |delayed_run_time| by adding |delay| to | 55 // The constructor of Task computes |delayed_run_time| by adding |delay| to |
55 // the real time. Recompute it by adding |delay| to the mock time. | 56 // the real time. Recompute it by adding |delay| to the mock time. |
56 task->delayed_run_time = | 57 task->delayed_run_time = |
57 service_thread_task_runner_->GetMockTickClock()->NowTicks() + delay; | 58 service_thread_task_runner_->GetMockTickClock()->NowTicks() + delay; |
58 | 59 |
59 return task; | 60 return task; |
60 } | 61 } |
61 | 62 |
62 testing::StrictMock<MockTaskTarget> task_target_; | 63 testing::StrictMock<MockTaskTarget> task_target_; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 | 159 |
159 // Fast-forward time. Expect the task is forwarded to |task_target_|. | 160 // Fast-forward time. Expect the task is forwarded to |task_target_|. |
160 EXPECT_CALL(task_target_, DoPostTaskNowCallback(task_raw_)); | 161 EXPECT_CALL(task_target_, DoPostTaskNowCallback(task_raw_)); |
161 service_thread_task_runner_->FastForwardBy(kLongDelay); | 162 service_thread_task_runner_->FastForwardBy(kLongDelay); |
162 } | 163 } |
163 | 164 |
164 // Verify that multiple delayed tasks added after Start() are forwarded when | 165 // Verify that multiple delayed tasks added after Start() are forwarded when |
165 // they are ripe for execution. | 166 // they are ripe for execution. |
166 TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTasksRunAfterDelay) { | 167 TEST_F(TaskSchedulerDelayedTaskManagerTest, DelayedTasksRunAfterDelay) { |
167 delayed_task_manager_.Start(service_thread_task_runner_); | 168 delayed_task_manager_.Start(service_thread_task_runner_); |
168 auto task_a = MakeUnique<Task>(FROM_HERE, BindOnce(&DoNothing), TaskTraits(), | 169 auto task_a = |
169 TimeDelta::FromHours(1)); | 170 MakeUnique<Task>(FROM_HERE, BindOnce(&DoNothing), |
| 171 test::CreateTaskTraits(), TimeDelta::FromHours(1)); |
170 const Task* task_a_raw = task_a.get(); | 172 const Task* task_a_raw = task_a.get(); |
171 | 173 |
172 auto task_b = MakeUnique<Task>(FROM_HERE, BindOnce(&DoNothing), TaskTraits(), | 174 auto task_b = |
173 TimeDelta::FromHours(2)); | 175 MakeUnique<Task>(FROM_HERE, BindOnce(&DoNothing), |
| 176 test::CreateTaskTraits(), TimeDelta::FromHours(2)); |
174 const Task* task_b_raw = task_b.get(); | 177 const Task* task_b_raw = task_b.get(); |
175 | 178 |
176 auto task_c = MakeUnique<Task>(FROM_HERE, BindOnce(&DoNothing), TaskTraits(), | 179 auto task_c = |
177 TimeDelta::FromHours(1)); | 180 MakeUnique<Task>(FROM_HERE, BindOnce(&DoNothing), |
| 181 test::CreateTaskTraits(), TimeDelta::FromHours(1)); |
178 const Task* task_c_raw = task_c.get(); | 182 const Task* task_c_raw = task_c.get(); |
179 | 183 |
180 // Send tasks to the DelayedTaskManager. | 184 // Send tasks to the DelayedTaskManager. |
181 delayed_task_manager_.AddDelayedTask( | 185 delayed_task_manager_.AddDelayedTask( |
182 std::move(task_a), BindOnce(&MockTaskTarget::PostTaskNowCallback, | 186 std::move(task_a), BindOnce(&MockTaskTarget::PostTaskNowCallback, |
183 Unretained(&task_target_))); | 187 Unretained(&task_target_))); |
184 delayed_task_manager_.AddDelayedTask( | 188 delayed_task_manager_.AddDelayedTask( |
185 std::move(task_b), BindOnce(&MockTaskTarget::PostTaskNowCallback, | 189 std::move(task_b), BindOnce(&MockTaskTarget::PostTaskNowCallback, |
186 Unretained(&task_target_))); | 190 Unretained(&task_target_))); |
187 delayed_task_manager_.AddDelayedTask( | 191 delayed_task_manager_.AddDelayedTask( |
(...skipping 12 matching lines...) Expand all Loading... |
200 testing::Mock::VerifyAndClear(&task_target_); | 204 testing::Mock::VerifyAndClear(&task_target_); |
201 | 205 |
202 // Fast-forward time. Expect |task_b_raw| to be forwarded to |task_target_|. | 206 // Fast-forward time. Expect |task_b_raw| to be forwarded to |task_target_|. |
203 EXPECT_CALL(task_target_, DoPostTaskNowCallback(task_b_raw)); | 207 EXPECT_CALL(task_target_, DoPostTaskNowCallback(task_b_raw)); |
204 service_thread_task_runner_->FastForwardBy(TimeDelta::FromHours(1)); | 208 service_thread_task_runner_->FastForwardBy(TimeDelta::FromHours(1)); |
205 testing::Mock::VerifyAndClear(&task_target_); | 209 testing::Mock::VerifyAndClear(&task_target_); |
206 } | 210 } |
207 | 211 |
208 } // namespace internal | 212 } // namespace internal |
209 } // namespace base | 213 } // namespace base |
OLD | NEW |