| 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
|
|
|