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

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: Fixed comment. 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 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698