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

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: CR robliao #22 (reorder reset) 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 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 std::unique_ptr<SchedulerWorkerPoolImpl> worker_pool(
312 new SchedulerWorkerPoolImpl(params.name(), 312 new SchedulerWorkerPoolImpl(params.name(),
danakj 2016/11/28 22:55:56 fwiw auto & makeunique would be nice here
fdoray 2016/11/29 15:41:20 Done. WrapUnique instead of MakeUnique because the
313 params.io_restriction(),
314 params.suggested_reclaim_time(), 313 params.suggested_reclaim_time(),
315 task_tracker, delayed_task_manager)); 314 task_tracker, delayed_task_manager));
316 if (worker_pool->Initialize( 315 if (worker_pool->Initialize(
317 params.priority_hint(), params.standby_thread_policy(), 316 params.priority_hint(), params.standby_thread_policy(),
318 params.max_threads(), re_enqueue_sequence_callback)) { 317 params.max_threads(), re_enqueue_sequence_callback)) {
319 return worker_pool; 318 return worker_pool;
320 } 319 }
321 return nullptr; 320 return nullptr;
322 } 321 }
323 322
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 } 511 }
513 512
514 PlatformThread::SetName( 513 PlatformThread::SetName(
515 StringPrintf("TaskScheduler%sWorker%d", outer_->name_.c_str(), index_)); 514 StringPrintf("TaskScheduler%sWorker%d", outer_->name_.c_str(), index_));
516 515
517 DCHECK(!tls_current_worker_pool.Get().Get()); 516 DCHECK(!tls_current_worker_pool.Get().Get());
518 tls_current_worker_pool.Get().Set(outer_); 517 tls_current_worker_pool.Get().Set(outer_);
519 518
520 // New threads haven't run GetWork() yet, so reset the |idle_start_time_|. 519 // New threads haven't run GetWork() yet, so reset the |idle_start_time_|.
521 idle_start_time_ = TimeTicks(); 520 idle_start_time_ = TimeTicks();
522
523 ThreadRestrictions::SetIOAllowed(
524 outer_->io_restriction_ ==
525 SchedulerWorkerPoolParams::IORestriction::ALLOWED);
526 } 521 }
527 522
528 scoped_refptr<Sequence> 523 scoped_refptr<Sequence>
529 SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::GetWork( 524 SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::GetWork(
530 SchedulerWorker* worker) { 525 SchedulerWorker* worker) {
531 DCHECK(ContainsWorker(outer_->workers_, worker)); 526 DCHECK(ContainsWorker(outer_->workers_, worker));
532 527
533 // Record the TaskScheduler.NumTasksBetweenWaits histogram if the 528 // Record the TaskScheduler.NumTasksBetweenWaits histogram if the
534 // SchedulerWorker waited on its WaitableEvent since the last GetWork(). 529 // SchedulerWorker waited on its WaitableEvent since the last GetWork().
535 // 530 //
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 void SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::OnDetach() { 664 void SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::OnDetach() {
670 DCHECK(!did_detach_since_last_get_work_); 665 DCHECK(!did_detach_since_last_get_work_);
671 outer_->num_tasks_before_detach_histogram_->Add(num_tasks_since_last_detach_); 666 outer_->num_tasks_before_detach_histogram_->Add(num_tasks_since_last_detach_);
672 num_tasks_since_last_detach_ = 0; 667 num_tasks_since_last_detach_ = 0;
673 did_detach_since_last_get_work_ = true; 668 did_detach_since_last_get_work_ = true;
674 last_detach_time_ = TimeTicks::Now(); 669 last_detach_time_ = TimeTicks::Now();
675 } 670 }
676 671
677 SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl( 672 SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl(
678 StringPiece name, 673 StringPiece name,
679 SchedulerWorkerPoolParams::IORestriction io_restriction,
680 const TimeDelta& suggested_reclaim_time, 674 const TimeDelta& suggested_reclaim_time,
681 TaskTracker* task_tracker, 675 TaskTracker* task_tracker,
682 DelayedTaskManager* delayed_task_manager) 676 DelayedTaskManager* delayed_task_manager)
683 : name_(name.as_string()), 677 : name_(name.as_string()),
684 io_restriction_(io_restriction),
685 suggested_reclaim_time_(suggested_reclaim_time), 678 suggested_reclaim_time_(suggested_reclaim_time),
686 idle_workers_stack_lock_(shared_priority_queue_.container_lock()), 679 idle_workers_stack_lock_(shared_priority_queue_.container_lock()),
687 idle_workers_stack_cv_for_testing_( 680 idle_workers_stack_cv_for_testing_(
688 idle_workers_stack_lock_.CreateConditionVariable()), 681 idle_workers_stack_lock_.CreateConditionVariable()),
689 join_for_testing_returned_(WaitableEvent::ResetPolicy::MANUAL, 682 join_for_testing_returned_(WaitableEvent::ResetPolicy::MANUAL,
690 WaitableEvent::InitialState::NOT_SIGNALED), 683 WaitableEvent::InitialState::NOT_SIGNALED),
691 #if DCHECK_IS_ON() 684 #if DCHECK_IS_ON()
692 workers_created_(WaitableEvent::ResetPolicy::MANUAL, 685 workers_created_(WaitableEvent::ResetPolicy::MANUAL,
693 WaitableEvent::InitialState::NOT_SIGNALED), 686 WaitableEvent::InitialState::NOT_SIGNALED),
694 #endif 687 #endif
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); 800 AutoSchedulerLock auto_lock(idle_workers_stack_lock_);
808 idle_workers_stack_.Remove(worker); 801 idle_workers_stack_.Remove(worker);
809 } 802 }
810 803
811 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() { 804 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() {
812 return !worker_detachment_disallowed_.IsSet(); 805 return !worker_detachment_disallowed_.IsSet();
813 } 806 }
814 807
815 } // namespace internal 808 } // namespace internal
816 } // namespace base 809 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698