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/scheduler_service_thread.h" | 5 #include "base/task_scheduler/scheduler_service_thread.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 | 45 |
46 // For delayed tasks with delays that are really close to each other, it is | 46 // For delayed tasks with delays that are really close to each other, it is |
47 // possible for the current time to advance beyond the required | 47 // possible for the current time to advance beyond the required |
48 // GetDelayedWaitTime. Return a minimum of TimeDelta() in the event that | 48 // GetDelayedWaitTime. Return a minimum of TimeDelta() in the event that |
49 // happens. | 49 // happens. |
50 TimeDelta sleep_time = next_time - delayed_task_manager_->Now(); | 50 TimeDelta sleep_time = next_time - delayed_task_manager_->Now(); |
51 const TimeDelta zero_delta; | 51 const TimeDelta zero_delta; |
52 return sleep_time < zero_delta ? zero_delta : sleep_time; | 52 return sleep_time < zero_delta ? zero_delta : sleep_time; |
53 } | 53 } |
54 | 54 |
| 55 bool CanDetach(SchedulerWorkerThread* worker_thread) override { |
| 56 return false; |
| 57 } |
| 58 |
55 private: | 59 private: |
56 DelayedTaskManager* const delayed_task_manager_; | 60 DelayedTaskManager* const delayed_task_manager_; |
57 | 61 |
58 DISALLOW_COPY_AND_ASSIGN(ServiceThreadDelegate); | 62 DISALLOW_COPY_AND_ASSIGN(ServiceThreadDelegate); |
59 }; | 63 }; |
60 | 64 |
61 } // namespace | 65 } // namespace |
62 | 66 |
63 SchedulerServiceThread::~SchedulerServiceThread() = default; | 67 SchedulerServiceThread::~SchedulerServiceThread() = default; |
64 | 68 |
65 // static | 69 // static |
66 std::unique_ptr<SchedulerServiceThread> SchedulerServiceThread::Create( | 70 std::unique_ptr<SchedulerServiceThread> SchedulerServiceThread::Create( |
67 TaskTracker* task_tracker, DelayedTaskManager* delayed_task_manager) { | 71 TaskTracker* task_tracker, DelayedTaskManager* delayed_task_manager) { |
68 std::unique_ptr<SchedulerWorkerThread> worker_thread = | 72 std::unique_ptr<SchedulerWorkerThread> worker_thread = |
69 SchedulerWorkerThread::Create( | 73 SchedulerWorkerThread::Create( |
70 ThreadPriority::NORMAL, | 74 ThreadPriority::NORMAL, |
71 WrapUnique(new ServiceThreadDelegate(delayed_task_manager)), | 75 WrapUnique(new ServiceThreadDelegate(delayed_task_manager)), |
72 task_tracker); | 76 task_tracker, |
| 77 SchedulerWorkerThread::InitialWorkerState::ALIVE); |
73 if (!worker_thread) | 78 if (!worker_thread) |
74 return nullptr; | 79 return nullptr; |
75 | 80 |
76 return WrapUnique(new SchedulerServiceThread(std::move(worker_thread))); | 81 return WrapUnique(new SchedulerServiceThread(std::move(worker_thread))); |
77 } | 82 } |
78 | 83 |
79 void SchedulerServiceThread::WakeUp() { | 84 void SchedulerServiceThread::WakeUp() { |
80 worker_thread_->WakeUp(); | 85 worker_thread_->WakeUp(); |
81 } | 86 } |
82 | 87 |
83 void SchedulerServiceThread::JoinForTesting() { | 88 void SchedulerServiceThread::JoinForTesting() { |
84 worker_thread_->JoinForTesting(); | 89 worker_thread_->JoinForTesting(); |
85 } | 90 } |
86 | 91 |
87 SchedulerServiceThread::SchedulerServiceThread( | 92 SchedulerServiceThread::SchedulerServiceThread( |
88 std::unique_ptr<SchedulerWorkerThread> worker_thread) | 93 std::unique_ptr<SchedulerWorkerThread> worker_thread) |
89 : worker_thread_(std::move(worker_thread)) {} | 94 : worker_thread_(std::move(worker_thread)) {} |
90 | 95 |
91 } // namespace internal | 96 } // namespace internal |
92 } // namespace base | 97 } // namespace base |
OLD | NEW |