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 0dff1a2d6b38baccd3a8f9aa57ad7765673fa251..548c2ebed0921857707ae0c42a5243728f99b66b 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 |
| @@ -5,6 +5,7 @@ |
| #include "platform/scheduler/renderer/web_view_scheduler_impl.h" |
| #include "base/logging.h" |
| +#include "platform/RuntimeEnabledFeatures.h" |
| #include "platform/scheduler/base/virtual_time_domain.h" |
| #include "platform/scheduler/child/scheduler_tqm_delegate.h" |
| #include "platform/scheduler/renderer/auto_advancing_virtual_time_domain.h" |
| @@ -15,6 +16,12 @@ |
| namespace blink { |
| namespace scheduler { |
| +namespace { |
| + |
| +const double kBackgroundCPUBudget = .01; |
|
alex clarke (OOO till 29th)
2016/09/27 16:32:10
Maybe s/kBackgroundCPUBudget/kBackgroundCPUBudget
altimin
2016/09/27 17:38:23
Done.
|
| + |
| +} // namespace |
| + |
| WebViewSchedulerImpl::WebViewSchedulerImpl( |
| WebScheduler::InterventionReporter* intervention_reporter, |
| RendererSchedulerImpl* renderer_scheduler, |
| @@ -27,8 +34,18 @@ WebViewSchedulerImpl::WebViewSchedulerImpl( |
| disable_background_timer_throttling_(disable_background_timer_throttling), |
| allow_virtual_time_to_advance_(true), |
| have_seen_loading_task_(false), |
| - virtual_time_(false) { |
| + virtual_time_(false), |
| + background_time_budget_pool_(nullptr) { |
| renderer_scheduler->AddWebViewScheduler(this); |
| + |
| + if (RuntimeEnabledFeatures::expensiveBackgroundTimerThrottlingEnabled()) { |
| + background_time_budget_pool_ = |
| + renderer_scheduler_->task_queue_throttler()->CreateTimeBudgetPool( |
| + "background"); |
| + |
| + background_time_budget_pool_->SetTimeBudget( |
| + renderer_scheduler_->tick_clock()->NowTicks(), kBackgroundCPUBudget); |
| + } |
| } |
| WebViewSchedulerImpl::~WebViewSchedulerImpl() { |
| @@ -38,6 +55,9 @@ WebViewSchedulerImpl::~WebViewSchedulerImpl() { |
| frame_scheduler->DetachFromWebViewScheduler(); |
| } |
| renderer_scheduler_->RemoveWebViewScheduler(this); |
| + |
| + if (background_time_budget_pool_) |
| + background_time_budget_pool_->Close(); |
| } |
| void WebViewSchedulerImpl::setPageVisible(bool page_visible) { |
| @@ -49,6 +69,15 @@ void WebViewSchedulerImpl::setPageVisible(bool page_visible) { |
| for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { |
| 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); |
| + } |
| + } |
| } |
| std::unique_ptr<WebFrameSchedulerImpl> |