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

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: 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 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

Powered by Google App Engine
This is Rietveld 408576698