| 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 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 return; | 481 return; |
| 482 | 482 |
| 483 MainThreadOnly().renderer_backgrounded = false; | 483 MainThreadOnly().renderer_backgrounded = false; |
| 484 MainThreadOnly().renderer_suspended = false; | 484 MainThreadOnly().renderer_suspended = false; |
| 485 | 485 |
| 486 base::TimeTicks now = tick_clock()->NowTicks(); | 486 base::TimeTicks now = tick_clock()->NowTicks(); |
| 487 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now); | 487 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now); |
| 488 MainThreadOnly().background_main_thread_load_tracker.Pause(now); | 488 MainThreadOnly().background_main_thread_load_tracker.Pause(now); |
| 489 | 489 |
| 490 suspend_timers_when_backgrounded_closure_.Cancel(); | 490 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 491 ResumeTimerQueueWhenForegrounded(); | 491 ResumeTimerQueueWhenForegroundedOrResumed(); |
| 492 } | 492 } |
| 493 | 493 |
| 494 void RendererSchedulerImpl::SuspendRenderer() { | 494 void RendererSchedulerImpl::SuspendRenderer() { |
| 495 helper_.CheckOnValidThread(); | 495 helper_.CheckOnValidThread(); |
| 496 DCHECK(MainThreadOnly().renderer_backgrounded); | 496 DCHECK(MainThreadOnly().renderer_backgrounded); |
| 497 if (helper_.IsShutdown()) | 497 if (helper_.IsShutdown()) |
| 498 return; | 498 return; |
| 499 suspend_timers_when_backgrounded_closure_.Cancel(); | 499 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 500 | 500 |
| 501 UMA_HISTOGRAM_COUNTS("PurgeAndSuspend.PendingTaskCount", | 501 UMA_HISTOGRAM_COUNTS("PurgeAndSuspend.PendingTaskCount", |
| 502 helper_.GetNumberOfPendingTasks()); | 502 helper_.GetNumberOfPendingTasks()); |
| 503 | 503 |
| 504 // TODO(hajimehoshi): We might need to suspend not only timer queue but also | 504 // TODO(hajimehoshi): We might need to suspend not only timer queue but also |
| 505 // e.g. loading tasks or postMessage. | 505 // e.g. loading tasks or postMessage. |
| 506 MainThreadOnly().renderer_suspended = true; | 506 MainThreadOnly().renderer_suspended = true; |
| 507 SuspendTimerQueueWhenBackgrounded(); | 507 SuspendTimerQueueWhenBackgrounded(); |
| 508 } | 508 } |
| 509 | 509 |
| 510 void RendererSchedulerImpl::ResumeRenderer() { |
| 511 helper_.CheckOnValidThread(); |
| 512 DCHECK(MainThreadOnly().renderer_backgrounded); |
| 513 if (helper_.IsShutdown()) |
| 514 return; |
| 515 suspend_timers_when_backgrounded_closure_.Cancel(); |
| 516 MainThreadOnly().renderer_suspended = false; |
| 517 ResumeTimerQueueWhenForegroundedOrResumed(); |
| 518 } |
| 519 |
| 510 void RendererSchedulerImpl::EndIdlePeriod() { | 520 void RendererSchedulerImpl::EndIdlePeriod() { |
| 511 if (MainThreadOnly().in_idle_period_for_testing) | 521 if (MainThreadOnly().in_idle_period_for_testing) |
| 512 return; | 522 return; |
| 513 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), | 523 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| 514 "RendererSchedulerImpl::EndIdlePeriod"); | 524 "RendererSchedulerImpl::EndIdlePeriod"); |
| 515 helper_.CheckOnValidThread(); | 525 helper_.CheckOnValidThread(); |
| 516 idle_helper_.EndIdlePeriod(); | 526 idle_helper_.EndIdlePeriod(); |
| 517 } | 527 } |
| 518 | 528 |
| 519 void RendererSchedulerImpl::EndIdlePeriodForTesting( | 529 void RendererSchedulerImpl::EndIdlePeriodForTesting( |
| (...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1376 | 1386 |
| 1377 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { | 1387 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { |
| 1378 DCHECK(MainThreadOnly().renderer_backgrounded); | 1388 DCHECK(MainThreadOnly().renderer_backgrounded); |
| 1379 if (MainThreadOnly().timer_queue_suspended_when_backgrounded) | 1389 if (MainThreadOnly().timer_queue_suspended_when_backgrounded) |
| 1380 return; | 1390 return; |
| 1381 | 1391 |
| 1382 MainThreadOnly().timer_queue_suspended_when_backgrounded = true; | 1392 MainThreadOnly().timer_queue_suspended_when_backgrounded = true; |
| 1383 ForceUpdatePolicy(); | 1393 ForceUpdatePolicy(); |
| 1384 } | 1394 } |
| 1385 | 1395 |
| 1386 void RendererSchedulerImpl::ResumeTimerQueueWhenForegrounded() { | 1396 void RendererSchedulerImpl::ResumeTimerQueueWhenForegroundedOrResumed() { |
| 1387 DCHECK(!MainThreadOnly().renderer_backgrounded); | 1397 DCHECK(!MainThreadOnly().renderer_backgrounded || |
| 1398 (MainThreadOnly().renderer_backgrounded && |
| 1399 !MainThreadOnly().renderer_suspended)); |
| 1388 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded) | 1400 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded) |
| 1389 return; | 1401 return; |
| 1390 | 1402 |
| 1391 MainThreadOnly().timer_queue_suspended_when_backgrounded = false; | 1403 MainThreadOnly().timer_queue_suspended_when_backgrounded = false; |
| 1392 ForceUpdatePolicy(); | 1404 ForceUpdatePolicy(); |
| 1393 } | 1405 } |
| 1394 | 1406 |
| 1395 void RendererSchedulerImpl::ResetForNavigationLocked() { | 1407 void RendererSchedulerImpl::ResetForNavigationLocked() { |
| 1396 helper_.CheckOnValidThread(); | 1408 helper_.CheckOnValidThread(); |
| 1397 any_thread_lock_.AssertAcquired(); | 1409 any_thread_lock_.AssertAcquired(); |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1600 case v8::PERFORMANCE_LOAD: | 1612 case v8::PERFORMANCE_LOAD: |
| 1601 return "load"; | 1613 return "load"; |
| 1602 default: | 1614 default: |
| 1603 NOTREACHED(); | 1615 NOTREACHED(); |
| 1604 return nullptr; | 1616 return nullptr; |
| 1605 } | 1617 } |
| 1606 } | 1618 } |
| 1607 | 1619 |
| 1608 } // namespace scheduler | 1620 } // namespace scheduler |
| 1609 } // namespace blink | 1621 } // namespace blink |
| OLD | NEW |