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

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

Issue 2345483002: [scheduler] Throttle background frames with 1% CPU limit (Closed)
Patch Set: Rebased Created 4 years, 2 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_frame_scheduler_impl.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc
index 1fd96aeb5b86f08773944a9cbdf750ac3db5f5cd..0f4158f23c38b0cce6614865c82b25f90de9fa3d 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/web_frame_scheduler_impl.cc
@@ -36,6 +36,7 @@ WebFrameSchedulerImpl::~WebFrameSchedulerImpl() {
}
if (timer_task_queue_) {
+ RemoveTimerQueueFromBackgroundTimeBudgetPool();
timer_task_queue_->UnregisterTaskQueue();
timer_task_queue_->SetBlameContext(nullptr);
}
@@ -50,9 +51,28 @@ WebFrameSchedulerImpl::~WebFrameSchedulerImpl() {
}
void WebFrameSchedulerImpl::DetachFromWebViewScheduler() {
+ RemoveTimerQueueFromBackgroundTimeBudgetPool();
+
parent_web_view_scheduler_ = nullptr;
}
+void WebFrameSchedulerImpl::RemoveTimerQueueFromBackgroundTimeBudgetPool() {
+ if (!timer_task_queue_)
+ return;
+
+ if (!parent_web_view_scheduler_)
+ return;
+
+ TaskQueueThrottler::TimeBudgetPool* time_budget_pool =
+ parent_web_view_scheduler_->background_time_budget_pool();
+
+ if (!time_budget_pool)
+ return;
+
+ time_budget_pool->RemoveQueue(renderer_scheduler_->tick_clock()->NowTicks(),
+ timer_task_queue_.get());
+}
+
void WebFrameSchedulerImpl::setFrameVisible(bool frame_visible) {
DCHECK(parent_web_view_scheduler_);
if (frame_visible_ == frame_visible)
@@ -88,6 +108,14 @@ blink::WebTaskRunner* WebFrameSchedulerImpl::timerTaskRunner() {
timer_task_queue_ =
renderer_scheduler_->NewTimerTaskRunner("frame_timer_tq");
timer_task_queue_->SetBlameContext(blame_context_);
+
+ TaskQueueThrottler::TimeBudgetPool* time_budget_pool =
+ parent_web_view_scheduler_->background_time_budget_pool();
+ if (time_budget_pool) {
+ time_budget_pool->AddQueue(renderer_scheduler_->tick_clock()->NowTicks(),
+ timer_task_queue_.get());
+ }
+
if (ShouldThrottleTimers()) {
renderer_scheduler_->task_queue_throttler()->IncreaseThrottleRefCount(
timer_task_queue_.get());

Powered by Google App Engine
This is Rietveld 408576698