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

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

Issue 2620743002: Don't throttle web views until they've been in the background for 10s (Closed)
Patch Set: Fix asan test issue Created 3 years, 11 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_view_scheduler_impl.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.cc
index e3f3a420f94167bfc56fdb324a97634ae7e19fa6..a5ccc87bfc7c57fbcffe72fb3dbe1e4020adb2d5 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_view_scheduler_impl.cc
@@ -30,7 +30,7 @@ constexpr base::TimeDelta kDefaultMaxBackgroundThrottlingDelay =
base::TimeDelta::FromMinutes(1);
constexpr base::TimeDelta kDefaultInitialBackgroundBudget =
base::TimeDelta::FromSeconds(1);
-constexpr base::TimeDelta kBackgroundBudgetThrottlingGracePeriod =
+constexpr base::TimeDelta kBackgroundThrottlingGracePeriod =
base::TimeDelta::FromSeconds(10);
// Values coming from WebViewSchedulerSettings are interpreted as follows:
@@ -101,6 +101,7 @@ WebViewSchedulerImpl::WebViewSchedulerImpl(
virtual_time_policy_(VirtualTimePolicy::ADVANCE),
background_parser_count_(0),
page_visible_(true),
+ should_throttle_frames_(false),
disable_background_timer_throttling_(disable_background_timer_throttling),
allow_virtual_time_to_advance_(true),
have_seen_loading_task_(false),
@@ -111,8 +112,8 @@ WebViewSchedulerImpl::WebViewSchedulerImpl(
settings_(settings) {
renderer_scheduler->AddWebViewScheduler(this);
- delayed_background_budget_throttling_enabler_.Reset(
- base::Bind(&WebViewSchedulerImpl::EnableBackgroundBudgetThrottling,
+ delayed_background_throttling_enabler_.Reset(
+ base::Bind(&WebViewSchedulerImpl::EnableBackgroundThrottling,
base::Unretained(this)));
}
@@ -134,11 +135,7 @@ void WebViewSchedulerImpl::setPageVisible(bool page_visible) {
page_visible_ = page_visible;
- for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
- frame_scheduler->setPageVisible(page_visible_);
- }
-
- UpdateBackgroundBudgetThrottlingState();
+ UpdateBackgroundThrottlingState();
}
std::unique_ptr<WebFrameSchedulerImpl>
@@ -147,7 +144,7 @@ WebViewSchedulerImpl::createWebFrameSchedulerImpl(
MaybeInitializeBackgroundTimeBudgetPool();
std::unique_ptr<WebFrameSchedulerImpl> frame_scheduler(
new WebFrameSchedulerImpl(renderer_scheduler_, this, blame_context));
- frame_scheduler->setPageVisible(page_visible_);
+ frame_scheduler->setPageThrottled(should_throttle_frames_);
frame_schedulers_.insert(frame_scheduler.get());
return frame_scheduler;
}
@@ -302,7 +299,7 @@ void WebViewSchedulerImpl::MaybeInitializeBackgroundTimeBudgetPool() {
"background", GetMaxBudgetLevel(settings_),
GetMaxThrottlingDelay(settings_));
- UpdateBackgroundBudgetThrottlingState();
+ UpdateBackgroundThrottlingState();
LazyNow lazy_now(renderer_scheduler_->tick_clock());
@@ -333,30 +330,34 @@ void WebViewSchedulerImpl::OnThrottlingReported(
intervention_reporter_->ReportIntervention(WebString::fromUTF8(message));
}
-void WebViewSchedulerImpl::EnableBackgroundBudgetThrottling() {
- if (!background_time_budget_pool_)
- return;
-
- LazyNow lazy_now(renderer_scheduler_->tick_clock());
-
- background_time_budget_pool_->EnableThrottling(&lazy_now);
+void WebViewSchedulerImpl::EnableBackgroundThrottling() {
+ should_throttle_frames_ = true;
+ for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
+ frame_scheduler->setPageThrottled(true);
+ }
+ if (background_time_budget_pool_) {
+ LazyNow lazy_now(renderer_scheduler_->tick_clock());
+ background_time_budget_pool_->EnableThrottling(&lazy_now);
+ }
}
-void WebViewSchedulerImpl::UpdateBackgroundBudgetThrottlingState() {
- if (!background_time_budget_pool_)
- return;
-
- delayed_background_budget_throttling_enabler_.Cancel();
-
- LazyNow lazy_now(renderer_scheduler_->tick_clock());
+void WebViewSchedulerImpl::UpdateBackgroundThrottlingState() {
+ delayed_background_throttling_enabler_.Cancel();
if (page_visible_) {
- background_time_budget_pool_->DisableThrottling(&lazy_now);
+ should_throttle_frames_ = false;
+ for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) {
+ frame_scheduler->setPageThrottled(false);
+ }
+ if (background_time_budget_pool_) {
+ LazyNow lazy_now(renderer_scheduler_->tick_clock());
+ background_time_budget_pool_->DisableThrottling(&lazy_now);
+ }
} else {
// TODO(altimin): Consider moving this logic into PumpThrottledTasks.
renderer_scheduler_->ControlTaskRunner()->PostDelayedTask(
- FROM_HERE, delayed_background_budget_throttling_enabler_.callback(),
- kBackgroundBudgetThrottlingGracePeriod);
+ FROM_HERE, delayed_background_throttling_enabler_.callback(),
+ kBackgroundThrottlingGracePeriod);
}
}

Powered by Google App Engine
This is Rietveld 408576698