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