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

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

Issue 2567983003: [scheduler] Delay budget-based throttling for 10s after backgrounded. (Closed)
Patch Set: 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_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 f7c4ef2b566e2641a9f9904111a7402f417c4925..4f943168d1e52bde963a498d6580ffbe96d543d3 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,6 +30,8 @@ constexpr base::TimeDelta kDefaultMaxBackgroundThrottlingDelay =
base::TimeDelta::FromMinutes(1);
constexpr base::TimeDelta kDefaultInitialBackgroundBudget =
base::TimeDelta::FromSeconds(1);
+constexpr base::TimeDelta kBackgroundBudgetThrottlingGracePeriod =
+ base::TimeDelta::FromSeconds(10);
// Values coming from WebViewSchedulerSettings are interpreted as follows:
// -1 is "not set". Scheduler should use a reasonable default.
@@ -102,6 +104,10 @@ WebViewSchedulerImpl::WebViewSchedulerImpl(
background_time_budget_pool_(nullptr),
settings_(settings) {
renderer_scheduler->AddWebViewScheduler(this);
+
+ delayed_background_budget_throttling_enabler_.Reset(
+ base::Bind(&WebViewSchedulerImpl::EnableBackgroundBudgetThrottling,
+ base::Unretained(this)));
}
WebViewSchedulerImpl::~WebViewSchedulerImpl() {
@@ -126,19 +132,13 @@ void WebViewSchedulerImpl::setPageVisible(bool page_visible) {
frame_scheduler->setPageVisible(page_visible_);
}
- if (background_time_budget_pool_) {
- LazyNow lazy_now(renderer_scheduler_->tick_clock());
- if (page_visible_) {
- background_time_budget_pool_->DisableThrottling(&lazy_now);
- } else {
- background_time_budget_pool_->EnableThrottling(&lazy_now);
- }
- }
+ UpdateBackgroundBudgetThrottlingState();
}
std::unique_ptr<WebFrameSchedulerImpl>
WebViewSchedulerImpl::createWebFrameSchedulerImpl(
base::trace_event::BlameContext* blame_context) {
+ MaybeInitializeBackgroundTimeBudgetPool();
std::unique_ptr<WebFrameSchedulerImpl> frame_scheduler(
new WebFrameSchedulerImpl(renderer_scheduler_, this, blame_context));
frame_scheduler->setPageVisible(page_visible_);
@@ -270,13 +270,9 @@ void WebViewSchedulerImpl::MaybeInitializeBackgroundTimeBudgetPool() {
"background", GetMaxBudgetLevel(settings_),
GetMaxThrottlingDelay(settings_));
- LazyNow lazy_now(renderer_scheduler_->tick_clock());
+ UpdateBackgroundBudgetThrottlingState();
- if (page_visible_) {
- background_time_budget_pool_->DisableThrottling(&lazy_now);
- } else {
- background_time_budget_pool_->EnableThrottling(&lazy_now);
- }
+ LazyNow lazy_now(renderer_scheduler_->tick_clock());
background_time_budget_pool_->SetTimeBudgetRecoveryRate(
lazy_now.Now(), GetBackgroundBudgetRecoveryRate(settings_));
@@ -305,5 +301,32 @@ 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::UpdateBackgroundBudgetThrottlingState() {
+ if (!background_time_budget_pool_)
+ return;
+
+ delayed_background_budget_throttling_enabler_.Cancel();
+
+ LazyNow lazy_now(renderer_scheduler_->tick_clock());
+
+ if (page_visible_) {
+ 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);
+ }
+}
+
} // namespace scheduler
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698