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

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

Issue 2023033003: scheduler: Throttle timers in out-of-view frames (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 4 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: 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 76b2579ea4636766f2d5387e34a776f1ede71492..49ac60aaf8615b005b624f0b3dcf14fddc1003e1 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
@@ -11,6 +11,7 @@
#include "platform/scheduler/renderer/auto_advancing_virtual_time_domain.h"
#include "platform/scheduler/renderer/renderer_scheduler_impl.h"
#include "platform/scheduler/renderer/web_view_scheduler_impl.h"
+#include "platform/RuntimeEnabledFeatures.h"
#include "public/platform/BlameContext.h"
#include "public/platform/WebString.h"
@@ -25,7 +26,8 @@ WebFrameSchedulerImpl::WebFrameSchedulerImpl(
parent_web_view_scheduler_(parent_web_view_scheduler),
blame_context_(blame_context),
frame_visible_(true),
- page_visible_(true) {}
+ page_visible_(true),
+ cross_origin_(false) {}
WebFrameSchedulerImpl::~WebFrameSchedulerImpl() {
if (loading_task_queue_) {
@@ -52,8 +54,21 @@ void WebFrameSchedulerImpl::DetachFromWebViewScheduler() {
}
void WebFrameSchedulerImpl::setFrameVisible(bool frame_visible) {
+ DCHECK(parent_web_view_scheduler_);
+ if (frame_visible_ == frame_visible)
+ return;
+ bool was_throttled = ShouldThrottleTimers();
frame_visible_ = frame_visible;
- // TODO(alexclarke): Do something with this flag.
+ UpdateTimerThrottling(was_throttled);
+}
+
+void WebFrameSchedulerImpl::setCrossOrigin(bool cross_origin) {
+ DCHECK(parent_web_view_scheduler_);
+ if (cross_origin_ == cross_origin)
+ return;
+ bool was_throttled = ShouldThrottleTimers();
+ cross_origin_ = cross_origin;
+ UpdateTimerThrottling(was_throttled);
}
blink::WebTaskRunner* WebFrameSchedulerImpl::loadingTaskRunner() {
@@ -73,7 +88,7 @@ blink::WebTaskRunner* WebFrameSchedulerImpl::timerTaskRunner() {
timer_task_queue_ =
renderer_scheduler_->NewTimerTaskRunner("frame_timer_tq");
timer_task_queue_->SetBlameContext(blame_context_);
- if (!page_visible_) {
+ if (ShouldThrottleTimers()) {
renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount(
timer_task_queue_.get());
}
@@ -120,17 +135,27 @@ void WebFrameSchedulerImpl::setPageVisible(bool page_visible) {
DCHECK(parent_web_view_scheduler_);
if (page_visible_ == page_visible)
return;
-
+ bool was_throttled = ShouldThrottleTimers();
page_visible_ = page_visible;
+ UpdateTimerThrottling(was_throttled);
+}
- if (!timer_web_task_runner_)
- return;
+bool WebFrameSchedulerImpl::ShouldThrottleTimers() const {
+ if (!page_visible_)
+ return true;
+ return RuntimeEnabledFeatures::timerThrottlingForHiddenFramesEnabled() &&
+ !frame_visible_ && cross_origin_;
+}
- if (page_visible_) {
- renderer_scheduler_->throttling_helper()->DecreaseThrottleRefCount(
+void WebFrameSchedulerImpl::UpdateTimerThrottling(bool was_throttled) {
+ bool should_throttle = ShouldThrottleTimers();
+ if (was_throttled == should_throttle || !timer_web_task_runner_)
+ return;
+ if (should_throttle) {
+ renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount(
timer_task_queue_.get());
} else {
- renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount(
+ renderer_scheduler_->throttling_helper()->DecreaseThrottleRefCount(
timer_task_queue_.get());
}
}

Powered by Google App Engine
This is Rietveld 408576698