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

Unified Diff: components/scheduler/renderer/web_frame_scheduler_impl.cc

Issue 1646583002: [Reland] Per WebViewScheduler virtual time (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: WebViewSchedulerImpl to unregister the virtual_time_domain_ in the destructor Created 4 years, 11 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: components/scheduler/renderer/web_frame_scheduler_impl.cc
diff --git a/components/scheduler/renderer/web_frame_scheduler_impl.cc b/components/scheduler/renderer/web_frame_scheduler_impl.cc
index 541be4368f2e2b61eef6e8885650703b658cc0d0..2b87bb285e11aff40e3f8f39ea6684fc919cdc6b 100644
--- a/components/scheduler/renderer/web_frame_scheduler_impl.cc
+++ b/components/scheduler/renderer/web_frame_scheduler_impl.cc
@@ -7,6 +7,7 @@
#include "components/scheduler/base/real_time_domain.h"
#include "components/scheduler/base/virtual_time_domain.h"
#include "components/scheduler/child/web_task_runner_impl.h"
+#include "components/scheduler/renderer/auto_advancing_virtual_time_domain.h"
#include "components/scheduler/renderer/renderer_scheduler_impl.h"
#include "components/scheduler/renderer/web_view_scheduler_impl.h"
#include "third_party/WebKit/public/platform/WebString.h"
@@ -18,6 +19,8 @@ WebFrameSchedulerImpl::WebFrameSchedulerImpl(
WebViewSchedulerImpl* parent_web_view_scheduler)
: renderer_scheduler_(renderer_scheduler),
parent_web_view_scheduler_(parent_web_view_scheduler),
+ virtual_time_domain_(nullptr),
Sami 2016/02/01 11:15:07 If a new frame gets created under a WebViewSchedul
alex clarke (OOO till 29th) 2016/02/01 14:16:54 I think the pull vs push is cleaner, done.
+ virtual_time_pump_policy_(TaskQueue::PumpPolicy::AUTO),
frame_visible_(true),
page_visible_(true) {}
@@ -45,6 +48,10 @@ blink::WebTaskRunner* WebFrameSchedulerImpl::loadingTaskRunner() {
if (!loading_web_task_runner_) {
loading_task_queue_ =
renderer_scheduler_->NewLoadingTaskRunner("frame_loading_tq");
+ if (virtual_time_domain_) {
+ loading_task_queue_->SetTimeDomain(virtual_time_domain_);
+ loading_task_queue_->SetPumpPolicy(virtual_time_pump_policy_);
+ }
loading_web_task_runner_.reset(new WebTaskRunnerImpl(loading_task_queue_));
}
return loading_web_task_runner_.get();
@@ -54,7 +61,10 @@ blink::WebTaskRunner* WebFrameSchedulerImpl::timerTaskRunner() {
if (!timer_web_task_runner_) {
timer_task_queue_ =
renderer_scheduler_->NewTimerTaskRunner("frame_timer_tq");
- if (!page_visible_) {
+ if (virtual_time_domain_) {
+ timer_task_queue_->SetTimeDomain(virtual_time_domain_);
+ timer_task_queue_->SetPumpPolicy(virtual_time_pump_policy_);
+ } else if (!page_visible_) {
renderer_scheduler_->throttling_helper()->IncreaseThrottleRefCount(
timer_task_queue_.get());
}
@@ -75,7 +85,7 @@ void WebFrameSchedulerImpl::setPageVisible(bool page_visible) {
page_visible_ = page_visible;
- if (!timer_web_task_runner_)
+ if (!timer_web_task_runner_ || virtual_time_domain_)
return;
if (page_visible_) {
@@ -87,4 +97,36 @@ void WebFrameSchedulerImpl::setPageVisible(bool page_visible) {
}
}
+void WebFrameSchedulerImpl::UseVirtualTime(
+ AutoAdvancingVirtualTimeDomain* virtual_time_domain) {
+ virtual_time_domain_ = virtual_time_domain;
+
+ if (timer_task_queue_.get()) {
+ renderer_scheduler_->throttling_helper()->UnregisterTaskQueue(
+ timer_task_queue_.get());
+ timer_task_queue_->SetTimeDomain(virtual_time_domain);
+ timer_task_queue_->SetPumpPolicy(virtual_time_pump_policy_);
+ }
+
+ if (loading_task_queue_.get()) {
+ loading_task_queue_->SetTimeDomain(virtual_time_domain);
+ loading_task_queue_->SetPumpPolicy(virtual_time_pump_policy_);
+ }
+}
+
+void WebFrameSchedulerImpl::SetCanAdvanceVirtualTime(
+ bool allow_virtual_time_to_advance) {
+ virtual_time_pump_policy_ = allow_virtual_time_to_advance ?
+ TaskQueue::PumpPolicy::AUTO : TaskQueue::PumpPolicy::MANUAL;
+
Sami 2016/02/01 11:15:07 DCHECK(virtual_time_domain_) instead to make sure
alex clarke (OOO till 29th) 2016/02/01 14:16:54 Why do we need to enforce that? We can make it do
+ if (!virtual_time_domain_)
+ return;
+
+ if (timer_task_queue_.get())
+ timer_task_queue_->SetPumpPolicy(virtual_time_pump_policy_);
+
+ if (loading_task_queue_.get())
+ loading_task_queue_->SetPumpPolicy(virtual_time_pump_policy_);
+}
+
} // namespace scheduler

Powered by Google App Engine
This is Rietveld 408576698