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

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

Issue 2860263002: NOT FOR COMMIT: Move background pausing to the WebView level
Patch Set: Created 3 years, 7 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/renderer_scheduler_impl.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
index f3369ecb1d37ebb10a89938fb290bf28bd1e0067..823edb8a1d167e82738ddab15e13d30d3af80014 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
@@ -119,10 +119,6 @@ RendererSchedulerImpl::RendererSchedulerImpl(
end_renderer_hidden_idle_period_closure_.Reset(base::Bind(
&RendererSchedulerImpl::EndIdlePeriod, weak_factory_.GetWeakPtr()));
- suspend_timers_when_backgrounded_closure_.Reset(
- base::Bind(&RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded,
- weak_factory_.GetWeakPtr()));
-
default_loading_task_queue_ =
NewLoadingTaskQueue(TaskQueue::QueueType::DEFAULT_LOADING);
default_timer_task_queue_ =
@@ -202,9 +198,6 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly(
expensive_task_policy(ExpensiveTaskPolicy::RUN),
renderer_hidden(false),
renderer_backgrounded(false),
- renderer_suspended(false),
- timer_queue_suspension_when_backgrounded_enabled(false),
- timer_queue_suspended_when_backgrounded(false),
was_shutdown(false),
loading_tasks_seem_expensive(false),
timer_tasks_seem_expensive(false),
@@ -530,17 +523,6 @@ void RendererSchedulerImpl::OnRendererBackgrounded() {
base::TimeTicks now = tick_clock()->NowTicks();
GetMainThreadOnly().foreground_main_thread_load_tracker.Pause(now);
GetMainThreadOnly().background_main_thread_load_tracker.Resume(now);
-
- if (!GetMainThreadOnly().timer_queue_suspension_when_backgrounded_enabled)
- return;
-
- suspend_timers_when_backgrounded_closure_.Cancel();
- base::TimeDelta suspend_timers_when_backgrounded_delay =
- base::TimeDelta::FromMilliseconds(
- kSuspendTimersWhenBackgroundedDelayMillis);
- control_task_queue_->PostDelayedTask(
- FROM_HERE, suspend_timers_when_backgrounded_closure_.GetCallback(),
- suspend_timers_when_backgrounded_delay);
}
void RendererSchedulerImpl::OnRendererForegrounded() {
@@ -551,16 +533,12 @@ void RendererSchedulerImpl::OnRendererForegrounded() {
return;
GetMainThreadOnly().renderer_backgrounded = false;
- GetMainThreadOnly().renderer_suspended = false;
UpdatePolicy();
base::TimeTicks now = tick_clock()->NowTicks();
GetMainThreadOnly().foreground_main_thread_load_tracker.Resume(now);
GetMainThreadOnly().background_main_thread_load_tracker.Pause(now);
-
- suspend_timers_when_backgrounded_closure_.Cancel();
- ResumeTimerQueueWhenForegroundedOrResumed();
}
void RendererSchedulerImpl::OnAudioStateChanged() {
@@ -580,34 +558,6 @@ void RendererSchedulerImpl::OnAudioStateChanged() {
UpdatePolicy();
}
-void RendererSchedulerImpl::SuspendRenderer() {
- helper_.CheckOnValidThread();
- if (helper_.IsShutdown())
- return;
- if (!GetMainThreadOnly().renderer_backgrounded)
- return;
- suspend_timers_when_backgrounded_closure_.Cancel();
-
- UMA_HISTOGRAM_COUNTS("PurgeAndSuspend.PendingTaskCount",
- helper_.GetNumberOfPendingTasks());
-
- // TODO(hajimehoshi): We might need to suspend not only timer queue but also
- // e.g. loading tasks or postMessage.
- GetMainThreadOnly().renderer_suspended = true;
- SuspendTimerQueueWhenBackgrounded();
-}
-
-void RendererSchedulerImpl::ResumeRenderer() {
- helper_.CheckOnValidThread();
- if (helper_.IsShutdown())
- return;
- if (!GetMainThreadOnly().renderer_backgrounded)
- return;
- suspend_timers_when_backgrounded_closure_.Cancel();
- GetMainThreadOnly().renderer_suspended = false;
- ResumeTimerQueueWhenForegroundedOrResumed();
-}
-
void RendererSchedulerImpl::EndIdlePeriod() {
if (GetMainThreadOnly().in_idle_period_for_testing)
return;
@@ -1108,18 +1058,12 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) {
}
GetMainThreadOnly().expensive_task_policy = expensive_task_policy;
- if (GetMainThreadOnly().timer_queue_suspend_count != 0 ||
- GetMainThreadOnly().timer_queue_suspended_when_backgrounded) {
+ if (GetMainThreadOnly().timer_queue_suspend_count != 0) {
new_policy.timer_queue_policy.is_enabled = false;
// TODO(alexclarke): Figure out if we really need to do this.
new_policy.timer_queue_policy.time_domain_type = TimeDomainType::REAL;
}
- if (GetMainThreadOnly().renderer_suspended) {
- new_policy.loading_queue_policy.is_enabled = false;
- DCHECK(!new_policy.timer_queue_policy.is_enabled);
- }
-
if (GetMainThreadOnly().use_virtual_time) {
new_policy.compositor_queue_policy.time_domain_type =
TimeDomainType::VIRTUAL;
@@ -1371,13 +1315,6 @@ void RendererSchedulerImpl::ResumeTimerQueue() {
ForceUpdatePolicy();
}
-void RendererSchedulerImpl::SetTimerQueueSuspensionWhenBackgroundedEnabled(
- bool enabled) {
- // Note that this will only take effect for the next backgrounded signal.
- GetMainThreadOnly().timer_queue_suspension_when_backgrounded_enabled =
- enabled;
-}
-
std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
RendererSchedulerImpl::AsValue(base::TimeTicks optional_now) const {
base::AutoLock lock(any_thread_lock_);
@@ -1452,9 +1389,6 @@ RendererSchedulerImpl::AsValueLocked(base::TimeTicks optional_now) const {
GetMainThreadOnly().have_reported_blocking_intervention_since_navigation);
state->SetBoolean("renderer_backgrounded",
GetMainThreadOnly().renderer_backgrounded);
- state->SetBoolean(
- "timer_queue_suspended_when_backgrounded",
- GetMainThreadOnly().timer_queue_suspended_when_backgrounded);
state->SetInteger("timer_queue_suspend_count",
GetMainThreadOnly().timer_queue_suspend_count);
state->SetDouble("now", (optional_now - base::TimeTicks()).InMillisecondsF());
@@ -1603,27 +1537,6 @@ void RendererSchedulerImpl::OnFirstMeaningfulPaint() {
UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED);
}
-void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() {
- DCHECK(GetMainThreadOnly().renderer_backgrounded);
- if (GetMainThreadOnly().timer_queue_suspended_when_backgrounded)
- return;
-
- GetMainThreadOnly().timer_queue_suspended_when_backgrounded = true;
- ForceUpdatePolicy();
- Platform::Current()->RequestPurgeMemory();
-}
-
-void RendererSchedulerImpl::ResumeTimerQueueWhenForegroundedOrResumed() {
- DCHECK(!GetMainThreadOnly().renderer_backgrounded ||
- (GetMainThreadOnly().renderer_backgrounded &&
- !GetMainThreadOnly().renderer_suspended));
- if (!GetMainThreadOnly().timer_queue_suspended_when_backgrounded)
- return;
-
- GetMainThreadOnly().timer_queue_suspended_when_backgrounded = false;
- ForceUpdatePolicy();
-}
-
void RendererSchedulerImpl::ResetForNavigationLocked() {
helper_.CheckOnValidThread();
any_thread_lock_.AssertAcquired();
@@ -1737,8 +1650,7 @@ void RendererSchedulerImpl::OnTriedToExecuteBlockedTask(
if (GetMainThreadOnly().current_use_case == UseCase::TOUCHSTART ||
GetMainThreadOnly().longest_jank_free_task_duration <
base::TimeDelta::FromMilliseconds(kRailsResponseTimeMillis) ||
- GetMainThreadOnly().timer_queue_suspend_count ||
- GetMainThreadOnly().timer_queue_suspended_when_backgrounded) {
+ GetMainThreadOnly().timer_queue_suspend_count) {
return;
}
if (!GetMainThreadOnly().timer_tasks_seem_expensive &&

Powered by Google App Engine
This is Rietveld 408576698