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

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

Issue 985813002: Experimental: Remove chromium shared timers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More tests Created 5 years, 9 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: content/renderer/scheduler/renderer_scheduler_impl.cc
diff --git a/content/renderer/scheduler/renderer_scheduler_impl.cc b/content/renderer/scheduler/renderer_scheduler_impl.cc
index 6f7821690393a3b8c61b9956f28deb523e766a6b..fafbd8dba7d185e29ef1157b0f31de74ebcb578e 100644
--- a/content/renderer/scheduler/renderer_scheduler_impl.cc
+++ b/content/renderer/scheduler/renderer_scheduler_impl.cc
@@ -31,10 +31,13 @@ RendererSchedulerImpl::RendererSchedulerImpl(
task_queue_manager_->TaskRunnerForQueue(COMPOSITOR_TASK_QUEUE)),
loading_task_runner_(
task_queue_manager_->TaskRunnerForQueue(LOADING_TASK_QUEUE)),
+ timer_task_runner_(
+ task_queue_manager_->TaskRunnerForQueue(TIMER_TASK_QUEUE)),
current_policy_(Policy::NORMAL),
last_input_type_(blink::WebInputEvent::Undefined),
input_stream_state_(InputStreamState::INACTIVE),
policy_may_need_update_(&incoming_signals_lock_),
+ timer_queue_suspended_(0),
weak_factory_(this) {
weak_renderer_scheduler_ptr_ = weak_factory_.GetWeakPtr();
update_policy_closure_ = base::Bind(&RendererSchedulerImpl::UpdatePolicy,
@@ -108,6 +111,12 @@ RendererSchedulerImpl::LoadingTaskRunner() {
return loading_task_runner_;
}
+scoped_refptr<base::SingleThreadTaskRunner>
+RendererSchedulerImpl::TimerTaskRunner() {
+ DCHECK(main_thread_checker_.CalledOnValidThread());
+ return timer_task_runner_;
+}
+
void RendererSchedulerImpl::WillBeginFrame(const cc::BeginFrameArgs& args) {
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
"RendererSchedulerImpl::WillBeginFrame", "args", args.AsValue());
@@ -299,17 +308,20 @@ void RendererSchedulerImpl::UpdatePolicy() {
// that still has some guarantee of running.
renderer_task_queue_selector_->SetQueuePriority(
LOADING_TASK_QUEUE, RendererTaskQueueSelector::BEST_EFFORT_PRIORITY);
+ MaybeEnableTimerQueue();
break;
case Policy::TOUCHSTART_PRIORITY:
renderer_task_queue_selector_->SetQueuePriority(
COMPOSITOR_TASK_QUEUE, RendererTaskQueueSelector::HIGH_PRIORITY);
renderer_task_queue_selector_->DisableQueue(LOADING_TASK_QUEUE);
+ renderer_task_queue_selector_->DisableQueue(TIMER_TASK_QUEUE);
break;
case Policy::NORMAL:
renderer_task_queue_selector_->SetQueuePriority(
COMPOSITOR_TASK_QUEUE, RendererTaskQueueSelector::NORMAL_PRIORITY);
renderer_task_queue_selector_->SetQueuePriority(
LOADING_TASK_QUEUE, RendererTaskQueueSelector::NORMAL_PRIORITY);
+ MaybeEnableTimerQueue();
break;
}
DCHECK(renderer_task_queue_selector_->IsQueueEnabled(COMPOSITOR_TASK_QUEUE));
@@ -561,4 +573,23 @@ void RendererSchedulerImpl::RemoveTaskObserver(
task_queue_manager_->RemoveTaskObserver(task_observer);
}
+void RendererSchedulerImpl::SuspendTimerQueue() {
+ timer_queue_suspended_++;
+ renderer_task_queue_selector_->DisableQueue(TIMER_TASK_QUEUE);
+}
+
+void RendererSchedulerImpl::ResumeTimerQueue() {
+ timer_queue_suspended_--;
+
+ MaybeUpdatePolicy();
+ if (SchedulerPolicy() != Policy::TOUCHSTART_PRIORITY)
+ MaybeEnableTimerQueue();
+}
+
+void RendererSchedulerImpl::MaybeEnableTimerQueue() {
+ if (timer_queue_suspended_ == 0)
+ renderer_task_queue_selector_->SetQueuePriority(
+ TIMER_TASK_QUEUE, RendererTaskQueueSelector::NORMAL_PRIORITY);
+}
+
} // namespace content
« no previous file with comments | « content/renderer/scheduler/renderer_scheduler_impl.h ('k') | content/renderer/scheduler/renderer_scheduler_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698