Chromium Code Reviews| 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 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 471 return; | 471 return; |
| 472 | 472 |
| 473 MainThreadOnly().renderer_backgrounded = false; | 473 MainThreadOnly().renderer_backgrounded = false; |
| 474 MainThreadOnly().renderer_suspended = false; | 474 MainThreadOnly().renderer_suspended = false; |
| 475 | 475 |
| 476 base::TimeTicks now = tick_clock()->NowTicks(); | 476 base::TimeTicks now = tick_clock()->NowTicks(); |
| 477 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now); | 477 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now); |
| 478 MainThreadOnly().background_main_thread_load_tracker.Pause(now); | 478 MainThreadOnly().background_main_thread_load_tracker.Pause(now); |
| 479 | 479 |
| 480 suspend_timers_when_backgrounded_closure_.Cancel(); | 480 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 481 ResumeTimerQueueWhenForegrounded(); | 481 ResumeTimerQueueWhenForegroundedOrResumed(); |
| 482 } | 482 } |
| 483 | 483 |
| 484 void RendererSchedulerImpl::OnAudioStateChanged() { | 484 void RendererSchedulerImpl::OnAudioStateChanged() { |
| 485 bool is_audio_playing = false; | 485 bool is_audio_playing = false; |
| 486 for (WebViewSchedulerImpl* web_view_scheduler : | 486 for (WebViewSchedulerImpl* web_view_scheduler : |
| 487 MainThreadOnly().web_view_schedulers) { | 487 MainThreadOnly().web_view_schedulers) { |
| 488 is_audio_playing = is_audio_playing || web_view_scheduler->IsAudioPlaying(); | 488 is_audio_playing = is_audio_playing || web_view_scheduler->IsAudioPlaying(); |
| 489 } | 489 } |
| 490 | 490 |
| 491 if (is_audio_playing == MainThreadOnly().is_audio_playing) | 491 if (is_audio_playing == MainThreadOnly().is_audio_playing) |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 503 DCHECK(MainThreadOnly().renderer_backgrounded); | 503 DCHECK(MainThreadOnly().renderer_backgrounded); |
| 504 if (helper_.IsShutdown()) | 504 if (helper_.IsShutdown()) |
| 505 return; | 505 return; |
| 506 suspend_timers_when_backgrounded_closure_.Cancel(); | 506 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 507 // TODO(hajimehoshi): We might need to suspend not only timer queue but also | 507 // TODO(hajimehoshi): We might need to suspend not only timer queue but also |
| 508 // e.g. loading tasks or postMessage. | 508 // e.g. loading tasks or postMessage. |
| 509 MainThreadOnly().renderer_suspended = true; | 509 MainThreadOnly().renderer_suspended = true; |
| 510 SuspendTimerQueueWhenBackgrounded(); | 510 SuspendTimerQueueWhenBackgrounded(); |
| 511 } | 511 } |
| 512 | 512 |
| 513 void RendererSchedulerImpl::ResumeRenderer() { | |
|
Sami
2016/10/06 13:10:09
Could you please add a test for this in RendererSc
tasak
2016/10/07 05:31:26
Done.
| |
| 514 helper_.CheckOnValidThread(); | |
| 515 DCHECK(MainThreadOnly().renderer_backgrounded); | |
| 516 if (helper_.IsShutdown()) | |
| 517 return; | |
| 518 suspend_timers_when_backgrounded_closure_.Cancel(); | |
| 519 MainThreadOnly().renderer_suspended = false; | |
| 520 ResumeTimerQueueWhenForegroundedOrResumed(); | |
| 521 } | |
| 522 | |
| 513 void RendererSchedulerImpl::EndIdlePeriod() { | 523 void RendererSchedulerImpl::EndIdlePeriod() { |
| 514 if (MainThreadOnly().in_idle_period_for_testing) | 524 if (MainThreadOnly().in_idle_period_for_testing) |
| 515 return; | 525 return; |
| 516 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), | 526 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| 517 "RendererSchedulerImpl::EndIdlePeriod"); | 527 "RendererSchedulerImpl::EndIdlePeriod"); |
| 518 helper_.CheckOnValidThread(); | 528 helper_.CheckOnValidThread(); |
| 519 idle_helper_.EndIdlePeriod(); | 529 idle_helper_.EndIdlePeriod(); |
| 520 } | 530 } |
| 521 | 531 |
| 522 void RendererSchedulerImpl::EndIdlePeriodForTesting( | 532 void RendererSchedulerImpl::EndIdlePeriodForTesting( |
| (...skipping 890 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1413 | 1423 |
| 1414 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { | 1424 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { |
| 1415 DCHECK(MainThreadOnly().renderer_backgrounded); | 1425 DCHECK(MainThreadOnly().renderer_backgrounded); |
| 1416 if (MainThreadOnly().timer_queue_suspended_when_backgrounded) | 1426 if (MainThreadOnly().timer_queue_suspended_when_backgrounded) |
| 1417 return; | 1427 return; |
| 1418 | 1428 |
| 1419 MainThreadOnly().timer_queue_suspended_when_backgrounded = true; | 1429 MainThreadOnly().timer_queue_suspended_when_backgrounded = true; |
| 1420 ForceUpdatePolicy(); | 1430 ForceUpdatePolicy(); |
| 1421 } | 1431 } |
| 1422 | 1432 |
| 1423 void RendererSchedulerImpl::ResumeTimerQueueWhenForegrounded() { | 1433 void RendererSchedulerImpl::ResumeTimerQueueWhenForegroundedOrResumed() { |
| 1424 DCHECK(!MainThreadOnly().renderer_backgrounded); | 1434 DCHECK(!MainThreadOnly().renderer_backgrounded || |
| 1435 (MainThreadOnly().renderer_backgrounded && | |
| 1436 !MainThreadOnly().renderer_suspended)); | |
| 1425 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded) | 1437 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded) |
| 1426 return; | 1438 return; |
| 1427 | 1439 |
| 1428 MainThreadOnly().timer_queue_suspended_when_backgrounded = false; | 1440 MainThreadOnly().timer_queue_suspended_when_backgrounded = false; |
| 1429 ForceUpdatePolicy(); | 1441 ForceUpdatePolicy(); |
| 1430 } | 1442 } |
| 1431 | 1443 |
| 1432 void RendererSchedulerImpl::ResetForNavigationLocked() { | 1444 void RendererSchedulerImpl::ResetForNavigationLocked() { |
| 1433 helper_.CheckOnValidThread(); | 1445 helper_.CheckOnValidThread(); |
| 1434 any_thread_lock_.AssertAcquired(); | 1446 any_thread_lock_.AssertAcquired(); |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1653 case v8::PERFORMANCE_LOAD: | 1665 case v8::PERFORMANCE_LOAD: |
| 1654 return "load"; | 1666 return "load"; |
| 1655 default: | 1667 default: |
| 1656 NOTREACHED(); | 1668 NOTREACHED(); |
| 1657 return nullptr; | 1669 return nullptr; |
| 1658 } | 1670 } |
| 1659 } | 1671 } |
| 1660 | 1672 |
| 1661 } // namespace scheduler | 1673 } // namespace scheduler |
| 1662 } // namespace blink | 1674 } // namespace blink |
| OLD | NEW |