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

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

Issue 2471153002: [scheduler] Use Finch to control background throttling. (Closed)
Patch Set: Address skyostil@'s comments Created 4 years, 1 month 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 f7ba68c71c706abc2f5cb8692294400ea498420e..85755dfaa3e8d2d9f3ce532b8e5b1c9bc7516638 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
@@ -19,11 +19,55 @@ namespace scheduler {
namespace {
const double kBackgroundBudgetAsCPUFraction = .01;
+constexpr base::TimeDelta kDefaultMaxBackgroundBudgetLevel =
+ base::TimeDelta::FromSeconds(3);
+constexpr base::TimeDelta kDefaultMaxBackgroundThrottlingDelay =
+ base::TimeDelta::FromMinutes(1);
+
+// Values coming from WebSchedulerSettings are interpreted as follows:
Sami 2016/11/07 16:33:41 WebViewSchedulerSettings
altimin 2016/11/07 17:01:33 Done.
+// -1 is "not set". Scheduler should use a reasonable default.
+// 0 is "none". base::nullopt will be used if value is optional.
+// other values are left without changes.
+
+double GetBackgroundBudget(
+ WebViewScheduler::WebViewSchedulerSettings* settings) {
+ if (!settings)
+ return kBackgroundBudgetAsCPUFraction;
+ double settings_budget = settings->expensiveBackgroundThrottlingCPUBudget();
+ if (settings_budget == -1.0)
+ return kBackgroundBudgetAsCPUFraction;
+ return settings_budget;
+}
+
+base::Optional<base::TimeDelta> GetMaxBudgetLevel(
+ WebViewScheduler::WebViewSchedulerSettings* settings) {
+ if (!settings)
+ return base::nullopt;
+ double max_budget_level = settings->expensiveBackgroundThrottlingMaxBudget();
+ if (max_budget_level == -1.0)
+ return kDefaultMaxBackgroundBudgetLevel;
+ if (max_budget_level == 0.0)
+ return base::nullopt;
+ return base::TimeDelta::FromSecondsD(max_budget_level);
+}
+
+base::Optional<base::TimeDelta> GetMaxThrottlingDelay(
+ WebViewScheduler::WebViewSchedulerSettings* settings) {
+ if (!settings)
+ return base::nullopt;
+ double max_delay = settings->expensiveBackgroundThrottlingMaxDelay();
+ if (max_delay == -1.0)
+ return kDefaultMaxBackgroundThrottlingDelay;
+ if (max_delay == 0.0)
+ return base::nullopt;
+ return base::TimeDelta::FromSecondsD(max_delay);
+}
} // namespace
WebViewSchedulerImpl::WebViewSchedulerImpl(
WebScheduler::InterventionReporter* intervention_reporter,
+ WebViewScheduler::WebViewSchedulerSettings* settings,
RendererSchedulerImpl* renderer_scheduler,
bool disable_background_timer_throttling)
: intervention_reporter_(intervention_reporter),
@@ -36,22 +80,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 +229,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

Powered by Google App Engine
This is Rietveld 408576698