Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Side by Side Diff: base/task_scheduler/scheduler_worker_pool_impl.cc

Issue 2044023003: Virtualize The Existence of a Scheduler Worker Thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@detach
Patch Set: Apply Renames Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 194
195 PriorityQueue* single_threaded_priority_queue() { 195 PriorityQueue* single_threaded_priority_queue() {
196 return &single_threaded_priority_queue_; 196 return &single_threaded_priority_queue_;
197 } 197 }
198 198
199 // SchedulerWorker::Delegate: 199 // SchedulerWorker::Delegate:
200 void OnMainEntry(SchedulerWorker* worker) override; 200 void OnMainEntry(SchedulerWorker* worker) override;
201 scoped_refptr<Sequence> GetWork(SchedulerWorker* worker) override; 201 scoped_refptr<Sequence> GetWork(SchedulerWorker* worker) override;
202 void ReEnqueueSequence(scoped_refptr<Sequence> sequence) override; 202 void ReEnqueueSequence(scoped_refptr<Sequence> sequence) override;
203 TimeDelta GetSleepTimeout() override; 203 TimeDelta GetSleepTimeout() override;
204 bool CanDetach(SchedulerWorker* worker) override;
204 205
205 private: 206 private:
206 SchedulerWorkerPoolImpl* outer_; 207 SchedulerWorkerPoolImpl* outer_;
207 const ReEnqueueSequenceCallback re_enqueue_sequence_callback_; 208 const ReEnqueueSequenceCallback re_enqueue_sequence_callback_;
208 209
209 // Single-threaded PriorityQueue for the worker. 210 // Single-threaded PriorityQueue for the worker.
210 PriorityQueue single_threaded_priority_queue_; 211 PriorityQueue single_threaded_priority_queue_;
211 212
212 // True if the last Sequence returned by GetWork() was extracted from 213 // True if the last Sequence returned by GetWork() was extracted from
213 // |single_threaded_priority_queue_|. 214 // |single_threaded_priority_queue_|.
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 // |sequence| must be enqueued. 472 // |sequence| must be enqueued.
472 re_enqueue_sequence_callback_.Run(std::move(sequence)); 473 re_enqueue_sequence_callback_.Run(std::move(sequence));
473 } 474 }
474 } 475 }
475 476
476 TimeDelta SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl:: 477 TimeDelta SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::
477 GetSleepTimeout() { 478 GetSleepTimeout() {
478 return TimeDelta::Max(); 479 return TimeDelta::Max();
479 } 480 }
480 481
482 bool SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::CanDetach(
483 SchedulerWorker* worker) {
484 return false;
485 }
486
481 SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl( 487 SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl(
482 StringPiece name, 488 StringPiece name,
483 IORestriction io_restriction, 489 IORestriction io_restriction,
484 TaskTracker* task_tracker, 490 TaskTracker* task_tracker,
485 DelayedTaskManager* delayed_task_manager) 491 DelayedTaskManager* delayed_task_manager)
486 : name_(name.as_string()), 492 : name_(name.as_string()),
487 io_restriction_(io_restriction), 493 io_restriction_(io_restriction),
488 idle_workers_stack_lock_(shared_priority_queue_.container_lock()), 494 idle_workers_stack_lock_(shared_priority_queue_.container_lock()),
489 idle_workers_stack_cv_for_testing_( 495 idle_workers_stack_cv_for_testing_(
490 idle_workers_stack_lock_.CreateConditionVariable()), 496 idle_workers_stack_lock_.CreateConditionVariable()),
(...skipping 16 matching lines...) Expand all
507 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); 513 AutoSchedulerLock auto_lock(idle_workers_stack_lock_);
508 514
509 DCHECK(workers_.empty()); 515 DCHECK(workers_.empty());
510 516
511 for (size_t i = 0; i < max_threads; ++i) { 517 for (size_t i = 0; i < max_threads; ++i) {
512 std::unique_ptr<SchedulerWorker> worker = 518 std::unique_ptr<SchedulerWorker> worker =
513 SchedulerWorker::Create( 519 SchedulerWorker::Create(
514 thread_priority, WrapUnique(new SchedulerWorkerDelegateImpl( 520 thread_priority, WrapUnique(new SchedulerWorkerDelegateImpl(
515 this, re_enqueue_sequence_callback, 521 this, re_enqueue_sequence_callback,
516 &shared_priority_queue_, static_cast<int>(i))), 522 &shared_priority_queue_, static_cast<int>(i))),
517 task_tracker_); 523 task_tracker_,
524 SchedulerWorker::InitialState::ALIVE);
518 if (!worker) 525 if (!worker)
519 break; 526 break;
520 idle_workers_stack_.Push(worker.get()); 527 idle_workers_stack_.Push(worker.get());
521 workers_.push_back(std::move(worker)); 528 workers_.push_back(std::move(worker));
522 } 529 }
523 530
524 #if DCHECK_IS_ON() 531 #if DCHECK_IS_ON()
525 workers_created_.Signal(); 532 workers_created_.Signal();
526 #endif 533 #endif
527 534
(...skipping 21 matching lines...) Expand all
549 } 556 }
550 557
551 void SchedulerWorkerPoolImpl::RemoveFromIdleWorkersStack( 558 void SchedulerWorkerPoolImpl::RemoveFromIdleWorkersStack(
552 SchedulerWorker* worker) { 559 SchedulerWorker* worker) {
553 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); 560 AutoSchedulerLock auto_lock(idle_workers_stack_lock_);
554 idle_workers_stack_.Remove(worker); 561 idle_workers_stack_.Remove(worker);
555 } 562 }
556 563
557 } // namespace internal 564 } // namespace internal
558 } // namespace base 565 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698