| 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 f7ba68c71c706abc2f5cb8692294400ea498420e..3b4141f36921eef41f07d131133201feb1e918a2 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
|
| @@ -20,10 +20,40 @@ namespace {
|
|
|
| const double kBackgroundBudgetAsCPUFraction = .01;
|
|
|
| +double GetBackgroundBudget(WebScheduler::WebSchedulerSettings* settings) {
|
| + if (!settings)
|
| + return kBackgroundBudgetAsCPUFraction;
|
| + double settings_budget = settings->expensiveBackgroundThrottlingCPUBudget();
|
| + if (settings_budget < 0.0)
|
| + return kBackgroundBudgetAsCPUFraction;
|
| + return settings_budget;
|
| +}
|
| +
|
| +base::Optional<base::TimeDelta> GetMaxBudgetLevel(
|
| + WebScheduler::WebSchedulerSettings* settings) {
|
| + if (!settings)
|
| + return base::nullopt;
|
| + double max_budget_level = settings->expensiveBackgroundThrottlingMaxBudget();
|
| + if (max_budget_level < 0.0)
|
| + return base::nullopt;
|
| + return base::TimeDelta::FromSecondsD(max_budget_level);
|
| +}
|
| +
|
| +base::Optional<base::TimeDelta> GetMaxThrottlingDelay(
|
| + WebScheduler::WebSchedulerSettings* settings) {
|
| + if (!settings)
|
| + return base::nullopt;
|
| + double max_delay = settings->expensiveBackgroundThrottlingMaxDelay();
|
| + if (max_delay < 0.0)
|
| + return base::nullopt;
|
| + return base::TimeDelta::FromSecondsD(max_delay);
|
| +}
|
| +
|
| } // namespace
|
|
|
| WebViewSchedulerImpl::WebViewSchedulerImpl(
|
| WebScheduler::InterventionReporter* intervention_reporter,
|
| + WebScheduler::WebSchedulerSettings* settings,
|
| RendererSchedulerImpl* renderer_scheduler,
|
| bool disable_background_timer_throttling)
|
| : intervention_reporter_(intervention_reporter),
|
| @@ -36,22 +66,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),
|
| + settings_(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() {
|
| @@ -198,5 +215,35 @@ bool WebViewSchedulerImpl::IsAudioPlaying() const {
|
| return is_audio_playing_;
|
| }
|
|
|
| +TaskQueueThrottler::TimeBudgetPool*
|
| +WebViewSchedulerImpl::BackgroundTimeBudgetPool() {
|
| + MaybeInitializeBackgroundTimeBudgetPool();
|
| + return background_time_budget_pool_;
|
| +}
|
| +
|
| +void WebViewSchedulerImpl::MaybeInitializeBackgroundTimeBudgetPool() {
|
| + if (background_time_budget_pool_)
|
| + return;
|
| +
|
| + if (!RuntimeEnabledFeatures::expensiveBackgroundTimerThrottlingEnabled())
|
| + return;
|
| +
|
| + background_time_budget_pool_ =
|
| + renderer_scheduler_->task_queue_throttler()->CreateTimeBudgetPool(
|
| + "background", GetMaxBudgetLevel(settings_),
|
| + GetMaxThrottlingDelay(settings_));
|
| +
|
| + 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);
|
| + }
|
| +
|
| + background_time_budget_pool_->SetTimeBudget(lazy_now.Now(),
|
| + GetBackgroundBudget(settings_));
|
| +}
|
| +
|
| } // namespace scheduler
|
| } // namespace blink
|
|
|