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

Side by Side Diff: components/scheduler/base/task_queue_manager.cc

Issue 1468443002: Reduce the number of delayed tasks on chromium run loop (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Weak pointer Created 5 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "components/scheduler/base/task_queue_manager.h" 5 #include "components/scheduler/base/task_queue_manager.h"
6 6
7 #include <queue> 7 #include <queue>
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 25 matching lines...) Expand all
36 DCHECK(delegate->RunsTasksOnCurrentThread()); 36 DCHECK(delegate->RunsTasksOnCurrentThread());
37 TRACE_EVENT_OBJECT_CREATED_WITH_ID(disabled_by_default_tracing_category, 37 TRACE_EVENT_OBJECT_CREATED_WITH_ID(disabled_by_default_tracing_category,
38 "TaskQueueManager", this); 38 "TaskQueueManager", this);
39 selector_.SetTaskQueueSelectorObserver(this); 39 selector_.SetTaskQueueSelectorObserver(this);
40 40
41 decrement_pending_and_do_work_closure_ = 41 decrement_pending_and_do_work_closure_ =
42 base::Bind(&TaskQueueManager::DoWork, weak_factory_.GetWeakPtr(), true); 42 base::Bind(&TaskQueueManager::DoWork, weak_factory_.GetWeakPtr(), true);
43 do_work_closure_ = 43 do_work_closure_ =
44 base::Bind(&TaskQueueManager::DoWork, weak_factory_.GetWeakPtr(), false); 44 base::Bind(&TaskQueueManager::DoWork, weak_factory_.GetWeakPtr(), false);
45 45
46 real_time_domain_ = 46 // TODO(alexclarke): Change this to be a parameter that's passed in.
47 make_scoped_refptr(new RealTimeDomain(delegate.get(), do_work_closure_)); 47 real_time_domain_ = make_scoped_refptr(new RealTimeDomain());
48 RegisterTimeDomain(real_time_domain_); 48 RegisterTimeDomain(real_time_domain_);
49 } 49 }
50 50
51 TaskQueueManager::~TaskQueueManager() { 51 TaskQueueManager::~TaskQueueManager() {
52 TRACE_EVENT_OBJECT_DELETED_WITH_ID(disabled_by_default_tracing_category_, 52 TRACE_EVENT_OBJECT_DELETED_WITH_ID(disabled_by_default_tracing_category_,
53 "TaskQueueManager", this); 53 "TaskQueueManager", this);
54 54
55 while (!queues_.empty()) 55 while (!queues_.empty())
56 (*queues_.begin())->UnregisterTaskQueue(); 56 (*queues_.begin())->UnregisterTaskQueue();
57 57
58 selector_.SetTaskQueueSelectorObserver(nullptr); 58 selector_.SetTaskQueueSelectorObserver(nullptr);
59 } 59 }
60 60
61 void TaskQueueManager::RegisterTimeDomain( 61 void TaskQueueManager::RegisterTimeDomain(
62 const scoped_refptr<TimeDomain>& time_domain) { 62 const scoped_refptr<TimeDomain>& time_domain) {
63 time_domains_.insert(time_domain); 63 time_domains_.insert(time_domain);
64 time_domain->OnRegisterWithTaskQueueManager(delegate_.get(),
65 do_work_closure_);
64 } 66 }
65 67
66 void TaskQueueManager::UnregisterTimeDomain( 68 void TaskQueueManager::UnregisterTimeDomain(
67 const scoped_refptr<TimeDomain>& time_domain) { 69 const scoped_refptr<TimeDomain>& time_domain) {
68 time_domains_.erase(time_domain); 70 time_domains_.erase(time_domain);
69 } 71 }
70 72
71 scoped_refptr<internal::TaskQueueImpl> TaskQueueManager::NewTaskQueue( 73 scoped_refptr<internal::TaskQueueImpl> TaskQueueManager::NewTaskQueue(
72 const TaskQueue::Spec& spec) { 74 const TaskQueue::Spec& spec) {
73 TRACE_EVENT1(tracing_category_, 75 TRACE_EVENT1(tracing_category_,
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 } 318 }
317 319
318 void TaskQueueManager::OnTaskQueueEnabled(internal::TaskQueueImpl* queue) { 320 void TaskQueueManager::OnTaskQueueEnabled(internal::TaskQueueImpl* queue) {
319 DCHECK(main_thread_checker_.CalledOnValidThread()); 321 DCHECK(main_thread_checker_.CalledOnValidThread());
320 // Only schedule DoWork if there's something to do. 322 // Only schedule DoWork if there's something to do.
321 if (!queue->work_queue().empty()) 323 if (!queue->work_queue().empty())
322 MaybePostDoWorkOnMainRunner(); 324 MaybePostDoWorkOnMainRunner();
323 } 325 }
324 326
325 } // namespace scheduler 327 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/base/task_queue_impl.cc ('k') | components/scheduler/base/task_queue_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698