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_worker_pool_impl.h" | 5 #include "base/task_scheduler/scheduler_worker_pool_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <utility> | 10 #include <utility> |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 : traits_(traits), worker_pool_(worker_pool) { | 52 : traits_(traits), worker_pool_(worker_pool) { |
53 DCHECK(worker_pool_); | 53 DCHECK(worker_pool_); |
54 } | 54 } |
55 | 55 |
56 // TaskRunner: | 56 // TaskRunner: |
57 bool PostDelayedTask(const tracked_objects::Location& from_here, | 57 bool PostDelayedTask(const tracked_objects::Location& from_here, |
58 const Closure& closure, | 58 const Closure& closure, |
59 TimeDelta delay) override { | 59 TimeDelta delay) override { |
60 // Post the task as part of a one-off single-task Sequence. | 60 // Post the task as part of a one-off single-task Sequence. |
61 return worker_pool_->PostTaskWithSequence( | 61 return worker_pool_->PostTaskWithSequence( |
62 WrapUnique(new Task(from_here, closure, traits_, delay)), | 62 MakeUnique<Task>(from_here, closure, traits_, delay), |
63 make_scoped_refptr(new Sequence), nullptr); | 63 make_scoped_refptr(new Sequence), nullptr); |
64 } | 64 } |
65 | 65 |
66 bool RunsTasksOnCurrentThread() const override { | 66 bool RunsTasksOnCurrentThread() const override { |
67 return tls_current_worker_pool.Get().Get() == worker_pool_; | 67 return tls_current_worker_pool.Get().Get() == worker_pool_; |
68 } | 68 } |
69 | 69 |
70 private: | 70 private: |
71 ~SchedulerParallelTaskRunner() override = default; | 71 ~SchedulerParallelTaskRunner() override = default; |
72 | 72 |
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
588 bool SchedulerWorkerPoolImpl::Initialize( | 588 bool SchedulerWorkerPoolImpl::Initialize( |
589 ThreadPriority priority_hint, | 589 ThreadPriority priority_hint, |
590 size_t max_threads, | 590 size_t max_threads, |
591 const ReEnqueueSequenceCallback& re_enqueue_sequence_callback) { | 591 const ReEnqueueSequenceCallback& re_enqueue_sequence_callback) { |
592 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); | 592 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); |
593 | 593 |
594 DCHECK(workers_.empty()); | 594 DCHECK(workers_.empty()); |
595 | 595 |
596 for (size_t i = 0; i < max_threads; ++i) { | 596 for (size_t i = 0; i < max_threads; ++i) { |
597 std::unique_ptr<SchedulerWorker> worker = SchedulerWorker::Create( | 597 std::unique_ptr<SchedulerWorker> worker = SchedulerWorker::Create( |
598 priority_hint, WrapUnique(new SchedulerWorkerDelegateImpl( | 598 priority_hint, MakeUnique<SchedulerWorkerDelegateImpl>( |
599 this, re_enqueue_sequence_callback, | 599 this, re_enqueue_sequence_callback, |
600 &shared_priority_queue_, static_cast<int>(i))), | 600 &shared_priority_queue_, static_cast<int>(i)), |
601 task_tracker_, i == 0 ? SchedulerWorker::InitialState::ALIVE | 601 task_tracker_, i == 0 ? SchedulerWorker::InitialState::ALIVE |
602 : SchedulerWorker::InitialState::DETACHED); | 602 : SchedulerWorker::InitialState::DETACHED); |
603 if (!worker) | 603 if (!worker) |
604 break; | 604 break; |
605 idle_workers_stack_.Push(worker.get()); | 605 idle_workers_stack_.Push(worker.get()); |
606 workers_.push_back(std::move(worker)); | 606 workers_.push_back(std::move(worker)); |
607 } | 607 } |
608 | 608 |
609 #if DCHECK_IS_ON() | 609 #if DCHECK_IS_ON() |
610 workers_created_.Signal(); | 610 workers_created_.Signal(); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); | 649 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); |
650 idle_workers_stack_.Remove(worker); | 650 idle_workers_stack_.Remove(worker); |
651 } | 651 } |
652 | 652 |
653 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() { | 653 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() { |
654 return !worker_detachment_disallowed_.IsSet(); | 654 return !worker_detachment_disallowed_.IsSet(); |
655 } | 655 } |
656 | 656 |
657 } // namespace internal | 657 } // namespace internal |
658 } // namespace base | 658 } // namespace base |
OLD | NEW |