Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(637)

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc

Issue 2387603003: Resume a backgrounded renderer that was purged and suspended (Closed)
Patch Set: Added transition: => RUNNING Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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() {
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698