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

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

Issue 2442663002: Add ResumeRenderer to RendererScheduler for Purge+Suspend. (Closed)
Patch Set: Fixed comment. Created 4 years, 1 month 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 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698