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..b8c1c1a6f176c55b9949e76aaf1d82f89bb1ba06 100644 |
--- a/components/scheduler/renderer/web_frame_scheduler_impl.cc |
+++ b/components/scheduler/renderer/web_frame_scheduler_impl.cc |
@@ -4,6 +4,8 @@ |
#include "components/scheduler/renderer/web_frame_scheduler_impl.h" |
+#include "components/scheduler/base/real_time_domain.h" |
+#include "components/scheduler/base/virtual_time_domain.h" |
#include "components/scheduler/child/web_task_runner_impl.h" |
#include "components/scheduler/renderer/renderer_scheduler_impl.h" |
#include "components/scheduler/renderer/web_view_scheduler_impl.h" |
@@ -16,14 +18,18 @@ 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()) |
loading_task_queue_->UnregisterTaskQueue(); |
- if (timer_task_queue_.get()) |
+ if (timer_task_queue_.get()) { |
+ renderer_scheduler_->throttling_helper()->Unthrottle( |
+ timer_task_queue_.get()); |
timer_task_queue_->UnregisterTaskQueue(); |
+ } |
if (parent_web_view_scheduler_) |
parent_web_view_scheduler_->Unregister(this); |
@@ -51,6 +57,10 @@ blink::WebTaskRunner* WebFrameSchedulerImpl::timerTaskRunner() { |
if (!timer_web_task_runner_) { |
timer_task_queue_ = |
renderer_scheduler_->NewTimerTaskRunner("frame_timer_tq"); |
+ if (page_in_background_) { |
+ renderer_scheduler_->throttling_helper()->Throttle( |
+ timer_task_queue_.get()); |
+ } |
timer_web_task_runner_.reset(new WebTaskRunnerImpl(timer_task_queue_)); |
} |
return timer_web_task_runner_.get(); |
@@ -63,4 +73,21 @@ 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_web_task_runner_) |
+ return; |
+ |
+ if (page_in_background_) { |
+ renderer_scheduler_->throttling_helper()->Throttle(timer_task_queue_.get()); |
+ } else { |
+ renderer_scheduler_->throttling_helper()->Unthrottle( |
+ timer_task_queue_.get()); |
+ } |
+} |
+ |
} // namespace scheduler |