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

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

Issue 2531883002: TaskScheduler: Set the IO allowed bit in TaskTracker::RunTask(). (Closed)
Patch Set: rebase Created 4 years 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 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 // initialization failed. 301 // initialization failed.
302 DCHECK(join_for_testing_returned_.IsSignaled() || workers_.empty()); 302 DCHECK(join_for_testing_returned_.IsSignaled() || workers_.empty());
303 } 303 }
304 304
305 // static 305 // static
306 std::unique_ptr<SchedulerWorkerPoolImpl> SchedulerWorkerPoolImpl::Create( 306 std::unique_ptr<SchedulerWorkerPoolImpl> SchedulerWorkerPoolImpl::Create(
307 const SchedulerWorkerPoolParams& params, 307 const SchedulerWorkerPoolParams& params,
308 const ReEnqueueSequenceCallback& re_enqueue_sequence_callback, 308 const ReEnqueueSequenceCallback& re_enqueue_sequence_callback,
309 TaskTracker* task_tracker, 309 TaskTracker* task_tracker,
310 DelayedTaskManager* delayed_task_manager) { 310 DelayedTaskManager* delayed_task_manager) {
311 std::unique_ptr<SchedulerWorkerPoolImpl> worker_pool( 311 auto worker_pool = WrapUnique(new SchedulerWorkerPoolImpl(
312 new SchedulerWorkerPoolImpl(params.name(), 312 params.name(), params.suggested_reclaim_time(), task_tracker,
313 params.io_restriction(), 313 delayed_task_manager));
314 params.suggested_reclaim_time(),
315 task_tracker, delayed_task_manager));
316 if (worker_pool->Initialize( 314 if (worker_pool->Initialize(
317 params.priority_hint(), params.standby_thread_policy(), 315 params.priority_hint(), params.standby_thread_policy(),
318 params.max_threads(), re_enqueue_sequence_callback)) { 316 params.max_threads(), re_enqueue_sequence_callback)) {
319 return worker_pool; 317 return worker_pool;
320 } 318 }
321 return nullptr; 319 return nullptr;
322 } 320 }
323 321
324 scoped_refptr<TaskRunner> SchedulerWorkerPoolImpl::CreateTaskRunnerWithTraits( 322 scoped_refptr<TaskRunner> SchedulerWorkerPoolImpl::CreateTaskRunnerWithTraits(
325 const TaskTraits& traits) { 323 const TaskTraits& traits) {
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 } 510 }
513 511
514 PlatformThread::SetName( 512 PlatformThread::SetName(
515 StringPrintf("TaskScheduler%sWorker%d", outer_->name_.c_str(), index_)); 513 StringPrintf("TaskScheduler%sWorker%d", outer_->name_.c_str(), index_));
516 514
517 DCHECK(!tls_current_worker_pool.Get().Get()); 515 DCHECK(!tls_current_worker_pool.Get().Get());
518 tls_current_worker_pool.Get().Set(outer_); 516 tls_current_worker_pool.Get().Set(outer_);
519 517
520 // New threads haven't run GetWork() yet, so reset the |idle_start_time_|. 518 // New threads haven't run GetWork() yet, so reset the |idle_start_time_|.
521 idle_start_time_ = TimeTicks(); 519 idle_start_time_ = TimeTicks();
522
523 ThreadRestrictions::SetIOAllowed(
524 outer_->io_restriction_ ==
525 SchedulerWorkerPoolParams::IORestriction::ALLOWED);
526 } 520 }
527 521
528 scoped_refptr<Sequence> 522 scoped_refptr<Sequence>
529 SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::GetWork( 523 SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::GetWork(
530 SchedulerWorker* worker) { 524 SchedulerWorker* worker) {
531 DCHECK(ContainsWorker(outer_->workers_, worker)); 525 DCHECK(ContainsWorker(outer_->workers_, worker));
532 526
533 // Record the TaskScheduler.NumTasksBetweenWaits histogram if the 527 // Record the TaskScheduler.NumTasksBetweenWaits histogram if the
534 // SchedulerWorker waited on its WaitableEvent since the last GetWork(). 528 // SchedulerWorker waited on its WaitableEvent since the last GetWork().
535 // 529 //
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 void SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::OnDetach() { 663 void SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::OnDetach() {
670 DCHECK(!did_detach_since_last_get_work_); 664 DCHECK(!did_detach_since_last_get_work_);
671 outer_->num_tasks_before_detach_histogram_->Add(num_tasks_since_last_detach_); 665 outer_->num_tasks_before_detach_histogram_->Add(num_tasks_since_last_detach_);
672 num_tasks_since_last_detach_ = 0; 666 num_tasks_since_last_detach_ = 0;
673 did_detach_since_last_get_work_ = true; 667 did_detach_since_last_get_work_ = true;
674 last_detach_time_ = TimeTicks::Now(); 668 last_detach_time_ = TimeTicks::Now();
675 } 669 }
676 670
677 SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl( 671 SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl(
678 StringPiece name, 672 StringPiece name,
679 SchedulerWorkerPoolParams::IORestriction io_restriction,
680 const TimeDelta& suggested_reclaim_time, 673 const TimeDelta& suggested_reclaim_time,
681 TaskTracker* task_tracker, 674 TaskTracker* task_tracker,
682 DelayedTaskManager* delayed_task_manager) 675 DelayedTaskManager* delayed_task_manager)
683 : name_(name.as_string()), 676 : name_(name.as_string()),
684 io_restriction_(io_restriction),
685 suggested_reclaim_time_(suggested_reclaim_time), 677 suggested_reclaim_time_(suggested_reclaim_time),
686 idle_workers_stack_lock_(shared_priority_queue_.container_lock()), 678 idle_workers_stack_lock_(shared_priority_queue_.container_lock()),
687 idle_workers_stack_cv_for_testing_( 679 idle_workers_stack_cv_for_testing_(
688 idle_workers_stack_lock_.CreateConditionVariable()), 680 idle_workers_stack_lock_.CreateConditionVariable()),
689 join_for_testing_returned_(WaitableEvent::ResetPolicy::MANUAL, 681 join_for_testing_returned_(WaitableEvent::ResetPolicy::MANUAL,
690 WaitableEvent::InitialState::NOT_SIGNALED), 682 WaitableEvent::InitialState::NOT_SIGNALED),
691 #if DCHECK_IS_ON() 683 #if DCHECK_IS_ON()
692 workers_created_(WaitableEvent::ResetPolicy::MANUAL, 684 workers_created_(WaitableEvent::ResetPolicy::MANUAL,
693 WaitableEvent::InitialState::NOT_SIGNALED), 685 WaitableEvent::InitialState::NOT_SIGNALED),
694 #endif 686 #endif
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); 799 AutoSchedulerLock auto_lock(idle_workers_stack_lock_);
808 idle_workers_stack_.Remove(worker); 800 idle_workers_stack_.Remove(worker);
809 } 801 }
810 802
811 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() { 803 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() {
812 return !worker_detachment_disallowed_.IsSet(); 804 return !worker_detachment_disallowed_.IsSet();
813 } 805 }
814 806
815 } // namespace internal 807 } // namespace internal
816 } // namespace base 808 } // namespace base
OLDNEW
« no previous file with comments | « base/task_scheduler/scheduler_worker_pool_impl.h ('k') | base/task_scheduler/scheduler_worker_pool_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698