| 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 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 466 return; | 466 return; |
| 467 | 467 |
| 468 MainThreadOnly().renderer_backgrounded = false; | 468 MainThreadOnly().renderer_backgrounded = false; |
| 469 MainThreadOnly().renderer_suspended = false; | 469 MainThreadOnly().renderer_suspended = false; |
| 470 | 470 |
| 471 base::TimeTicks now = tick_clock()->NowTicks(); | 471 base::TimeTicks now = tick_clock()->NowTicks(); |
| 472 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now); | 472 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now); |
| 473 MainThreadOnly().background_main_thread_load_tracker.Pause(now); | 473 MainThreadOnly().background_main_thread_load_tracker.Pause(now); |
| 474 | 474 |
| 475 suspend_timers_when_backgrounded_closure_.Cancel(); | 475 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 476 ResumeTimerQueueWhenForegrounded(); | 476 ResumeTimerQueueWhenForegroundedOrResumed(); |
| 477 } | 477 } |
| 478 | 478 |
| 479 void RendererSchedulerImpl::SuspendRenderer() { | 479 void RendererSchedulerImpl::SuspendRenderer() { |
| 480 helper_.CheckOnValidThread(); | 480 helper_.CheckOnValidThread(); |
| 481 DCHECK(MainThreadOnly().renderer_backgrounded); | 481 DCHECK(MainThreadOnly().renderer_backgrounded); |
| 482 if (helper_.IsShutdown()) | 482 if (helper_.IsShutdown()) |
| 483 return; | 483 return; |
| 484 suspend_timers_when_backgrounded_closure_.Cancel(); | 484 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 485 // TODO(hajimehoshi): We might need to suspend not only timer queue but also | 485 // TODO(hajimehoshi): We might need to suspend not only timer queue but also |
| 486 // e.g. loading tasks or postMessage. | 486 // e.g. loading tasks or postMessage. |
| 487 MainThreadOnly().renderer_suspended = true; | 487 MainThreadOnly().renderer_suspended = true; |
| 488 SuspendTimerQueueWhenBackgrounded(); | 488 SuspendTimerQueueWhenBackgrounded(); |
| 489 } | 489 } |
| 490 | 490 |
| 491 void RendererSchedulerImpl::ResumeRenderer() { |
| 492 helper_.CheckOnValidThread(); |
| 493 DCHECK(MainThreadOnly().renderer_backgrounded); |
| 494 if (helper_.IsShutdown()) |
| 495 return; |
| 496 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 497 MainThreadOnly().renderer_suspended = false; |
| 498 ResumeTimerQueueWhenForegroundedOrResumed(); |
| 499 } |
| 500 |
| 491 void RendererSchedulerImpl::EndIdlePeriod() { | 501 void RendererSchedulerImpl::EndIdlePeriod() { |
| 492 if (MainThreadOnly().in_idle_period_for_testing) | 502 if (MainThreadOnly().in_idle_period_for_testing) |
| 493 return; | 503 return; |
| 494 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), | 504 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| 495 "RendererSchedulerImpl::EndIdlePeriod"); | 505 "RendererSchedulerImpl::EndIdlePeriod"); |
| 496 helper_.CheckOnValidThread(); | 506 helper_.CheckOnValidThread(); |
| 497 idle_helper_.EndIdlePeriod(); | 507 idle_helper_.EndIdlePeriod(); |
| 498 } | 508 } |
| 499 | 509 |
| 500 void RendererSchedulerImpl::EndIdlePeriodForTesting( | 510 void RendererSchedulerImpl::EndIdlePeriodForTesting( |
| (...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1357 | 1367 |
| 1358 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { | 1368 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { |
| 1359 DCHECK(MainThreadOnly().renderer_backgrounded); | 1369 DCHECK(MainThreadOnly().renderer_backgrounded); |
| 1360 if (MainThreadOnly().timer_queue_suspended_when_backgrounded) | 1370 if (MainThreadOnly().timer_queue_suspended_when_backgrounded) |
| 1361 return; | 1371 return; |
| 1362 | 1372 |
| 1363 MainThreadOnly().timer_queue_suspended_when_backgrounded = true; | 1373 MainThreadOnly().timer_queue_suspended_when_backgrounded = true; |
| 1364 ForceUpdatePolicy(); | 1374 ForceUpdatePolicy(); |
| 1365 } | 1375 } |
| 1366 | 1376 |
| 1367 void RendererSchedulerImpl::ResumeTimerQueueWhenForegrounded() { | 1377 void RendererSchedulerImpl::ResumeTimerQueueWhenForegroundedOrResumed() { |
| 1368 DCHECK(!MainThreadOnly().renderer_backgrounded); | 1378 DCHECK(!MainThreadOnly().renderer_backgrounded || |
| 1379 (MainThreadOnly().renderer_backgrounded && |
| 1380 !MainThreadOnly().renderer_suspended)); |
| 1369 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded) | 1381 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded) |
| 1370 return; | 1382 return; |
| 1371 | 1383 |
| 1372 MainThreadOnly().timer_queue_suspended_when_backgrounded = false; | 1384 MainThreadOnly().timer_queue_suspended_when_backgrounded = false; |
| 1373 ForceUpdatePolicy(); | 1385 ForceUpdatePolicy(); |
| 1374 } | 1386 } |
| 1375 | 1387 |
| 1376 void RendererSchedulerImpl::ResetForNavigationLocked() { | 1388 void RendererSchedulerImpl::ResetForNavigationLocked() { |
| 1377 helper_.CheckOnValidThread(); | 1389 helper_.CheckOnValidThread(); |
| 1378 any_thread_lock_.AssertAcquired(); | 1390 any_thread_lock_.AssertAcquired(); |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1578 case v8::PERFORMANCE_LOAD: | 1590 case v8::PERFORMANCE_LOAD: |
| 1579 return "load"; | 1591 return "load"; |
| 1580 default: | 1592 default: |
| 1581 NOTREACHED(); | 1593 NOTREACHED(); |
| 1582 return nullptr; | 1594 return nullptr; |
| 1583 } | 1595 } |
| 1584 } | 1596 } |
| 1585 | 1597 |
| 1586 } // namespace scheduler | 1598 } // namespace scheduler |
| 1587 } // namespace blink | 1599 } // namespace blink |
| OLD | NEW |