Chromium Code Reviews| 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 fc297cd67b5f47a47cfc3d8475684a30cdfa08a2..4c737cf02f74d315f4f4ff66f61b51385b5167d3 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 |
| @@ -12,6 +12,7 @@ |
| #include "platform/scheduler/renderer/renderer_scheduler_impl.h" |
| #include "platform/scheduler/renderer/web_frame_scheduler_impl.h" |
| #include "public/platform/WebFrameScheduler.h" |
| +#include "web/WebSettingsImpl.h" |
| namespace blink { |
| namespace scheduler { |
| @@ -20,10 +21,42 @@ namespace { |
| const double kBackgroundBudgetAsCPUFraction = .01; |
| +double GetBackgroundBudget(WebSettingsImpl* web_settings) { |
| + if (!web_settings) |
| + return kBackgroundBudgetAsCPUFraction; |
| + double web_settings_budget = |
| + web_settings->expensiveBackgroundThrottlingCPUBudget(); |
| + if (web_settings_budget < 0) |
|
alex clarke (OOO till 29th)
2016/11/02 17:53:48
< 0.0? (here and below)
altimin
2016/11/02 21:10:02
Done.
|
| + return kBackgroundBudgetAsCPUFraction; |
| + return web_settings_budget; |
| +} |
| + |
| +base::Optional<base::TimeDelta> GetMaxBudgetLevel( |
| + WebSettingsImpl* web_settings) { |
| + if (!web_settings) |
| + return base::nullopt; |
| + double max_budget_level = |
| + web_settings->expensiveBackgroundThrottlingMaxBudget(); |
| + if (max_budget_level < 0) |
| + return base::nullopt; |
| + return base::TimeDelta::FromSecondsD(max_budget_level); |
| +} |
| + |
| +base::Optional<base::TimeDelta> GetMaxThrottlingDelay( |
| + WebSettingsImpl* web_settings) { |
| + if (!web_settings) |
| + return base::nullopt; |
| + double max_delay = web_settings->expensiveBackgroundThrottlingMaxDelay(); |
| + if (max_delay < 0) |
| + return base::nullopt; |
| + return base::TimeDelta::FromSecondsD(max_delay); |
| +} |
| + |
| } // namespace |
| WebViewSchedulerImpl::WebViewSchedulerImpl( |
| WebScheduler::InterventionReporter* intervention_reporter, |
| + WebSettingsImpl* web_settings, |
| RendererSchedulerImpl* renderer_scheduler, |
| bool disable_background_timer_throttling) |
| : intervention_reporter_(intervention_reporter), |
| @@ -36,22 +69,9 @@ WebViewSchedulerImpl::WebViewSchedulerImpl( |
| have_seen_loading_task_(false), |
| virtual_time_(false), |
| is_audio_playing_(false), |
| - background_time_budget_pool_(nullptr) { |
| + background_time_budget_pool_(nullptr), |
| + web_settings_(web_settings) { |
| renderer_scheduler->AddWebViewScheduler(this); |
| - |
| - if (RuntimeEnabledFeatures::expensiveBackgroundTimerThrottlingEnabled()) { |
| - background_time_budget_pool_ = |
| - renderer_scheduler_->task_queue_throttler()->CreateTimeBudgetPool( |
| - "background"); |
| - |
| - LazyNow lazy_now(renderer_scheduler_->tick_clock()); |
| - |
| - // Disable throttling because page is visible by default. |
| - background_time_budget_pool_->DisableThrottling(&lazy_now); |
| - |
| - background_time_budget_pool_->SetTimeBudget(lazy_now.Now(), |
| - kBackgroundBudgetAsCPUFraction); |
| - } |
| } |
| WebViewSchedulerImpl::~WebViewSchedulerImpl() { |
| @@ -189,5 +209,34 @@ void WebViewSchedulerImpl::ApplyVirtualTimePolicy() { |
| have_seen_loading_task_); |
| } |
| +TaskQueueThrottler::TimeBudgetPool* |
| +WebViewSchedulerImpl::BackgroundTimeBudgetPool() { |
| + if (!background_time_budget_pool_) |
| + MaybeInitializeBackgroundTimeBudgetPool(); |
| + return background_time_budget_pool_; |
| +} |
| + |
| +void WebViewSchedulerImpl::MaybeInitializeBackgroundTimeBudgetPool() { |
| + if (!RuntimeEnabledFeatures::expensiveBackgroundTimerThrottlingEnabled()) |
| + return; |
| + |
| + background_time_budget_pool_ = |
|
alex clarke (OOO till 29th)
2016/11/02 17:53:49
DCHECK background_time_budget_pool_ isn't already
altimin
2016/11/02 21:10:01
Replaced with checking and exiting the function.
|
| + renderer_scheduler_->task_queue_throttler()->CreateTimeBudgetPool( |
| + "background", GetMaxBudgetLevel(web_settings_), |
| + GetMaxThrottlingDelay(web_settings_)); |
| + |
| + LazyNow lazy_now(renderer_scheduler_->tick_clock()); |
| + |
| + // Disable throttling because page is visible by default. |
| + if (page_visible_) { |
| + background_time_budget_pool_->DisableThrottling(&lazy_now); |
| + } else { |
| + background_time_budget_pool_->EnableThrottling(&lazy_now); |
| + } |
| + |
| + background_time_budget_pool_->SetTimeBudget( |
| + lazy_now.Now(), GetBackgroundBudget(web_settings_)); |
| +} |
| + |
| } // namespace scheduler |
| } // namespace blink |