OLD | NEW |
---|---|
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 11 matching lines...) Expand all Loading... | |
22 // The run time of loading tasks is strongly bimodal. The vast majority are | 22 // The run time of loading tasks is strongly bimodal. The vast majority are |
23 // very cheap, but there are usually a handful of very expensive tasks (e.g ~1 | 23 // very cheap, but there are usually a handful of very expensive tasks (e.g ~1 |
24 // second on a mobile device) so we take a very pesimistic view when estimating | 24 // second on a mobile device) so we take a very pesimistic view when estimating |
25 // the cost of loading tasks. | 25 // the cost of loading tasks. |
26 const int kLoadingTaskEstimationSampleCount = 1000; | 26 const int kLoadingTaskEstimationSampleCount = 1000; |
27 const double kLoadingTaskEstimationPercentile = 99; | 27 const double kLoadingTaskEstimationPercentile = 99; |
28 const int kTimerTaskEstimationSampleCount = 1000; | 28 const int kTimerTaskEstimationSampleCount = 1000; |
29 const double kTimerTaskEstimationPercentile = 99; | 29 const double kTimerTaskEstimationPercentile = 99; |
30 const int kShortIdlePeriodDurationSampleCount = 10; | 30 const int kShortIdlePeriodDurationSampleCount = 10; |
31 const double kShortIdlePeriodDurationPercentile = 50; | 31 const double kShortIdlePeriodDurationPercentile = 50; |
32 | |
Sami
2016/04/06 15:52:37
Accidental change?
szager1
2016/04/06 17:55:30
Yes, reverted
| |
32 } | 33 } |
33 | 34 |
34 RendererSchedulerImpl::RendererSchedulerImpl( | 35 RendererSchedulerImpl::RendererSchedulerImpl( |
35 scoped_refptr<SchedulerTqmDelegate> main_task_runner) | 36 scoped_refptr<SchedulerTqmDelegate> main_task_runner) |
36 : helper_(main_task_runner, | 37 : helper_(main_task_runner, |
37 "renderer.scheduler", | 38 "renderer.scheduler", |
38 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), | 39 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
39 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler.debug")), | 40 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler.debug")), |
40 idle_helper_(&helper_, | 41 idle_helper_(&helper_, |
41 this, | 42 this, |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
119 timer_queue_suspended_when_backgrounded(false), | 120 timer_queue_suspended_when_backgrounded(false), |
120 was_shutdown(false), | 121 was_shutdown(false), |
121 loading_tasks_seem_expensive(false), | 122 loading_tasks_seem_expensive(false), |
122 timer_tasks_seem_expensive(false), | 123 timer_tasks_seem_expensive(false), |
123 touchstart_expected_soon(false), | 124 touchstart_expected_soon(false), |
124 have_seen_a_begin_main_frame(false), | 125 have_seen_a_begin_main_frame(false), |
125 have_reported_blocking_intervention_in_current_policy(false), | 126 have_reported_blocking_intervention_in_current_policy(false), |
126 have_reported_blocking_intervention_since_navigation(false), | 127 have_reported_blocking_intervention_since_navigation(false), |
127 has_visible_render_widget_with_touch_handler(false), | 128 has_visible_render_widget_with_touch_handler(false), |
128 begin_frame_not_expected_soon(false), | 129 begin_frame_not_expected_soon(false), |
129 expensive_task_blocking_allowed(true) {} | 130 expensive_task_blocking_allowed(true), |
131 in_idle_period_for_testing(false) {} | |
130 | 132 |
131 RendererSchedulerImpl::MainThreadOnly::~MainThreadOnly() {} | 133 RendererSchedulerImpl::MainThreadOnly::~MainThreadOnly() {} |
132 | 134 |
133 RendererSchedulerImpl::AnyThread::AnyThread() | 135 RendererSchedulerImpl::AnyThread::AnyThread() |
134 : awaiting_touch_start_response(false), | 136 : awaiting_touch_start_response(false), |
135 in_idle_period(false), | 137 in_idle_period(false), |
136 begin_main_frame_on_critical_path(false), | 138 begin_main_frame_on_critical_path(false), |
137 last_gesture_was_compositor_driven(false), | 139 last_gesture_was_compositor_driven(false), |
138 have_seen_touchstart(false) {} | 140 have_seen_touchstart(false) {} |
139 | 141 |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
376 helper_.CheckOnValidThread(); | 378 helper_.CheckOnValidThread(); |
377 if (helper_.IsShutdown() || !MainThreadOnly().renderer_backgrounded) | 379 if (helper_.IsShutdown() || !MainThreadOnly().renderer_backgrounded) |
378 return; | 380 return; |
379 | 381 |
380 MainThreadOnly().renderer_backgrounded = false; | 382 MainThreadOnly().renderer_backgrounded = false; |
381 suspend_timers_when_backgrounded_closure_.Cancel(); | 383 suspend_timers_when_backgrounded_closure_.Cancel(); |
382 ResumeTimerQueueWhenForegrounded(); | 384 ResumeTimerQueueWhenForegrounded(); |
383 } | 385 } |
384 | 386 |
385 void RendererSchedulerImpl::EndIdlePeriod() { | 387 void RendererSchedulerImpl::EndIdlePeriod() { |
388 if (MainThreadOnly().in_idle_period_for_testing) | |
389 return; | |
386 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), | 390 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
387 "RendererSchedulerImpl::EndIdlePeriod"); | 391 "RendererSchedulerImpl::EndIdlePeriod"); |
388 helper_.CheckOnValidThread(); | 392 helper_.CheckOnValidThread(); |
389 idle_helper_.EndIdlePeriod(); | 393 idle_helper_.EndIdlePeriod(); |
390 } | 394 } |
391 | 395 |
396 void RendererSchedulerImpl::EndIdlePeriodForTesting( | |
397 const base::Closure& callback, | |
398 base::TimeTicks time_remaining) { | |
399 MainThreadOnly().in_idle_period_for_testing = false; | |
400 EndIdlePeriod(); | |
401 callback.Run(); | |
402 } | |
403 | |
392 // static | 404 // static |
393 bool RendererSchedulerImpl::ShouldPrioritizeInputEvent( | 405 bool RendererSchedulerImpl::ShouldPrioritizeInputEvent( |
394 const blink::WebInputEvent& web_input_event) { | 406 const blink::WebInputEvent& web_input_event) { |
395 // We regard MouseMove events with the left mouse button down as a signal | 407 // 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. | 408 // that the user is doing something requiring a smooth frame rate. |
397 if (web_input_event.type == blink::WebInputEvent::MouseMove && | 409 if (web_input_event.type == blink::WebInputEvent::MouseMove && |
398 (web_input_event.modifiers & blink::WebInputEvent::LeftButtonDown)) { | 410 (web_input_event.modifiers & blink::WebInputEvent::LeftButtonDown)) { |
399 return true; | 411 return true; |
400 } | 412 } |
401 // Ignore all other mouse events because they probably don't signal user | 413 // Ignore all other mouse events because they probably don't signal user |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
567 NOTREACHED(); | 579 NOTREACHED(); |
568 return false; | 580 return false; |
569 } | 581 } |
570 } | 582 } |
571 | 583 |
572 base::TimeTicks RendererSchedulerImpl::CurrentIdleTaskDeadlineForTesting() | 584 base::TimeTicks RendererSchedulerImpl::CurrentIdleTaskDeadlineForTesting() |
573 const { | 585 const { |
574 return idle_helper_.CurrentIdleTaskDeadline(); | 586 return idle_helper_.CurrentIdleTaskDeadline(); |
575 } | 587 } |
576 | 588 |
589 void RendererSchedulerImpl::RunIdleTasksForTesting( | |
590 const base::Closure& callback) { | |
591 MainThreadOnly().in_idle_period_for_testing = true; | |
592 IdleTaskRunner()->PostIdleTask( | |
593 FROM_HERE, | |
594 base::Bind(&RendererSchedulerImpl::EndIdlePeriodForTesting, | |
595 weak_factory_.GetWeakPtr(), callback)); | |
596 idle_helper_.EnableLongIdlePeriod(); | |
597 } | |
598 | |
577 void RendererSchedulerImpl::MaybeUpdatePolicy() { | 599 void RendererSchedulerImpl::MaybeUpdatePolicy() { |
578 helper_.CheckOnValidThread(); | 600 helper_.CheckOnValidThread(); |
579 if (policy_may_need_update_.IsSet()) { | 601 if (policy_may_need_update_.IsSet()) { |
580 UpdatePolicy(); | 602 UpdatePolicy(); |
581 } | 603 } |
582 } | 604 } |
583 | 605 |
584 void RendererSchedulerImpl::EnsureUrgentPolicyUpdatePostedOnMainThread( | 606 void RendererSchedulerImpl::EnsureUrgentPolicyUpdatePostedOnMainThread( |
585 const tracked_objects::Location& from_here) { | 607 const tracked_objects::Location& from_here) { |
586 // TODO(scheduler-dev): Check that this method isn't called from the main | 608 // 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 Loading... | |
1223 } | 1245 } |
1224 MainThreadOnly().have_reported_blocking_intervention_since_navigation = | 1246 MainThreadOnly().have_reported_blocking_intervention_since_navigation = |
1225 true; | 1247 true; |
1226 BroadcastConsoleWarning( | 1248 BroadcastConsoleWarning( |
1227 "Deferred long-running timer task(s) to improve scrolling smoothness. " | 1249 "Deferred long-running timer task(s) to improve scrolling smoothness. " |
1228 "See crbug.com/574343."); | 1250 "See crbug.com/574343."); |
1229 } | 1251 } |
1230 } | 1252 } |
1231 | 1253 |
1232 } // namespace scheduler | 1254 } // namespace scheduler |
OLD | NEW |