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

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

Issue 2725633002: scheduler: Suspend timers while virtual time is paused (Closed)
Patch Set: scheduler: Suspend timers while virtual time is paused Created 3 years, 9 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 d14a7f742d79c02cd9c19e38ec5218e3022d287d..cf0796400de067104ec531775e59be09c607f06e 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
@@ -104,6 +104,7 @@ WebViewSchedulerImpl::WebViewSchedulerImpl(
should_throttle_frames_(false),
disable_background_timer_throttling_(disable_background_timer_throttling),
allow_virtual_time_to_advance_(true),
+ timers_suspended_(false),
have_seen_loading_task_(false),
virtual_time_(false),
is_audio_playing_(false),
@@ -177,10 +178,33 @@ void WebViewSchedulerImpl::enableVirtualTime() {
allow_virtual_time_to_advance_);
renderer_scheduler_->EnableVirtualTime();
+ ApplyVirtualTimePolicyToTimers();
+}
+
+void WebViewSchedulerImpl::disableVirtualTimeForTesting() {
+ if (!virtual_time_)
+ return;
+ virtual_time_ = false;
+ renderer_scheduler_->DisableVirtualTimeForTesting();
+ ApplyVirtualTimePolicyToTimers();
+}
+
+void WebViewSchedulerImpl::ApplyVirtualTimePolicyToTimers() {
+ if (!virtual_time_ || allow_virtual_time_to_advance_) {
+ if (timers_suspended_) {
+ renderer_scheduler_->ResumeTimerQueue();
+ timers_suspended_ = false;
+ }
+ } else if (!timers_suspended_) {
+ renderer_scheduler_->SuspendTimerQueue();
+ timers_suspended_ = true;
+ }
}
void WebViewSchedulerImpl::setAllowVirtualTimeToAdvance(
bool allow_virtual_time_to_advance) {
+ if (allow_virtual_time_to_advance_ == allow_virtual_time_to_advance)
+ return;
allow_virtual_time_to_advance_ = allow_virtual_time_to_advance;
if (!virtual_time_)
@@ -188,6 +212,7 @@ void WebViewSchedulerImpl::setAllowVirtualTimeToAdvance(
renderer_scheduler_->GetVirtualTimeDomain()->SetCanAdvanceVirtualTime(
allow_virtual_time_to_advance);
+ ApplyVirtualTimePolicyToTimers();
}
bool WebViewSchedulerImpl::virtualTimeAllowedToAdvance() const {
@@ -197,23 +222,23 @@ bool WebViewSchedulerImpl::virtualTimeAllowedToAdvance() const {
void WebViewSchedulerImpl::DidStartLoading(unsigned long identifier) {
pending_loads_.insert(identifier);
have_seen_loading_task_ = true;
- ApplyVirtualTimePolicy();
+ ApplyVirtualTimePolicyForLoading();
}
void WebViewSchedulerImpl::DidStopLoading(unsigned long identifier) {
pending_loads_.erase(identifier);
- ApplyVirtualTimePolicy();
+ ApplyVirtualTimePolicyForLoading();
}
void WebViewSchedulerImpl::IncrementBackgroundParserCount() {
background_parser_count_++;
- ApplyVirtualTimePolicy();
+ ApplyVirtualTimePolicyForLoading();
}
void WebViewSchedulerImpl::DecrementBackgroundParserCount() {
background_parser_count_--;
DCHECK_GE(background_parser_count_, 0);
- ApplyVirtualTimePolicy();
+ ApplyVirtualTimePolicyForLoading();
}
void WebViewSchedulerImpl::setVirtualTimePolicy(VirtualTimePolicy policy) {
@@ -229,7 +254,7 @@ void WebViewSchedulerImpl::setVirtualTimePolicy(VirtualTimePolicy policy) {
break;
case VirtualTimePolicy::DETERMINISTIC_LOADING:
- ApplyVirtualTimePolicy();
+ ApplyVirtualTimePolicyForLoading();
break;
}
}
@@ -243,7 +268,7 @@ bool WebViewSchedulerImpl::hasActiveConnectionForTest() const {
return has_active_connection_;
}
-void WebViewSchedulerImpl::ApplyVirtualTimePolicy() {
+void WebViewSchedulerImpl::ApplyVirtualTimePolicyForLoading() {
if (virtual_time_policy_ != VirtualTimePolicy::DETERMINISTIC_LOADING) {
return;
}

Powered by Google App Engine
This is Rietveld 408576698