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 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 DCHECK(task); | 342 DCHECK(task); |
343 DCHECK(sequence); | 343 DCHECK(sequence); |
344 DCHECK(!worker || ContainsWorker(workers_, worker)); | 344 DCHECK(!worker || ContainsWorker(workers_, worker)); |
345 | 345 |
346 if (!task_tracker_->WillPostTask(task.get())) | 346 if (!task_tracker_->WillPostTask(task.get())) |
347 return false; | 347 return false; |
348 | 348 |
349 if (task->delayed_run_time.is_null()) { | 349 if (task->delayed_run_time.is_null()) { |
350 PostTaskWithSequenceNow(std::move(task), std::move(sequence), worker); | 350 PostTaskWithSequenceNow(std::move(task), std::move(sequence), worker); |
351 } else { | 351 } else { |
352 delayed_task_manager_->AddDelayedTask(std::move(task), std::move(sequence), | 352 delayed_task_manager_->AddDelayedTask( |
353 worker, this); | 353 std::move(task), |
| 354 Bind( |
| 355 [](scoped_refptr<Sequence> sequence, SchedulerWorker* worker, |
| 356 SchedulerWorkerPool* worker_pool, std::unique_ptr<Task> task) { |
| 357 worker_pool->PostTaskWithSequenceNow(std::move(task), |
| 358 std::move(sequence), worker); |
| 359 }, |
| 360 std::move(sequence), Unretained(worker), Unretained(this))); |
354 } | 361 } |
355 | 362 |
356 return true; | 363 return true; |
357 } | 364 } |
358 | 365 |
359 void SchedulerWorkerPoolImpl::PostTaskWithSequenceNow( | 366 void SchedulerWorkerPoolImpl::PostTaskWithSequenceNow( |
360 std::unique_ptr<Task> task, | 367 std::unique_ptr<Task> task, |
361 scoped_refptr<Sequence> sequence, | 368 scoped_refptr<Sequence> sequence, |
362 SchedulerWorker* worker) { | 369 SchedulerWorker* worker) { |
363 DCHECK(task); | 370 DCHECK(task); |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
752 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); | 759 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); |
753 idle_workers_stack_.Remove(worker); | 760 idle_workers_stack_.Remove(worker); |
754 } | 761 } |
755 | 762 |
756 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() { | 763 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() { |
757 return !worker_detachment_disallowed_.IsSet(); | 764 return !worker_detachment_disallowed_.IsSet(); |
758 } | 765 } |
759 | 766 |
760 } // namespace internal | 767 } // namespace internal |
761 } // namespace base | 768 } // namespace base |
OLD | NEW |