Index: components/scheduler/renderer/renderer_scheduler_impl.cc |
diff --git a/components/scheduler/renderer/renderer_scheduler_impl.cc b/components/scheduler/renderer/renderer_scheduler_impl.cc |
index 306c45cc0a783df4c849963c17ec761c1dc2a490..9f3d9b6ef21a16711e52ff193531d3459aed5064 100644 |
--- a/components/scheduler/renderer/renderer_scheduler_impl.cc |
+++ b/components/scheduler/renderer/renderer_scheduler_impl.cc |
@@ -126,7 +126,8 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly( |
have_reported_blocking_intervention_since_navigation(false), |
has_visible_render_widget_with_touch_handler(false), |
begin_frame_not_expected_soon(false), |
- expensive_task_blocking_allowed(true) {} |
+ expensive_task_blocking_allowed(true), |
+ in_idle_period_for_testing(false) {} |
RendererSchedulerImpl::MainThreadOnly::~MainThreadOnly() {} |
@@ -383,12 +384,22 @@ void RendererSchedulerImpl::OnRendererForegrounded() { |
} |
void RendererSchedulerImpl::EndIdlePeriod() { |
+ if (MainThreadOnly().in_idle_period_for_testing) |
+ return; |
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
"RendererSchedulerImpl::EndIdlePeriod"); |
helper_.CheckOnValidThread(); |
idle_helper_.EndIdlePeriod(); |
} |
+void RendererSchedulerImpl::EndIdlePeriodForTesting( |
+ const base::Closure& callback, |
+ base::TimeTicks time_remaining) { |
+ MainThreadOnly().in_idle_period_for_testing = false; |
+ EndIdlePeriod(); |
+ callback.Run(); |
+} |
+ |
// static |
bool RendererSchedulerImpl::ShouldPrioritizeInputEvent( |
const blink::WebInputEvent& web_input_event) { |
@@ -574,6 +585,16 @@ base::TimeTicks RendererSchedulerImpl::CurrentIdleTaskDeadlineForTesting() |
return idle_helper_.CurrentIdleTaskDeadline(); |
} |
+void RendererSchedulerImpl::RunIdleTasksForTesting( |
+ const base::Closure& callback) { |
+ MainThreadOnly().in_idle_period_for_testing = true; |
+ IdleTaskRunner()->PostIdleTask( |
+ FROM_HERE, |
+ base::Bind(&RendererSchedulerImpl::EndIdlePeriodForTesting, |
+ weak_factory_.GetWeakPtr(), callback)); |
+ idle_helper_.EnableLongIdlePeriod(); |
+} |
+ |
void RendererSchedulerImpl::MaybeUpdatePolicy() { |
helper_.CheckOnValidThread(); |
if (policy_may_need_update_.IsSet()) { |