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