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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 : traits_(traits), worker_pool_(worker_pool) { | 54 : traits_(traits), worker_pool_(worker_pool) { |
55 DCHECK(worker_pool_); | 55 DCHECK(worker_pool_); |
56 } | 56 } |
57 | 57 |
58 // TaskRunner: | 58 // TaskRunner: |
59 bool PostDelayedTask(const tracked_objects::Location& from_here, | 59 bool PostDelayedTask(const tracked_objects::Location& from_here, |
60 const Closure& closure, | 60 const Closure& closure, |
61 TimeDelta delay) override { | 61 TimeDelta delay) override { |
62 // Post the task as part of a one-off single-task Sequence. | 62 // Post the task as part of a one-off single-task Sequence. |
63 return worker_pool_->PostTaskWithSequence( | 63 return worker_pool_->PostTaskWithSequence( |
64 WrapUnique(new Task(from_here, closure, traits_, delay)), | 64 MakeUnique<Task>(from_here, closure, traits_, delay), |
65 make_scoped_refptr(new Sequence), nullptr); | 65 make_scoped_refptr(new Sequence), nullptr); |
66 } | 66 } |
67 | 67 |
68 bool RunsTasksOnCurrentThread() const override { | 68 bool RunsTasksOnCurrentThread() const override { |
69 return tls_current_worker_pool.Get().Get() == worker_pool_; | 69 return tls_current_worker_pool.Get().Get() == worker_pool_; |
70 } | 70 } |
71 | 71 |
72 private: | 72 private: |
73 ~SchedulerParallelTaskRunner() override = default; | 73 ~SchedulerParallelTaskRunner() override = default; |
74 | 74 |
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
636 bool SchedulerWorkerPoolImpl::Initialize( | 636 bool SchedulerWorkerPoolImpl::Initialize( |
637 ThreadPriority priority_hint, | 637 ThreadPriority priority_hint, |
638 size_t max_threads, | 638 size_t max_threads, |
639 const ReEnqueueSequenceCallback& re_enqueue_sequence_callback) { | 639 const ReEnqueueSequenceCallback& re_enqueue_sequence_callback) { |
640 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); | 640 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); |
641 | 641 |
642 DCHECK(workers_.empty()); | 642 DCHECK(workers_.empty()); |
643 | 643 |
644 for (size_t i = 0; i < max_threads; ++i) { | 644 for (size_t i = 0; i < max_threads; ++i) { |
645 std::unique_ptr<SchedulerWorker> worker = SchedulerWorker::Create( | 645 std::unique_ptr<SchedulerWorker> worker = SchedulerWorker::Create( |
646 priority_hint, WrapUnique(new SchedulerWorkerDelegateImpl( | 646 priority_hint, MakeUnique<SchedulerWorkerDelegateImpl>( |
647 this, re_enqueue_sequence_callback, | 647 this, re_enqueue_sequence_callback, |
648 &shared_priority_queue_, static_cast<int>(i))), | 648 &shared_priority_queue_, static_cast<int>(i)), |
649 task_tracker_, i == 0 ? SchedulerWorker::InitialState::ALIVE | 649 task_tracker_, i == 0 ? SchedulerWorker::InitialState::ALIVE |
650 : SchedulerWorker::InitialState::DETACHED); | 650 : SchedulerWorker::InitialState::DETACHED); |
651 if (!worker) | 651 if (!worker) |
652 break; | 652 break; |
653 idle_workers_stack_.Push(worker.get()); | 653 idle_workers_stack_.Push(worker.get()); |
654 workers_.push_back(std::move(worker)); | 654 workers_.push_back(std::move(worker)); |
655 } | 655 } |
656 | 656 |
657 #if DCHECK_IS_ON() | 657 #if DCHECK_IS_ON() |
658 workers_created_.Signal(); | 658 workers_created_.Signal(); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
697 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); | 697 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); |
698 idle_workers_stack_.Remove(worker); | 698 idle_workers_stack_.Remove(worker); |
699 } | 699 } |
700 | 700 |
701 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() { | 701 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() { |
702 return !worker_detachment_disallowed_.IsSet(); | 702 return !worker_detachment_disallowed_.IsSet(); |
703 } | 703 } |
704 | 704 |
705 } // namespace internal | 705 } // namespace internal |
706 } // namespace base | 706 } // namespace base |
OLD | NEW |