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/task_scheduler_impl.h" | 5 #include "base/task_scheduler/task_scheduler_impl.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
12 #include "base/task_scheduler/delayed_task_manager.h" | 12 #include "base/task_scheduler/delayed_task_manager.h" |
13 #include "base/task_scheduler/scheduler_worker_pool_params.h" | 13 #include "base/task_scheduler/scheduler_worker_pool_params.h" |
14 #include "base/task_scheduler/sequence_sort_key.h" | 14 #include "base/task_scheduler/sequence_sort_key.h" |
15 #include "base/task_scheduler/task.h" | 15 #include "base/task_scheduler/task.h" |
16 #include "base/task_scheduler/task_tracker.h" | 16 #include "base/task_scheduler/task_tracker.h" |
17 #include "base/time/time.h" | |
18 #include "build/build_config.h" | 17 #include "build/build_config.h" |
19 | 18 |
20 #if defined(OS_POSIX) && !defined(OS_NACL_SFI) | 19 #if defined(OS_POSIX) && !defined(OS_NACL_SFI) |
21 #include "base/task_scheduler/task_tracker_posix.h" | 20 #include "base/task_scheduler/task_tracker_posix.h" |
22 #endif | 21 #endif |
23 | 22 |
24 namespace base { | 23 namespace base { |
25 namespace internal { | 24 namespace internal { |
26 | 25 |
27 // static | 26 // static |
28 std::unique_ptr<TaskSchedulerImpl> TaskSchedulerImpl::Create( | 27 std::unique_ptr<TaskSchedulerImpl> TaskSchedulerImpl::Create( |
29 const std::vector<SchedulerWorkerPoolParams>& worker_pool_params_vector, | 28 const std::vector<SchedulerWorkerPoolParams>& worker_pool_params_vector, |
30 const WorkerPoolIndexForTraitsCallback& | 29 const WorkerPoolIndexForTraitsCallback& |
31 worker_pool_index_for_traits_callback) { | 30 worker_pool_index_for_traits_callback) { |
32 std::unique_ptr<TaskSchedulerImpl> scheduler( | 31 std::unique_ptr<TaskSchedulerImpl> scheduler( |
33 new TaskSchedulerImpl(worker_pool_index_for_traits_callback)); | 32 new TaskSchedulerImpl(worker_pool_index_for_traits_callback)); |
34 scheduler->Initialize(worker_pool_params_vector); | 33 scheduler->Initialize(worker_pool_params_vector); |
35 return scheduler; | 34 return scheduler; |
36 } | 35 } |
37 | 36 |
38 TaskSchedulerImpl::~TaskSchedulerImpl() { | 37 TaskSchedulerImpl::~TaskSchedulerImpl() { |
39 #if DCHECK_IS_ON() | 38 #if DCHECK_IS_ON() |
40 DCHECK(join_for_testing_returned_.IsSet()); | 39 DCHECK(join_for_testing_returned_.IsSet()); |
41 #endif | 40 #endif |
42 } | 41 } |
43 | 42 |
44 void TaskSchedulerImpl::PostTaskWithTraits( | 43 void TaskSchedulerImpl::PostDelayedTaskWithTraits( |
45 const tracked_objects::Location& from_here, | 44 const tracked_objects::Location& from_here, |
46 const TaskTraits& traits, | 45 const TaskTraits& traits, |
47 const Closure& task) { | 46 const Closure& task, |
| 47 TimeDelta delay) { |
48 // Post |task| as part of a one-off single-task Sequence. | 48 // Post |task| as part of a one-off single-task Sequence. |
49 GetWorkerPoolForTraits(traits)->PostTaskWithSequence( | 49 GetWorkerPoolForTraits(traits)->PostTaskWithSequence( |
50 MakeUnique<Task>(from_here, task, traits, TimeDelta()), | 50 MakeUnique<Task>(from_here, task, traits, delay), |
51 make_scoped_refptr(new Sequence), nullptr); | 51 make_scoped_refptr(new Sequence), nullptr); |
52 } | 52 } |
53 | 53 |
54 scoped_refptr<TaskRunner> TaskSchedulerImpl::CreateTaskRunnerWithTraits( | 54 scoped_refptr<TaskRunner> TaskSchedulerImpl::CreateTaskRunnerWithTraits( |
55 const TaskTraits& traits) { | 55 const TaskTraits& traits) { |
56 return GetWorkerPoolForTraits(traits)->CreateTaskRunnerWithTraits(traits); | 56 return GetWorkerPoolForTraits(traits)->CreateTaskRunnerWithTraits(traits); |
57 } | 57 } |
58 | 58 |
59 scoped_refptr<SequencedTaskRunner> | 59 scoped_refptr<SequencedTaskRunner> |
60 TaskSchedulerImpl::CreateSequencedTaskRunnerWithTraits( | 60 TaskSchedulerImpl::CreateSequencedTaskRunnerWithTraits( |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 // in |sequence|. | 177 // in |sequence|. |
178 const TaskTraits traits = | 178 const TaskTraits traits = |
179 sequence->PeekTaskTraits().WithPriority(sort_key.priority()); | 179 sequence->PeekTaskTraits().WithPriority(sort_key.priority()); |
180 | 180 |
181 GetWorkerPoolForTraits(traits)->ReEnqueueSequence(std::move(sequence), | 181 GetWorkerPoolForTraits(traits)->ReEnqueueSequence(std::move(sequence), |
182 sort_key); | 182 sort_key); |
183 } | 183 } |
184 | 184 |
185 } // namespace internal | 185 } // namespace internal |
186 } // namespace base | 186 } // namespace base |
OLD | NEW |