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

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

Issue 2345483002: [scheduler] Throttle background frames with 1% CPU limit (Closed)
Patch Set: [scheduler] Throttle background frames with 1% CPU limit Created 4 years, 3 months 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 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>

Powered by Google App Engine
This is Rietveld 408576698