| 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 |