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

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

Issue 2611753004: Change const TimeDelta& to TimeDelta in base/task_scheduler/. (Closed)
Patch Set: Created 3 years, 11 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>
11 11
12 #include "base/atomicops.h" 12 #include "base/atomicops.h"
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/bind_helpers.h" 14 #include "base/bind_helpers.h"
15 #include "base/lazy_instance.h" 15 #include "base/lazy_instance.h"
16 #include "base/memory/ptr_util.h" 16 #include "base/memory/ptr_util.h"
17 #include "base/metrics/histogram.h" 17 #include "base/metrics/histogram.h"
18 #include "base/sequence_token.h" 18 #include "base/sequence_token.h"
19 #include "base/sequenced_task_runner.h" 19 #include "base/sequenced_task_runner.h"
20 #include "base/single_thread_task_runner.h" 20 #include "base/single_thread_task_runner.h"
21 #include "base/strings/stringprintf.h" 21 #include "base/strings/stringprintf.h"
22 #include "base/task_runner.h" 22 #include "base/task_runner.h"
23 #include "base/task_scheduler/delayed_task_manager.h" 23 #include "base/task_scheduler/delayed_task_manager.h"
24 #include "base/task_scheduler/task_tracker.h" 24 #include "base/task_scheduler/task_tracker.h"
25 #include "base/threading/platform_thread.h" 25 #include "base/threading/platform_thread.h"
26 #include "base/threading/thread_local.h" 26 #include "base/threading/thread_local.h"
27 #include "base/threading/thread_restrictions.h" 27 #include "base/threading/thread_restrictions.h"
28 #include "base/time/time.h"
29 28
30 namespace base { 29 namespace base {
31 namespace internal { 30 namespace internal {
32 31
33 namespace { 32 namespace {
34 33
35 constexpr char kPoolNameSuffix[] = "Pool"; 34 constexpr char kPoolNameSuffix[] = "Pool";
36 constexpr char kDetachDurationHistogramPrefix[] = 35 constexpr char kDetachDurationHistogramPrefix[] =
37 "TaskScheduler.DetachDuration."; 36 "TaskScheduler.DetachDuration.";
38 constexpr char kNumTasksBeforeDetachHistogramPrefix[] = 37 constexpr char kNumTasksBeforeDetachHistogramPrefix[] =
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 ~SchedulerWorkerDelegateImpl() override; 232 ~SchedulerWorkerDelegateImpl() override;
234 233
235 PriorityQueue* single_threaded_priority_queue() { 234 PriorityQueue* single_threaded_priority_queue() {
236 return &single_threaded_priority_queue_; 235 return &single_threaded_priority_queue_;
237 } 236 }
238 237
239 // SchedulerWorker::Delegate: 238 // SchedulerWorker::Delegate:
240 void OnMainEntry(SchedulerWorker* worker) override; 239 void OnMainEntry(SchedulerWorker* worker) override;
241 scoped_refptr<Sequence> GetWork(SchedulerWorker* worker) override; 240 scoped_refptr<Sequence> GetWork(SchedulerWorker* worker) override;
242 void DidRunTaskWithPriority(TaskPriority task_priority, 241 void DidRunTaskWithPriority(TaskPriority task_priority,
243 const TimeDelta& task_latency) override; 242 TimeDelta task_latency) override;
244 void ReEnqueueSequence(scoped_refptr<Sequence> sequence) override; 243 void ReEnqueueSequence(scoped_refptr<Sequence> sequence) override;
245 TimeDelta GetSleepTimeout() override; 244 TimeDelta GetSleepTimeout() override;
246 bool CanDetach(SchedulerWorker* worker) override; 245 bool CanDetach(SchedulerWorker* worker) override;
247 void OnDetach() override; 246 void OnDetach() override;
248 247
249 void RegisterSingleThreadTaskRunner() { 248 void RegisterSingleThreadTaskRunner() {
250 // No barrier as barriers only affect sequential consistency which is 249 // No barrier as barriers only affect sequential consistency which is
251 // irrelevant in a single variable use case (they don't force an immediate 250 // irrelevant in a single variable use case (they don't force an immediate
252 // flush anymore than atomics do by default). 251 // flush anymore than atomics do by default).
253 subtle::NoBarrier_AtomicIncrement(&num_single_threaded_runners_, 1); 252 subtle::NoBarrier_AtomicIncrement(&num_single_threaded_runners_, 1);
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 593
595 outer_->RemoveFromIdleWorkersStack(worker); 594 outer_->RemoveFromIdleWorkersStack(worker);
596 idle_start_time_ = TimeTicks(); 595 idle_start_time_ = TimeTicks();
597 did_detach_since_last_get_work_ = false; 596 did_detach_since_last_get_work_ = false;
598 last_get_work_returned_nullptr_ = false; 597 last_get_work_returned_nullptr_ = false;
599 598
600 return sequence; 599 return sequence;
601 } 600 }
602 601
603 void SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl:: 602 void SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::
604 DidRunTaskWithPriority(TaskPriority task_priority, 603 DidRunTaskWithPriority(TaskPriority task_priority, TimeDelta task_latency) {
605 const TimeDelta& task_latency) {
606 ++num_tasks_since_last_wait_; 604 ++num_tasks_since_last_wait_;
607 ++num_tasks_since_last_detach_; 605 ++num_tasks_since_last_detach_;
608 606
609 const int priority_index = static_cast<int>(task_priority); 607 const int priority_index = static_cast<int>(task_priority);
610 608
611 // As explained in the header file, histograms are allocated on demand. It 609 // As explained in the header file, histograms are allocated on demand. It
612 // doesn't matter if an element of |task_latency_histograms_| is set multiple 610 // doesn't matter if an element of |task_latency_histograms_| is set multiple
613 // times since GetTaskLatencyHistogram() is idempotent. As explained in the 611 // times since GetTaskLatencyHistogram() is idempotent. As explained in the
614 // comment at the top of histogram_macros.h, barriers are required. 612 // comment at the top of histogram_macros.h, barriers are required.
615 HistogramBase* task_latency_histogram = reinterpret_cast<HistogramBase*>( 613 HistogramBase* task_latency_histogram = reinterpret_cast<HistogramBase*>(
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 void SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::OnDetach() { 661 void SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::OnDetach() {
664 DCHECK(!did_detach_since_last_get_work_); 662 DCHECK(!did_detach_since_last_get_work_);
665 outer_->num_tasks_before_detach_histogram_->Add(num_tasks_since_last_detach_); 663 outer_->num_tasks_before_detach_histogram_->Add(num_tasks_since_last_detach_);
666 num_tasks_since_last_detach_ = 0; 664 num_tasks_since_last_detach_ = 0;
667 did_detach_since_last_get_work_ = true; 665 did_detach_since_last_get_work_ = true;
668 last_detach_time_ = TimeTicks::Now(); 666 last_detach_time_ = TimeTicks::Now();
669 } 667 }
670 668
671 SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl( 669 SchedulerWorkerPoolImpl::SchedulerWorkerPoolImpl(
672 StringPiece name, 670 StringPiece name,
673 const TimeDelta& suggested_reclaim_time, 671 TimeDelta suggested_reclaim_time,
674 TaskTracker* task_tracker, 672 TaskTracker* task_tracker,
675 DelayedTaskManager* delayed_task_manager) 673 DelayedTaskManager* delayed_task_manager)
676 : name_(name.as_string()), 674 : name_(name.as_string()),
677 suggested_reclaim_time_(suggested_reclaim_time), 675 suggested_reclaim_time_(suggested_reclaim_time),
678 idle_workers_stack_lock_(shared_priority_queue_.container_lock()), 676 idle_workers_stack_lock_(shared_priority_queue_.container_lock()),
679 idle_workers_stack_cv_for_testing_( 677 idle_workers_stack_cv_for_testing_(
680 idle_workers_stack_lock_.CreateConditionVariable()), 678 idle_workers_stack_lock_.CreateConditionVariable()),
681 join_for_testing_returned_(WaitableEvent::ResetPolicy::MANUAL, 679 join_for_testing_returned_(WaitableEvent::ResetPolicy::MANUAL,
682 WaitableEvent::InitialState::NOT_SIGNALED), 680 WaitableEvent::InitialState::NOT_SIGNALED),
683 #if DCHECK_IS_ON() 681 #if DCHECK_IS_ON()
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 AutoSchedulerLock auto_lock(idle_workers_stack_lock_); 797 AutoSchedulerLock auto_lock(idle_workers_stack_lock_);
800 idle_workers_stack_.Remove(worker); 798 idle_workers_stack_.Remove(worker);
801 } 799 }
802 800
803 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() { 801 bool SchedulerWorkerPoolImpl::CanWorkerDetachForTesting() {
804 return !worker_detachment_disallowed_.IsSet(); 802 return !worker_detachment_disallowed_.IsSet();
805 } 803 }
806 804
807 } // namespace internal 805 } // namespace internal
808 } // namespace base 806 } // 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