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

Unified Diff: components/scheduler/renderer/renderer_scheduler_impl.cc

Issue 1314903007: Implement WebFrameScheduler and WebPageScheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Responding to feedback Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: components/scheduler/renderer/renderer_scheduler_impl.cc
diff --git a/components/scheduler/renderer/renderer_scheduler_impl.cc b/components/scheduler/renderer/renderer_scheduler_impl.cc
index e58e62cbe7cc5d9b598cfa4ae59b03c91b51df50..e5b1d4680e64e1363d4ec7570b8287c33947b2ff 100644
--- a/components/scheduler/renderer/renderer_scheduler_impl.cc
+++ b/components/scheduler/renderer/renderer_scheduler_impl.cc
@@ -39,12 +39,6 @@ RendererSchedulerImpl::RendererSchedulerImpl(
compositor_task_runner_(
helper_.NewTaskQueue(TaskQueue::Spec("compositor_tq")
.SetShouldMonitorQuiescence(true))),
- loading_task_runner_(
- helper_.NewTaskQueue(TaskQueue::Spec("loading_tq")
- .SetShouldMonitorQuiescence(true))),
- timer_task_runner_(
- helper_.NewTaskQueue(TaskQueue::Spec("timer_tq")
- .SetShouldMonitorQuiescence(true))),
delayed_update_policy_runner_(
base::Bind(&RendererSchedulerImpl::UpdatePolicy,
base::Unretained(this)),
@@ -60,11 +54,8 @@ RendererSchedulerImpl::RendererSchedulerImpl(
base::Bind(&RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded,
weak_factory_.GetWeakPtr()));
- loading_task_runner_->AddTaskObserver(
- &MainThreadOnly().loading_task_cost_estimator);
-
- timer_task_runner_->AddTaskObserver(
- &MainThreadOnly().timer_task_cost_estimator);
+ default_loading_task_runner_ = NewLoadingTaskRunner("loading_tq");
+ default_timer_task_runner_ = NewTimerTaskRunner("timer_tq");
TRACE_EVENT_OBJECT_CREATED_WITH_ID(
TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler",
@@ -73,16 +64,24 @@ RendererSchedulerImpl::RendererSchedulerImpl(
// Make sure that we don't initially assume there is no idle time.
MainThreadOnly().short_idle_period_duration.InsertSample(
cc::BeginFrameArgs::DefaultInterval());
+
+ helper_.SetQueueObserver(this);
}
RendererSchedulerImpl::~RendererSchedulerImpl() {
TRACE_EVENT_OBJECT_DELETED_WITH_ID(
TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler",
this);
- timer_task_runner_->RemoveTaskObserver(
- &MainThreadOnly().timer_task_cost_estimator);
- loading_task_runner_->RemoveTaskObserver(
- &MainThreadOnly().loading_task_cost_estimator);
+
+ for (const scoped_refptr<TaskQueue>& loading_queue : loading_task_runners_) {
+ loading_queue->RemoveTaskObserver(
+ &MainThreadOnly().loading_task_cost_estimator);
+ }
+ for (const scoped_refptr<TaskQueue>& timer_queue : timer_task_runners_) {
+ timer_queue->RemoveTaskObserver(
+ &MainThreadOnly().timer_task_cost_estimator);
+ }
+
// Ensure the renderer scheduler was shut down explicitly, because otherwise
// we could end up having stale pointers to the Blink heap which has been
// terminated by this point.
@@ -149,12 +148,44 @@ RendererSchedulerImpl::IdleTaskRunner() {
scoped_refptr<base::SingleThreadTaskRunner>
RendererSchedulerImpl::LoadingTaskRunner() {
helper_.CheckOnValidThread();
- return loading_task_runner_;
+ return default_loading_task_runner_;
}
scoped_refptr<TaskQueue> RendererSchedulerImpl::TimerTaskRunner() {
helper_.CheckOnValidThread();
- return timer_task_runner_;
+ return default_timer_task_runner_;
+}
+
+scoped_refptr<TaskQueue> RendererSchedulerImpl::NewLoadingTaskRunner(
+ const char* name) {
+ helper_.CheckOnValidThread();
+ scoped_refptr<TaskQueue> loading_task_queue(helper_.NewTaskQueue(
+ TaskQueue::Spec(name).SetShouldMonitorQuiescence(true)));
+ loading_task_runners_.insert(loading_task_queue);
+ loading_task_queue->SetQueuePriority(
+ MainThreadOnly().current_policy.loading_queue_priority);
+ loading_task_queue->AddTaskObserver(
+ &MainThreadOnly().loading_task_cost_estimator);
+ return loading_task_queue;
+}
+
+scoped_refptr<TaskQueue> RendererSchedulerImpl::NewTimerTaskRunner(
+ const char* name) {
+ helper_.CheckOnValidThread();
+ scoped_refptr<TaskQueue> timer_task_queue(helper_.NewTaskQueue(
+ TaskQueue::Spec(name).SetShouldMonitorQuiescence(true)));
+ timer_task_runners_.insert(timer_task_queue);
+ timer_task_queue->SetQueuePriority(
+ MainThreadOnly().current_policy.timer_queue_priority);
+ timer_task_queue->AddTaskObserver(
+ &MainThreadOnly().timer_task_cost_estimator);
+ return timer_task_queue;
+}
+
+void RendererSchedulerImpl::OnUnregisterTaskQueue(
+ const scoped_refptr<TaskQueue>& task_queue) {
+ loading_task_runners_.erase(task_queue);
+ timer_task_runners_.erase(task_queue);
}
bool RendererSchedulerImpl::CanExceedIdleDeadlineIfRequired() const {
@@ -623,8 +654,12 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) {
compositor_task_runner_->SetQueuePriority(
new_policy.compositor_queue_priority);
- loading_task_runner_->SetQueuePriority(new_policy.loading_queue_priority);
- timer_task_runner_->SetQueuePriority(new_policy.timer_queue_priority);
+ for (const scoped_refptr<TaskQueue>& loading_queue : loading_task_runners_) {
+ loading_queue->SetQueuePriority(new_policy.loading_queue_priority);
+ }
+ for (const scoped_refptr<TaskQueue>& timer_queue : timer_task_runners_) {
+ timer_queue->SetQueuePriority(new_policy.timer_queue_priority);
+ }
// TODO(alexclarke): We shouldn't have to prioritize the default queue, but it
// appears to be necessary since the order of loading tasks and IPCs (which
@@ -705,7 +740,7 @@ SchedulerHelper* RendererSchedulerImpl::GetSchedulerHelperForTesting() {
void RendererSchedulerImpl::SuspendTimerQueue() {
MainThreadOnly().timer_queue_suspend_count++;
ForceUpdatePolicy();
- DCHECK(!timer_task_runner_->IsQueueEnabled());
+ DCHECK(!default_timer_task_runner_->IsQueueEnabled());
}
void RendererSchedulerImpl::ResumeTimerQueue() {

Powered by Google App Engine
This is Rietveld 408576698