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..0420a7247a19783ee17bfb5702896ac63c44ed6e 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) |
rmcilroy
2016/04/06 23:17:53
Is this necessary given you are using a long idle
szager1
2016/04/06 23:28:39
It's my hope that runIdleTasks will also be useful
rmcilroy
2016/04/07 08:48:38
Ahh I see. I guess it doesn't hurt to ensure runId
|
+ return; |
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
"RendererSchedulerImpl::EndIdlePeriod"); |
helper_.CheckOnValidThread(); |
idle_helper_.EndIdlePeriod(); |
} |
+void RendererSchedulerImpl::EndIdlePeriodForTesting( |
+ const base::Closure& callback) { |
+ MainThreadOnly().in_idle_period_for_testing = false; |
+ TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
+ "RendererSchedulerImpl::EndIdlePeriodForTesting"); |
+ callback.Run(); |
rmcilroy
2016/04/06 23:17:53
You probably need to explicitly call EndIdlePeriod
szager1
2016/04/06 23:28:39
This method is only invoked from IdleHelper::EndId
rmcilroy
2016/04/07 08:48:38
Ahh, missed this. I'm wondering if it would make s
|
+} |
+ |
// static |
bool RendererSchedulerImpl::ShouldPrioritizeInputEvent( |
const blink::WebInputEvent& web_input_event) { |
@@ -574,6 +585,15 @@ base::TimeTicks RendererSchedulerImpl::CurrentIdleTaskDeadlineForTesting() |
return idle_helper_.CurrentIdleTaskDeadline(); |
} |
+void RendererSchedulerImpl::RunIdleTasksForTesting( |
+ const base::Closure& callback) { |
+ MainThreadOnly().in_idle_period_for_testing = true; |
+ idle_helper_.RunIdleTasksForTesting( |
+ base::Bind(&RendererSchedulerImpl::EndIdlePeriodForTesting, |
+ weak_factory_.GetWeakPtr(), |
+ callback)); |
+} |
+ |
void RendererSchedulerImpl::MaybeUpdatePolicy() { |
helper_.CheckOnValidThread(); |
if (policy_may_need_update_.IsSet()) { |