Index: components/scheduler/renderer/web_frame_scheduler_impl.cc |
diff --git a/components/scheduler/renderer/web_frame_scheduler_impl.cc b/components/scheduler/renderer/web_frame_scheduler_impl.cc |
index 15e4a7de89b1d0978b2909ce472ad7c1a10a98aa..af85feb2ae9bda5410517b2994526285d4e95c21 100644 |
--- a/components/scheduler/renderer/web_frame_scheduler_impl.cc |
+++ b/components/scheduler/renderer/web_frame_scheduler_impl.cc |
@@ -16,7 +16,8 @@ WebFrameSchedulerImpl::WebFrameSchedulerImpl( |
WebViewSchedulerImpl* parent_web_view_scheduler) |
: renderer_scheduler_(renderer_scheduler), |
parent_web_view_scheduler_(parent_web_view_scheduler), |
- visible_(true) {} |
+ visible_(true), |
+ page_in_background_(false) {} |
WebFrameSchedulerImpl::~WebFrameSchedulerImpl() { |
if (loading_task_queue_.get()) |
@@ -51,6 +52,9 @@ blink::WebTaskRunner* WebFrameSchedulerImpl::timerTaskRunner() { |
if (!timer_web_task_runner_) { |
timer_task_queue_ = |
renderer_scheduler_->NewTimerTaskRunner("frame_timer_tq"); |
+ timer_task_queue_->SetPumpPolicy(page_in_background_ |
+ ? TaskQueue::PumpPolicy::MANUAL |
+ : TaskQueue::PumpPolicy::AUTO); |
timer_web_task_runner_.reset(new WebTaskRunnerImpl(timer_task_queue_)); |
} |
return timer_web_task_runner_.get(); |
@@ -63,4 +67,26 @@ void WebFrameSchedulerImpl::setFrameOrigin( |
// TODO(skyostil): Associate the task queues with this origin. |
} |
+void WebFrameSchedulerImpl::SetPageInBackground(bool page_in_background) { |
+ if (page_in_background_ == page_in_background) |
+ return; |
+ |
+ page_in_background_ = page_in_background; |
+ |
+ if (!timer_task_queue_) |
+ return; |
+ |
+ timer_task_queue_->SetPumpPolicy(page_in_background_ |
+ ? TaskQueue::PumpPolicy::MANUAL |
+ : TaskQueue::PumpPolicy::AUTO); |
+} |
+ |
+void WebFrameSchedulerImpl::PumpBackgroundTasks() { |
+ DCHECK(page_in_background_); |
+ if (!timer_task_queue_) |
+ return; |
+ |
+ timer_task_queue_->PumpQueue(); |
+} |
+ |
} // namespace scheduler |