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

Unified Diff: third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc

Issue 2527143002: Suspend frame schedulers on a page suspension (Closed)
Patch Set: mod a comment Created 4 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc
index 37e912bd00b19247a87decc5fd587a50958f6b18..8bb4db6a79ae738444cabf2540082cadc0ebcdcf 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc
@@ -37,6 +37,7 @@ WebFrameSchedulerImpl::WebFrameSchedulerImpl(
blame_context_(blame_context),
frame_visible_(true),
page_visible_(true),
+ frame_suspended_(false),
cross_origin_(false) {}
WebFrameSchedulerImpl::~WebFrameSchedulerImpl() {
@@ -107,6 +108,9 @@ blink::WebTaskRunner* WebFrameSchedulerImpl::loadingTaskRunner() {
loading_task_queue_ = renderer_scheduler_->NewLoadingTaskRunner(
TaskQueue::QueueType::FRAME_LOADING);
loading_task_queue_->SetBlameContext(blame_context_);
+ loading_queue_enabled_voter_ =
+ loading_task_queue_->CreateQueueEnabledVoter();
+ loading_queue_enabled_voter_->SetQueueEnabled(!frame_suspended_);
loading_web_task_runner_.reset(new WebTaskRunnerImpl(loading_task_queue_));
}
return loading_web_task_runner_.get();
@@ -118,6 +122,8 @@ blink::WebTaskRunner* WebFrameSchedulerImpl::timerTaskRunner() {
timer_task_queue_ = renderer_scheduler_->NewTimerTaskRunner(
TaskQueue::QueueType::FRAME_TIMER);
timer_task_queue_->SetBlameContext(blame_context_);
+ timer_queue_enabled_voter_ = timer_task_queue_->CreateQueueEnabledVoter();
+ timer_queue_enabled_voter_->SetQueueEnabled(!frame_suspended_);
TaskQueueThrottler::TimeBudgetPool* time_budget_pool =
parent_web_view_scheduler_->BackgroundTimeBudgetPool();
@@ -202,6 +208,18 @@ void WebFrameSchedulerImpl::setPageVisible(bool page_visible) {
UpdateTimerThrottling(was_throttled);
}
+void WebFrameSchedulerImpl::setSuspended(bool frame_suspended) {
+ DCHECK(parent_web_view_scheduler_);
+ if (frame_suspended_ == frame_suspended)
+ return;
+
+ frame_suspended_ = frame_suspended;
+ if (loading_queue_enabled_voter_)
+ loading_queue_enabled_voter_->SetQueueEnabled(!frame_suspended);
+ if (timer_queue_enabled_voter_)
+ timer_queue_enabled_voter_->SetQueueEnabled(!frame_suspended);
+}
+
bool WebFrameSchedulerImpl::ShouldThrottleTimers() const {
if (!page_visible_)
return true;

Powered by Google App Engine
This is Rietveld 408576698