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

Side by Side Diff: components/scheduler/renderer/renderer_scheduler_impl.cc

Issue 1832673002: Add testRunner.runIdleTasks() to force idle tasks to run. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: rebase Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/scheduler/renderer/renderer_scheduler_impl.h" 5 #include "components/scheduler/renderer/renderer_scheduler_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/debug/stack_trace.h" 8 #include "base/debug/stack_trace.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 timer_queue_suspended_when_backgrounded(false), 119 timer_queue_suspended_when_backgrounded(false),
120 was_shutdown(false), 120 was_shutdown(false),
121 loading_tasks_seem_expensive(false), 121 loading_tasks_seem_expensive(false),
122 timer_tasks_seem_expensive(false), 122 timer_tasks_seem_expensive(false),
123 touchstart_expected_soon(false), 123 touchstart_expected_soon(false),
124 have_seen_a_begin_main_frame(false), 124 have_seen_a_begin_main_frame(false),
125 have_reported_blocking_intervention_in_current_policy(false), 125 have_reported_blocking_intervention_in_current_policy(false),
126 have_reported_blocking_intervention_since_navigation(false), 126 have_reported_blocking_intervention_since_navigation(false),
127 has_visible_render_widget_with_touch_handler(false), 127 has_visible_render_widget_with_touch_handler(false),
128 begin_frame_not_expected_soon(false), 128 begin_frame_not_expected_soon(false),
129 expensive_task_blocking_allowed(true) {} 129 expensive_task_blocking_allowed(true),
130 in_idle_period_for_testing(false) {}
130 131
131 RendererSchedulerImpl::MainThreadOnly::~MainThreadOnly() {} 132 RendererSchedulerImpl::MainThreadOnly::~MainThreadOnly() {}
132 133
133 RendererSchedulerImpl::AnyThread::AnyThread() 134 RendererSchedulerImpl::AnyThread::AnyThread()
134 : awaiting_touch_start_response(false), 135 : awaiting_touch_start_response(false),
135 in_idle_period(false), 136 in_idle_period(false),
136 begin_main_frame_on_critical_path(false), 137 begin_main_frame_on_critical_path(false),
137 last_gesture_was_compositor_driven(false), 138 last_gesture_was_compositor_driven(false),
138 have_seen_touchstart(false) {} 139 have_seen_touchstart(false) {}
139 140
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 helper_.CheckOnValidThread(); 377 helper_.CheckOnValidThread();
377 if (helper_.IsShutdown() || !MainThreadOnly().renderer_backgrounded) 378 if (helper_.IsShutdown() || !MainThreadOnly().renderer_backgrounded)
378 return; 379 return;
379 380
380 MainThreadOnly().renderer_backgrounded = false; 381 MainThreadOnly().renderer_backgrounded = false;
381 suspend_timers_when_backgrounded_closure_.Cancel(); 382 suspend_timers_when_backgrounded_closure_.Cancel();
382 ResumeTimerQueueWhenForegrounded(); 383 ResumeTimerQueueWhenForegrounded();
383 } 384 }
384 385
385 void RendererSchedulerImpl::EndIdlePeriod() { 386 void RendererSchedulerImpl::EndIdlePeriod() {
387 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
388 return;
386 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 389 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
387 "RendererSchedulerImpl::EndIdlePeriod"); 390 "RendererSchedulerImpl::EndIdlePeriod");
388 helper_.CheckOnValidThread(); 391 helper_.CheckOnValidThread();
389 idle_helper_.EndIdlePeriod(); 392 idle_helper_.EndIdlePeriod();
390 } 393 }
391 394
395 void RendererSchedulerImpl::EndIdlePeriodForTesting(
396 const base::Closure& callback) {
397 MainThreadOnly().in_idle_period_for_testing = false;
398 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
399 "RendererSchedulerImpl::EndIdlePeriodForTesting");
400 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
401 }
402
392 // static 403 // static
393 bool RendererSchedulerImpl::ShouldPrioritizeInputEvent( 404 bool RendererSchedulerImpl::ShouldPrioritizeInputEvent(
394 const blink::WebInputEvent& web_input_event) { 405 const blink::WebInputEvent& web_input_event) {
395 // We regard MouseMove events with the left mouse button down as a signal 406 // We regard MouseMove events with the left mouse button down as a signal
396 // that the user is doing something requiring a smooth frame rate. 407 // that the user is doing something requiring a smooth frame rate.
397 if (web_input_event.type == blink::WebInputEvent::MouseMove && 408 if (web_input_event.type == blink::WebInputEvent::MouseMove &&
398 (web_input_event.modifiers & blink::WebInputEvent::LeftButtonDown)) { 409 (web_input_event.modifiers & blink::WebInputEvent::LeftButtonDown)) {
399 return true; 410 return true;
400 } 411 }
401 // Ignore all other mouse events because they probably don't signal user 412 // Ignore all other mouse events because they probably don't signal user
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 NOTREACHED(); 578 NOTREACHED();
568 return false; 579 return false;
569 } 580 }
570 } 581 }
571 582
572 base::TimeTicks RendererSchedulerImpl::CurrentIdleTaskDeadlineForTesting() 583 base::TimeTicks RendererSchedulerImpl::CurrentIdleTaskDeadlineForTesting()
573 const { 584 const {
574 return idle_helper_.CurrentIdleTaskDeadline(); 585 return idle_helper_.CurrentIdleTaskDeadline();
575 } 586 }
576 587
588 void RendererSchedulerImpl::RunIdleTasksForTesting(
589 const base::Closure& callback) {
590 MainThreadOnly().in_idle_period_for_testing = true;
591 idle_helper_.RunIdleTasksForTesting(
592 base::Bind(&RendererSchedulerImpl::EndIdlePeriodForTesting,
593 weak_factory_.GetWeakPtr(),
594 callback));
595 }
596
577 void RendererSchedulerImpl::MaybeUpdatePolicy() { 597 void RendererSchedulerImpl::MaybeUpdatePolicy() {
578 helper_.CheckOnValidThread(); 598 helper_.CheckOnValidThread();
579 if (policy_may_need_update_.IsSet()) { 599 if (policy_may_need_update_.IsSet()) {
580 UpdatePolicy(); 600 UpdatePolicy();
581 } 601 }
582 } 602 }
583 603
584 void RendererSchedulerImpl::EnsureUrgentPolicyUpdatePostedOnMainThread( 604 void RendererSchedulerImpl::EnsureUrgentPolicyUpdatePostedOnMainThread(
585 const tracked_objects::Location& from_here) { 605 const tracked_objects::Location& from_here) {
586 // TODO(scheduler-dev): Check that this method isn't called from the main 606 // TODO(scheduler-dev): Check that this method isn't called from the main
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 } 1243 }
1224 MainThreadOnly().have_reported_blocking_intervention_since_navigation = 1244 MainThreadOnly().have_reported_blocking_intervention_since_navigation =
1225 true; 1245 true;
1226 BroadcastConsoleWarning( 1246 BroadcastConsoleWarning(
1227 "Deferred long-running timer task(s) to improve scrolling smoothness. " 1247 "Deferred long-running timer task(s) to improve scrolling smoothness. "
1228 "See crbug.com/574343."); 1248 "See crbug.com/574343.");
1229 } 1249 }
1230 } 1250 }
1231 1251
1232 } // namespace scheduler 1252 } // namespace scheduler
OLDNEW
« no previous file with comments | « components/scheduler/renderer/renderer_scheduler_impl.h ('k') | components/scheduler/scheduler.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698