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

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

Issue 1151353003: [scheduler]: Avoid waking up the scheduler to end long idle periods. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@end_idle_sync_2
Patch Set: Fix Win for realz hopefully... Created 5 years, 6 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 "components/scheduler/renderer/renderer_scheduler_impl.h" 5 #include "components/scheduler/renderer/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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 helper_.CheckOnValidThread(); 129 helper_.CheckOnValidThread();
130 if (helper_.IsShutdown()) 130 if (helper_.IsShutdown())
131 return; 131 return;
132 132
133 base::TimeTicks now(helper_.Now()); 133 base::TimeTicks now(helper_.Now());
134 if (now < estimated_next_frame_begin_) { 134 if (now < estimated_next_frame_begin_) {
135 // TODO(rmcilroy): Consider reducing the idle period based on the runtime of 135 // TODO(rmcilroy): Consider reducing the idle period based on the runtime of
136 // the next pending delayed tasks (as currently done in for long idle times) 136 // the next pending delayed tasks (as currently done in for long idle times)
137 idle_helper_.StartIdlePeriod( 137 idle_helper_.StartIdlePeriod(
138 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, now, 138 IdleHelper::IdlePeriodState::IN_SHORT_IDLE_PERIOD, now,
139 estimated_next_frame_begin_, true); 139 estimated_next_frame_begin_);
140 } 140 }
141 } 141 }
142 142
143 void RendererSchedulerImpl::BeginFrameNotExpectedSoon() { 143 void RendererSchedulerImpl::BeginFrameNotExpectedSoon() {
144 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 144 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
145 "RendererSchedulerImpl::BeginFrameNotExpectedSoon"); 145 "RendererSchedulerImpl::BeginFrameNotExpectedSoon");
146 helper_.CheckOnValidThread(); 146 helper_.CheckOnValidThread();
147 if (helper_.IsShutdown()) 147 if (helper_.IsShutdown())
148 return; 148 return;
149 149
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 return true; 297 return true;
298 298
299 default: 299 default:
300 NOTREACHED(); 300 NOTREACHED();
301 return false; 301 return false;
302 } 302 }
303 } 303 }
304 304
305 base::TimeTicks RendererSchedulerImpl::CurrentIdleTaskDeadlineForTesting() 305 base::TimeTicks RendererSchedulerImpl::CurrentIdleTaskDeadlineForTesting()
306 const { 306 const {
307 base::TimeTicks deadline; 307 return idle_helper_.CurrentIdleTaskDeadline();
308 idle_helper_.CurrentIdleTaskDeadlineCallback(&deadline);
309 return deadline;
310 } 308 }
311 309
312 RendererSchedulerImpl::Policy RendererSchedulerImpl::SchedulerPolicy() const { 310 RendererSchedulerImpl::Policy RendererSchedulerImpl::SchedulerPolicy() const {
313 helper_.CheckOnValidThread(); 311 helper_.CheckOnValidThread();
314 return current_policy_; 312 return current_policy_;
315 } 313 }
316 314
317 void RendererSchedulerImpl::MaybeUpdatePolicy() { 315 void RendererSchedulerImpl::MaybeUpdatePolicy() {
318 helper_.CheckOnValidThread(); 316 helper_.CheckOnValidThread();
319 if (policy_may_need_update_.IsSet()) { 317 if (policy_may_need_update_.IsSet()) {
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 *next_long_idle_period_delay_out = current_policy_expiration_time_ - now; 478 *next_long_idle_period_delay_out = current_policy_expiration_time_ - now;
481 return false; 479 return false;
482 } 480 }
483 return true; 481 return true;
484 } 482 }
485 483
486 SchedulerHelper* RendererSchedulerImpl::GetSchedulerHelperForTesting() { 484 SchedulerHelper* RendererSchedulerImpl::GetSchedulerHelperForTesting() {
487 return &helper_; 485 return &helper_;
488 } 486 }
489 487
490 RendererSchedulerImpl::PollableNeedsUpdateFlag::PollableNeedsUpdateFlag(
491 base::Lock* write_lock_)
492 : flag_(false), write_lock_(write_lock_) {
493 }
494
495 RendererSchedulerImpl::PollableNeedsUpdateFlag::~PollableNeedsUpdateFlag() {
496 }
497
498 void RendererSchedulerImpl::PollableNeedsUpdateFlag::SetWhileLocked(
499 bool value) {
500 write_lock_->AssertAcquired();
501 base::subtle::Release_Store(&flag_, value);
502 }
503
504 bool RendererSchedulerImpl::PollableNeedsUpdateFlag::IsSet() const {
505 return base::subtle::Acquire_Load(&flag_) != 0;
506 }
507
508 void RendererSchedulerImpl::SuspendTimerQueue() { 488 void RendererSchedulerImpl::SuspendTimerQueue() {
509 helper_.CheckOnValidThread(); 489 helper_.CheckOnValidThread();
510 timer_queue_suspend_count_++; 490 timer_queue_suspend_count_++;
511 ForceUpdatePolicy(); 491 ForceUpdatePolicy();
512 DCHECK(!helper_.IsQueueEnabled(TIMER_TASK_QUEUE)); 492 DCHECK(!helper_.IsQueueEnabled(TIMER_TASK_QUEUE));
513 } 493 }
514 494
515 void RendererSchedulerImpl::ResumeTimerQueue() { 495 void RendererSchedulerImpl::ResumeTimerQueue() {
516 helper_.CheckOnValidThread(); 496 helper_.CheckOnValidThread();
517 timer_queue_suspend_count_--; 497 timer_queue_suspend_count_--;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 // meaningful touchstart response and should not impact task priority. 613 // meaningful touchstart response and should not impact task priority.
634 return current_state; 614 return current_state;
635 615
636 default: 616 default:
637 break; 617 break;
638 } 618 }
639 return InputStreamState::ACTIVE; 619 return InputStreamState::ACTIVE;
640 } 620 }
641 621
642 } // namespace scheduler 622 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698