| 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 "platform/scheduler/renderer/renderer_scheduler_impl.h" | 5 #include "platform/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/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 480 | 480 |
| 481 void RendererSchedulerImpl::OnRendererBackgrounded() { | 481 void RendererSchedulerImpl::OnRendererBackgrounded() { |
| 482 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), | 482 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| 483 "RendererSchedulerImpl::OnRendererBackgrounded"); | 483 "RendererSchedulerImpl::OnRendererBackgrounded"); |
| 484 helper_.CheckOnValidThread(); | 484 helper_.CheckOnValidThread(); |
| 485 if (helper_.IsShutdown() || MainThreadOnly().renderer_backgrounded) | 485 if (helper_.IsShutdown() || MainThreadOnly().renderer_backgrounded) |
| 486 return; | 486 return; |
| 487 | 487 |
| 488 MainThreadOnly().renderer_backgrounded = true; | 488 MainThreadOnly().renderer_backgrounded = true; |
| 489 | 489 |
| 490 UpdatePolicy(); |
| 491 |
| 490 base::TimeTicks now = tick_clock()->NowTicks(); | 492 base::TimeTicks now = tick_clock()->NowTicks(); |
| 491 MainThreadOnly().foreground_main_thread_load_tracker.Pause(now); | 493 MainThreadOnly().foreground_main_thread_load_tracker.Pause(now); |
| 492 MainThreadOnly().background_main_thread_load_tracker.Resume(now); | 494 MainThreadOnly().background_main_thread_load_tracker.Resume(now); |
| 493 | 495 |
| 494 if (!MainThreadOnly().timer_queue_suspension_when_backgrounded_enabled) | 496 if (!MainThreadOnly().timer_queue_suspension_when_backgrounded_enabled) |
| 495 return; | 497 return; |
| 496 | 498 |
| 497 suspend_timers_when_backgrounded_closure_.Cancel(); | 499 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 498 base::TimeDelta suspend_timers_when_backgrounded_delay = | 500 base::TimeDelta suspend_timers_when_backgrounded_delay = |
| 499 base::TimeDelta::FromMilliseconds( | 501 base::TimeDelta::FromMilliseconds( |
| 500 kSuspendTimersWhenBackgroundedDelayMillis); | 502 kSuspendTimersWhenBackgroundedDelayMillis); |
| 501 control_task_runner_->PostDelayedTask( | 503 control_task_runner_->PostDelayedTask( |
| 502 FROM_HERE, suspend_timers_when_backgrounded_closure_.callback(), | 504 FROM_HERE, suspend_timers_when_backgrounded_closure_.callback(), |
| 503 suspend_timers_when_backgrounded_delay); | 505 suspend_timers_when_backgrounded_delay); |
| 504 } | 506 } |
| 505 | 507 |
| 506 void RendererSchedulerImpl::OnRendererForegrounded() { | 508 void RendererSchedulerImpl::OnRendererForegrounded() { |
| 507 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), | 509 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| 508 "RendererSchedulerImpl::OnRendererForegrounded"); | 510 "RendererSchedulerImpl::OnRendererForegrounded"); |
| 509 helper_.CheckOnValidThread(); | 511 helper_.CheckOnValidThread(); |
| 510 if (helper_.IsShutdown() || !MainThreadOnly().renderer_backgrounded) | 512 if (helper_.IsShutdown() || !MainThreadOnly().renderer_backgrounded) |
| 511 return; | 513 return; |
| 512 | 514 |
| 513 MainThreadOnly().renderer_backgrounded = false; | 515 MainThreadOnly().renderer_backgrounded = false; |
| 514 MainThreadOnly().renderer_suspended = false; | 516 MainThreadOnly().renderer_suspended = false; |
| 515 | 517 |
| 518 UpdatePolicy(); |
| 519 |
| 516 base::TimeTicks now = tick_clock()->NowTicks(); | 520 base::TimeTicks now = tick_clock()->NowTicks(); |
| 517 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now); | 521 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now); |
| 518 MainThreadOnly().background_main_thread_load_tracker.Pause(now); | 522 MainThreadOnly().background_main_thread_load_tracker.Pause(now); |
| 519 | 523 |
| 520 suspend_timers_when_backgrounded_closure_.Cancel(); | 524 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 521 ResumeTimerQueueWhenForegroundedOrResumed(); | 525 ResumeTimerQueueWhenForegroundedOrResumed(); |
| 522 } | 526 } |
| 523 | 527 |
| 524 void RendererSchedulerImpl::OnAudioStateChanged() { | 528 void RendererSchedulerImpl::OnAudioStateChanged() { |
| 525 bool is_audio_playing = false; | 529 bool is_audio_playing = false; |
| (...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1066 TimeDomainType::VIRTUAL; | 1070 TimeDomainType::VIRTUAL; |
| 1067 new_policy.default_queue_policy.time_domain_type = TimeDomainType::VIRTUAL; | 1071 new_policy.default_queue_policy.time_domain_type = TimeDomainType::VIRTUAL; |
| 1068 new_policy.loading_queue_policy.time_domain_type = TimeDomainType::VIRTUAL; | 1072 new_policy.loading_queue_policy.time_domain_type = TimeDomainType::VIRTUAL; |
| 1069 new_policy.timer_queue_policy.time_domain_type = TimeDomainType::VIRTUAL; | 1073 new_policy.timer_queue_policy.time_domain_type = TimeDomainType::VIRTUAL; |
| 1070 } | 1074 } |
| 1071 | 1075 |
| 1072 new_policy.should_disable_throttling = | 1076 new_policy.should_disable_throttling = |
| 1073 ShouldDisableThrottlingBecauseOfAudio(now) || | 1077 ShouldDisableThrottlingBecauseOfAudio(now) || |
| 1074 MainThreadOnly().use_virtual_time; | 1078 MainThreadOnly().use_virtual_time; |
| 1075 | 1079 |
| 1080 // TODO(altimin): Consider adding default timer tq to background time |
| 1081 // budget pool. |
| 1082 if (MainThreadOnly().renderer_backgrounded) |
| 1083 new_policy.timer_queue_policy.time_domain_type = TimeDomainType::THROTTLED; |
| 1084 |
| 1076 // Tracing is done before the early out check, because it's quite possible we | 1085 // Tracing is done before the early out check, because it's quite possible we |
| 1077 // will otherwise miss this information in traces. | 1086 // will otherwise miss this information in traces. |
| 1078 CreateTraceEventObjectSnapshotLocked(); | 1087 CreateTraceEventObjectSnapshotLocked(); |
| 1079 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "use_case", | 1088 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "use_case", |
| 1080 use_case); | 1089 use_case); |
| 1081 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "rail_mode", | 1090 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "rail_mode", |
| 1082 new_policy.rail_mode); | 1091 new_policy.rail_mode); |
| 1083 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), | 1092 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| 1084 "touchstart_expected_soon", | 1093 "touchstart_expected_soon", |
| 1085 MainThreadOnly().touchstart_expected_soon); | 1094 MainThreadOnly().touchstart_expected_soon); |
| (...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1808 case TimeDomainType::VIRTUAL: | 1817 case TimeDomainType::VIRTUAL: |
| 1809 return "virtual"; | 1818 return "virtual"; |
| 1810 default: | 1819 default: |
| 1811 NOTREACHED(); | 1820 NOTREACHED(); |
| 1812 return nullptr; | 1821 return nullptr; |
| 1813 } | 1822 } |
| 1814 } | 1823 } |
| 1815 | 1824 |
| 1816 } // namespace scheduler | 1825 } // namespace scheduler |
| 1817 } // namespace blink | 1826 } // namespace blink |
| OLD | NEW |