| 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 292 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  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(), | 
|  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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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 | 
| OLD | NEW |