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

Side by Side Diff: content/renderer/scheduler/renderer_scheduler_impl.cc

Issue 1011103004: [renderer] Enable long idle times in the Blink Scheduler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove peerconnection_call change added for testing on the bots. Created 5 years, 9 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 "content/renderer/scheduler/renderer_scheduler_impl.h" 5 #include "content/renderer/scheduler/renderer_scheduler_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop_proxy.h" 8 #include "base/message_loop/message_loop_proxy.h"
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 #include "base/trace_event/trace_event_argument.h" 10 #include "base/trace_event/trace_event_argument.h"
(...skipping 20 matching lines...) Expand all
31 compositor_task_runner_( 31 compositor_task_runner_(
32 task_queue_manager_->TaskRunnerForQueue(COMPOSITOR_TASK_QUEUE)), 32 task_queue_manager_->TaskRunnerForQueue(COMPOSITOR_TASK_QUEUE)),
33 loading_task_runner_( 33 loading_task_runner_(
34 task_queue_manager_->TaskRunnerForQueue(LOADING_TASK_QUEUE)), 34 task_queue_manager_->TaskRunnerForQueue(LOADING_TASK_QUEUE)),
35 delayed_update_policy_runner_( 35 delayed_update_policy_runner_(
36 base::Bind(&RendererSchedulerImpl::UpdatePolicy, 36 base::Bind(&RendererSchedulerImpl::UpdatePolicy,
37 base::Unretained(this)), 37 base::Unretained(this)),
38 control_task_runner_), 38 control_task_runner_),
39 current_policy_(Policy::NORMAL), 39 current_policy_(Policy::NORMAL),
40 idle_period_state_(IdlePeriodState::NOT_IN_IDLE_PERIOD), 40 idle_period_state_(IdlePeriodState::NOT_IN_IDLE_PERIOD),
41 long_idle_periods_enabled_(false),
42 last_input_type_(blink::WebInputEvent::Undefined), 41 last_input_type_(blink::WebInputEvent::Undefined),
43 input_stream_state_(InputStreamState::INACTIVE), 42 input_stream_state_(InputStreamState::INACTIVE),
44 policy_may_need_update_(&incoming_signals_lock_), 43 policy_may_need_update_(&incoming_signals_lock_),
45 weak_factory_(this) { 44 weak_factory_(this) {
46 weak_renderer_scheduler_ptr_ = weak_factory_.GetWeakPtr(); 45 weak_renderer_scheduler_ptr_ = weak_factory_.GetWeakPtr();
47 update_policy_closure_ = base::Bind(&RendererSchedulerImpl::UpdatePolicy, 46 update_policy_closure_ = base::Bind(&RendererSchedulerImpl::UpdatePolicy,
48 weak_renderer_scheduler_ptr_); 47 weak_renderer_scheduler_ptr_);
49 end_idle_period_closure_.Reset(base::Bind( 48 end_idle_period_closure_.Reset(base::Bind(
50 &RendererSchedulerImpl::EndIdlePeriod, weak_renderer_scheduler_ptr_)); 49 &RendererSchedulerImpl::EndIdlePeriod, weak_renderer_scheduler_ptr_));
51 initiate_next_long_idle_period_closure_.Reset(base::Bind( 50 initiate_next_long_idle_period_closure_.Reset(base::Bind(
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 "InitiateLongIdlePeriod"); 460 "InitiateLongIdlePeriod");
462 DCHECK(main_thread_checker_.CalledOnValidThread()); 461 DCHECK(main_thread_checker_.CalledOnValidThread());
463 462
464 // End any previous idle period. 463 // End any previous idle period.
465 EndIdlePeriod(); 464 EndIdlePeriod();
466 465
467 base::TimeTicks now(Now()); 466 base::TimeTicks now(Now());
468 base::TimeDelta next_long_idle_period_delay; 467 base::TimeDelta next_long_idle_period_delay;
469 IdlePeriodState new_idle_period_state = 468 IdlePeriodState new_idle_period_state =
470 ComputeNewLongIdlePeriodState(now, &next_long_idle_period_delay); 469 ComputeNewLongIdlePeriodState(now, &next_long_idle_period_delay);
471 if (long_idle_periods_enabled_ && IsInIdlePeriod(new_idle_period_state)) { 470 if (IsInIdlePeriod(new_idle_period_state)) {
472 estimated_next_frame_begin_ = now + next_long_idle_period_delay; 471 estimated_next_frame_begin_ = now + next_long_idle_period_delay;
473 StartIdlePeriod(new_idle_period_state); 472 StartIdlePeriod(new_idle_period_state);
474 } 473 }
475 474
476 if (task_queue_manager_->IsQueueEmpty(IDLE_TASK_QUEUE)) { 475 if (task_queue_manager_->IsQueueEmpty(IDLE_TASK_QUEUE)) {
477 // If there are no current idle tasks then post the call to initiate the 476 // If there are no current idle tasks then post the call to initiate the
478 // next idle for execution after wakeup (at which point after-wakeup idle 477 // next idle for execution after wakeup (at which point after-wakeup idle
479 // tasks might be eligible to run or more idle tasks posted). 478 // tasks might be eligible to run or more idle tasks posted).
480 control_task_after_wakeup_runner_->PostDelayedTask( 479 control_task_after_wakeup_runner_->PostDelayedTask(
481 FROM_HERE, 480 FROM_HERE,
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 DCHECK(main_thread_checker_.CalledOnValidThread()); 575 DCHECK(main_thread_checker_.CalledOnValidThread());
577 time_source_ = time_source; 576 time_source_ = time_source;
578 task_queue_manager_->SetTimeSourceForTesting(time_source); 577 task_queue_manager_->SetTimeSourceForTesting(time_source);
579 } 578 }
580 579
581 void RendererSchedulerImpl::SetWorkBatchSizeForTesting(size_t work_batch_size) { 580 void RendererSchedulerImpl::SetWorkBatchSizeForTesting(size_t work_batch_size) {
582 DCHECK(main_thread_checker_.CalledOnValidThread()); 581 DCHECK(main_thread_checker_.CalledOnValidThread());
583 task_queue_manager_->SetWorkBatchSize(work_batch_size); 582 task_queue_manager_->SetWorkBatchSize(work_batch_size);
584 } 583 }
585 584
586 void RendererSchedulerImpl::SetLongIdlePeriodsEnabledForTesting(
587 bool long_idle_periods_enabled) {
588 DCHECK(main_thread_checker_.CalledOnValidThread());
589 long_idle_periods_enabled_ = long_idle_periods_enabled;
590 }
591
592 base::TimeTicks RendererSchedulerImpl::Now() const { 585 base::TimeTicks RendererSchedulerImpl::Now() const {
593 return UNLIKELY(time_source_) ? time_source_->Now() : base::TimeTicks::Now(); 586 return UNLIKELY(time_source_) ? time_source_->Now() : base::TimeTicks::Now();
594 } 587 }
595 588
596 RendererSchedulerImpl::PollableNeedsUpdateFlag::PollableNeedsUpdateFlag( 589 RendererSchedulerImpl::PollableNeedsUpdateFlag::PollableNeedsUpdateFlag(
597 base::Lock* write_lock_) 590 base::Lock* write_lock_)
598 : flag_(false), write_lock_(write_lock_) { 591 : flag_(false), write_lock_(write_lock_) {
599 } 592 }
600 593
601 RendererSchedulerImpl::PollableNeedsUpdateFlag::~PollableNeedsUpdateFlag() { 594 RendererSchedulerImpl::PollableNeedsUpdateFlag::~PollableNeedsUpdateFlag() {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 } 747 }
755 748
756 void RendererSchedulerImpl::RemoveTaskObserver( 749 void RendererSchedulerImpl::RemoveTaskObserver(
757 base::MessageLoop::TaskObserver* task_observer) { 750 base::MessageLoop::TaskObserver* task_observer) {
758 DCHECK(main_thread_checker_.CalledOnValidThread()); 751 DCHECK(main_thread_checker_.CalledOnValidThread());
759 if (task_queue_manager_) 752 if (task_queue_manager_)
760 task_queue_manager_->RemoveTaskObserver(task_observer); 753 task_queue_manager_->RemoveTaskObserver(task_observer);
761 } 754 }
762 755
763 } // namespace content 756 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/scheduler/renderer_scheduler_impl.h ('k') | content/renderer/scheduler/renderer_scheduler_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698