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 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 474 return; | 474 return; |
| 475 | 475 |
| 476 MainThreadOnly().renderer_backgrounded = false; | 476 MainThreadOnly().renderer_backgrounded = false; |
| 477 MainThreadOnly().renderer_suspended = false; | 477 MainThreadOnly().renderer_suspended = false; |
| 478 | 478 |
| 479 base::TimeTicks now = tick_clock()->NowTicks(); | 479 base::TimeTicks now = tick_clock()->NowTicks(); |
| 480 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now); | 480 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now); |
| 481 MainThreadOnly().background_main_thread_load_tracker.Pause(now); | 481 MainThreadOnly().background_main_thread_load_tracker.Pause(now); |
| 482 | 482 |
| 483 suspend_timers_when_backgrounded_closure_.Cancel(); | 483 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 484 ResumeTimerQueueWhenForegrounded(); | 484 ResumeTimerQueueWhenForegroundedOrResumed(); |
| 485 } | 485 } |
| 486 | 486 |
| 487 void RendererSchedulerImpl::SuspendRenderer() { | 487 void RendererSchedulerImpl::SuspendRenderer() { |
|
altimin
2016/10/20 11:39:20
I'd like to remind you that there is scheduled cal
tasak
2016/10/20 12:35:12
Thank you. So I would like to update SuspendRender
| |
| 488 helper_.CheckOnValidThread(); | 488 helper_.CheckOnValidThread(); |
| 489 DCHECK(MainThreadOnly().renderer_backgrounded); | 489 DCHECK(MainThreadOnly().renderer_backgrounded); |
| 490 if (helper_.IsShutdown()) | 490 if (helper_.IsShutdown()) |
| 491 return; | 491 return; |
| 492 suspend_timers_when_backgrounded_closure_.Cancel(); | 492 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 493 | 493 |
| 494 UMA_HISTOGRAM_COUNTS("PurgeAndSuspend.PendingTaskCount", | 494 UMA_HISTOGRAM_COUNTS("PurgeAndSuspend.PendingTaskCount", |
| 495 helper_.GetNumberOfPendingTasks()); | 495 helper_.GetNumberOfPendingTasks()); |
| 496 | 496 |
| 497 // TODO(hajimehoshi): We might need to suspend not only timer queue but also | 497 // TODO(hajimehoshi): We might need to suspend not only timer queue but also |
| 498 // e.g. loading tasks or postMessage. | 498 // e.g. loading tasks or postMessage. |
| 499 MainThreadOnly().renderer_suspended = true; | 499 MainThreadOnly().renderer_suspended = true; |
| 500 SuspendTimerQueueWhenBackgrounded(); | 500 SuspendTimerQueueWhenBackgrounded(); |
| 501 } | 501 } |
| 502 | 502 |
| 503 void RendererSchedulerImpl::ResumeRenderer() { | |
| 504 helper_.CheckOnValidThread(); | |
| 505 DCHECK(MainThreadOnly().renderer_backgrounded); | |
| 506 if (helper_.IsShutdown()) | |
| 507 return; | |
| 508 suspend_timers_when_backgrounded_closure_.Cancel(); | |
| 509 MainThreadOnly().renderer_suspended = false; | |
| 510 ResumeTimerQueueWhenForegroundedOrResumed(); | |
| 511 } | |
| 512 | |
| 503 void RendererSchedulerImpl::EndIdlePeriod() { | 513 void RendererSchedulerImpl::EndIdlePeriod() { |
| 504 if (MainThreadOnly().in_idle_period_for_testing) | 514 if (MainThreadOnly().in_idle_period_for_testing) |
| 505 return; | 515 return; |
| 506 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), | 516 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| 507 "RendererSchedulerImpl::EndIdlePeriod"); | 517 "RendererSchedulerImpl::EndIdlePeriod"); |
| 508 helper_.CheckOnValidThread(); | 518 helper_.CheckOnValidThread(); |
| 509 idle_helper_.EndIdlePeriod(); | 519 idle_helper_.EndIdlePeriod(); |
| 510 } | 520 } |
| 511 | 521 |
| 512 void RendererSchedulerImpl::EndIdlePeriodForTesting( | 522 void RendererSchedulerImpl::EndIdlePeriodForTesting( |
| (...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1369 | 1379 |
| 1370 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { | 1380 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { |
| 1371 DCHECK(MainThreadOnly().renderer_backgrounded); | 1381 DCHECK(MainThreadOnly().renderer_backgrounded); |
| 1372 if (MainThreadOnly().timer_queue_suspended_when_backgrounded) | 1382 if (MainThreadOnly().timer_queue_suspended_when_backgrounded) |
| 1373 return; | 1383 return; |
| 1374 | 1384 |
| 1375 MainThreadOnly().timer_queue_suspended_when_backgrounded = true; | 1385 MainThreadOnly().timer_queue_suspended_when_backgrounded = true; |
| 1376 ForceUpdatePolicy(); | 1386 ForceUpdatePolicy(); |
| 1377 } | 1387 } |
| 1378 | 1388 |
| 1379 void RendererSchedulerImpl::ResumeTimerQueueWhenForegrounded() { | 1389 void RendererSchedulerImpl::ResumeTimerQueueWhenForegroundedOrResumed() { |
| 1380 DCHECK(!MainThreadOnly().renderer_backgrounded); | 1390 DCHECK(!MainThreadOnly().renderer_backgrounded || |
| 1391 (MainThreadOnly().renderer_backgrounded && | |
| 1392 !MainThreadOnly().renderer_suspended)); | |
| 1381 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded) | 1393 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded) |
| 1382 return; | 1394 return; |
| 1383 | 1395 |
| 1384 MainThreadOnly().timer_queue_suspended_when_backgrounded = false; | 1396 MainThreadOnly().timer_queue_suspended_when_backgrounded = false; |
| 1385 ForceUpdatePolicy(); | 1397 ForceUpdatePolicy(); |
| 1386 } | 1398 } |
| 1387 | 1399 |
| 1388 void RendererSchedulerImpl::ResetForNavigationLocked() { | 1400 void RendererSchedulerImpl::ResetForNavigationLocked() { |
| 1389 helper_.CheckOnValidThread(); | 1401 helper_.CheckOnValidThread(); |
| 1390 any_thread_lock_.AssertAcquired(); | 1402 any_thread_lock_.AssertAcquired(); |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1590 case v8::PERFORMANCE_LOAD: | 1602 case v8::PERFORMANCE_LOAD: |
| 1591 return "load"; | 1603 return "load"; |
| 1592 default: | 1604 default: |
| 1593 NOTREACHED(); | 1605 NOTREACHED(); |
| 1594 return nullptr; | 1606 return nullptr; |
| 1595 } | 1607 } |
| 1596 } | 1608 } |
| 1597 | 1609 |
| 1598 } // namespace scheduler | 1610 } // namespace scheduler |
| 1599 } // namespace blink | 1611 } // namespace blink |
| OLD | NEW |