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

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: Use constexpr base::TimeDelta 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 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 return; 471 return;
472 472
473 MainThreadOnly().renderer_backgrounded = false; 473 MainThreadOnly().renderer_backgrounded = false;
474 MainThreadOnly().renderer_suspended = false; 474 MainThreadOnly().renderer_suspended = false;
475 475
476 base::TimeTicks now = tick_clock()->NowTicks(); 476 base::TimeTicks now = tick_clock()->NowTicks();
477 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now); 477 MainThreadOnly().foreground_main_thread_load_tracker.Resume(now);
478 MainThreadOnly().background_main_thread_load_tracker.Pause(now); 478 MainThreadOnly().background_main_thread_load_tracker.Pause(now);
479 479
480 suspend_timers_when_backgrounded_closure_.Cancel(); 480 suspend_timers_when_backgrounded_closure_.Cancel();
481 ResumeTimerQueueWhenForegrounded(); 481 ResumeTimerQueueWhenForegroundedOrResumed();
482 } 482 }
483 483
484 void RendererSchedulerImpl::OnAudioStateChanged() { 484 void RendererSchedulerImpl::OnAudioStateChanged() {
485 bool is_audio_playing = false; 485 bool is_audio_playing = false;
486 for (WebViewSchedulerImpl* web_view_scheduler : 486 for (WebViewSchedulerImpl* web_view_scheduler :
487 MainThreadOnly().web_view_schedulers) { 487 MainThreadOnly().web_view_schedulers) {
488 is_audio_playing = is_audio_playing || web_view_scheduler->IsAudioPlaying(); 488 is_audio_playing = is_audio_playing || web_view_scheduler->IsAudioPlaying();
489 } 489 }
490 490
491 if (is_audio_playing == MainThreadOnly().is_audio_playing) 491 if (is_audio_playing == MainThreadOnly().is_audio_playing)
(...skipping 11 matching lines...) Expand all
503 DCHECK(MainThreadOnly().renderer_backgrounded); 503 DCHECK(MainThreadOnly().renderer_backgrounded);
504 if (helper_.IsShutdown()) 504 if (helper_.IsShutdown())
505 return; 505 return;
506 suspend_timers_when_backgrounded_closure_.Cancel(); 506 suspend_timers_when_backgrounded_closure_.Cancel();
507 // TODO(hajimehoshi): We might need to suspend not only timer queue but also 507 // TODO(hajimehoshi): We might need to suspend not only timer queue but also
508 // e.g. loading tasks or postMessage. 508 // e.g. loading tasks or postMessage.
509 MainThreadOnly().renderer_suspended = true; 509 MainThreadOnly().renderer_suspended = true;
510 SuspendTimerQueueWhenBackgrounded(); 510 SuspendTimerQueueWhenBackgrounded();
511 } 511 }
512 512
513 void RendererSchedulerImpl::ResumeRenderer() {
Sami 2016/10/06 13:10:09 Could you please add a test for this in RendererSc
tasak 2016/10/07 05:31:26 Done.
514 helper_.CheckOnValidThread();
515 DCHECK(MainThreadOnly().renderer_backgrounded);
516 if (helper_.IsShutdown())
517 return;
518 suspend_timers_when_backgrounded_closure_.Cancel();
519 MainThreadOnly().renderer_suspended = false;
520 ResumeTimerQueueWhenForegroundedOrResumed();
521 }
522
513 void RendererSchedulerImpl::EndIdlePeriod() { 523 void RendererSchedulerImpl::EndIdlePeriod() {
514 if (MainThreadOnly().in_idle_period_for_testing) 524 if (MainThreadOnly().in_idle_period_for_testing)
515 return; 525 return;
516 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 526 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
517 "RendererSchedulerImpl::EndIdlePeriod"); 527 "RendererSchedulerImpl::EndIdlePeriod");
518 helper_.CheckOnValidThread(); 528 helper_.CheckOnValidThread();
519 idle_helper_.EndIdlePeriod(); 529 idle_helper_.EndIdlePeriod();
520 } 530 }
521 531
522 void RendererSchedulerImpl::EndIdlePeriodForTesting( 532 void RendererSchedulerImpl::EndIdlePeriodForTesting(
(...skipping 890 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 1423
1414 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { 1424 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() {
1415 DCHECK(MainThreadOnly().renderer_backgrounded); 1425 DCHECK(MainThreadOnly().renderer_backgrounded);
1416 if (MainThreadOnly().timer_queue_suspended_when_backgrounded) 1426 if (MainThreadOnly().timer_queue_suspended_when_backgrounded)
1417 return; 1427 return;
1418 1428
1419 MainThreadOnly().timer_queue_suspended_when_backgrounded = true; 1429 MainThreadOnly().timer_queue_suspended_when_backgrounded = true;
1420 ForceUpdatePolicy(); 1430 ForceUpdatePolicy();
1421 } 1431 }
1422 1432
1423 void RendererSchedulerImpl::ResumeTimerQueueWhenForegrounded() { 1433 void RendererSchedulerImpl::ResumeTimerQueueWhenForegroundedOrResumed() {
1424 DCHECK(!MainThreadOnly().renderer_backgrounded); 1434 DCHECK(!MainThreadOnly().renderer_backgrounded ||
1435 (MainThreadOnly().renderer_backgrounded &&
1436 !MainThreadOnly().renderer_suspended));
1425 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded) 1437 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded)
1426 return; 1438 return;
1427 1439
1428 MainThreadOnly().timer_queue_suspended_when_backgrounded = false; 1440 MainThreadOnly().timer_queue_suspended_when_backgrounded = false;
1429 ForceUpdatePolicy(); 1441 ForceUpdatePolicy();
1430 } 1442 }
1431 1443
1432 void RendererSchedulerImpl::ResetForNavigationLocked() { 1444 void RendererSchedulerImpl::ResetForNavigationLocked() {
1433 helper_.CheckOnValidThread(); 1445 helper_.CheckOnValidThread();
1434 any_thread_lock_.AssertAcquired(); 1446 any_thread_lock_.AssertAcquired();
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
1653 case v8::PERFORMANCE_LOAD: 1665 case v8::PERFORMANCE_LOAD:
1654 return "load"; 1666 return "load";
1655 default: 1667 default:
1656 NOTREACHED(); 1668 NOTREACHED();
1657 return nullptr; 1669 return nullptr;
1658 } 1670 }
1659 } 1671 }
1660 1672
1661 } // namespace scheduler 1673 } // namespace scheduler
1662 } // namespace blink 1674 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698