Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "content/renderer/scheduler/renderer_scheduler.h" | |
| 6 | |
| 7 #include "base/bind.h" | |
| 8 #include "base/message_loop/message_loop_proxy.h" | |
| 9 #include "cc/output/begin_frame_args.h" | |
| 10 #include "content/renderer/scheduler/renderer_scheduler_selector.h" | |
| 11 | |
| 12 namespace content { | |
| 13 | |
| 14 RendererScheduler::RendererScheduler() | |
| 15 : renderer_scheduler_selector_(new RendererSchedulerSelector()), | |
| 16 task_queue_manager_(kTaskAndControlQueueCount, | |
| 17 base::MessageLoopProxy::current(), | |
| 18 renderer_scheduler_selector_.get()), | |
| 19 control_task_runner_( | |
| 20 task_queue_manager_.TaskRunnerForQueue(kControlQueue)) { | |
|
Sami
2014/10/20 13:31:08
Is this intended with git cl format? Looks a bit w
rmcilroy
2014/10/21 17:21:27
Done.
| |
| 21 renderer_scheduler_selector_->SetQueuePriority( | |
| 22 kControlQueue, RendererSchedulerSelector::kControlPriority);; | |
|
Sami
2014/10/20 13:31:08
nit: extra ;
rmcilroy
2014/10/21 17:21:27
Done.
| |
| 23 renderer_scheduler_selector_->DisableQueue(kIdleTaskQueue); | |
| 24 task_queue_manager_.SetAutoPump(kIdleTaskQueue, false); | |
| 25 } | |
| 26 | |
| 27 RendererScheduler::~RendererScheduler() { | |
| 28 } | |
| 29 | |
| 30 scoped_refptr<base::SingleThreadTaskRunner> | |
| 31 RendererScheduler::TaskRunnerForQueue(QueueId queue) { | |
| 32 return task_queue_manager_.TaskRunnerForQueue(queue); | |
| 33 } | |
| 34 | |
| 35 void RendererScheduler::WillBeginFrame(const cc::BeginFrameArgs& args) { | |
| 36 main_thread_checker_.CalledOnValidThread(); | |
| 37 EndIdlePeriod(); | |
| 38 estimated_next_frame_begin_ = args.frame_time + args.interval; | |
| 39 } | |
| 40 | |
| 41 void RendererScheduler::DidCommitFrameToCompositor() { | |
| 42 main_thread_checker_.CalledOnValidThread(); | |
| 43 if (base::TimeTicks::Now() < estimated_next_frame_begin_) { | |
|
Sami
2014/10/20 13:31:08
Please use gfx::FrameTime::Now() when comparing Be
rmcilroy
2014/10/21 17:21:27
Done.
| |
| 44 StartIdlePeriod(); | |
| 45 } | |
| 46 } | |
| 47 | |
| 48 void RendererScheduler::DidReceiveInputEvent() { | |
| 49 control_task_runner_->PostTask( | |
|
Sami
2014/10/20 13:31:08
I guess Alex already brought this up but somehow w
rmcilroy
2014/10/21 17:21:27
Done. Using policy_may_need_update_ bit to ensure
| |
| 50 FROM_HERE, | |
| 51 base::Bind(&RendererScheduler::EnterSchedulerPolicy, | |
| 52 base::Unretained(this), | |
| 53 kCompositorPriorityPolicy)); | |
| 54 } | |
| 55 | |
| 56 bool RendererScheduler::ShouldYieldForHighPriorityWork() { | |
| 57 return (SchedulerPolicy() == kCompositorPriorityPolicy) && | |
|
petrcermak
2014/10/20 17:43:35
nit - is there any reason for the brackets?
rmcilroy
2014/10/21 17:21:27
Nope, removed.
| |
| 58 task_queue_manager_.PollQueue(kCompositorTaskQueue); | |
| 59 } | |
| 60 | |
| 61 base::TimeTicks RendererScheduler::CurrentFrameDeadlineForIdleTasks() const { | |
| 62 main_thread_checker_.CalledOnValidThread(); | |
| 63 return estimated_next_frame_begin_; | |
| 64 } | |
| 65 | |
| 66 RendererScheduler::Policy RendererScheduler::SchedulerPolicy() const { | |
| 67 return static_cast<Policy>(base::subtle::Acquire_Load(¤t_policy_)); | |
| 68 } | |
| 69 | |
| 70 void RendererScheduler::EnterSchedulerPolicy(Policy policy) { | |
|
alexclarke
2014/10/20 12:48:35
With an eye to the future where we may have a load
rmcilroy
2014/10/21 17:21:27
Agreed - I've updated this to be simply UpdatePoli
| |
| 71 main_thread_checker_.CalledOnValidThread(); | |
| 72 if (SchedulerPolicy() != policy) { | |
| 73 switch(policy) { | |
| 74 case kCompositorPriorityPolicy: | |
| 75 renderer_scheduler_selector_->SetQueuePriority( | |
| 76 kCompositorTaskQueue, RendererSchedulerSelector::kHighPriority); | |
| 77 control_task_runner_->PostDelayedTask( | |
| 78 FROM_HERE, | |
| 79 base::Bind(&RendererScheduler::EnterSchedulerPolicy, | |
|
Sami
2014/10/20 13:31:08
This is nice way to get back to normal mode.
rmcilroy
2014/10/21 17:21:27
Acknowledged.
| |
| 80 base::Unretained(this), | |
| 81 kNormalPriorityPolicy), | |
| 82 kCompositoryPriorityAfterTouchTime); | |
| 83 break; | |
| 84 case kNormalPriorityPolicy: | |
| 85 renderer_scheduler_selector_->SetQueuePriority( | |
| 86 kCompositorTaskQueue, RendererSchedulerSelector::kNormalPriority); | |
| 87 break; | |
| 88 } | |
| 89 base::subtle::Release_Store(¤t_policy_, policy); | |
| 90 } | |
| 91 } | |
| 92 | |
| 93 void RendererScheduler::StartIdlePeriod() { | |
| 94 renderer_scheduler_selector_->EnableQueue( | |
| 95 kIdleTaskQueue, RendererSchedulerSelector::kBestEffortPriority); | |
| 96 task_queue_manager_.PumpQueue(kIdleTaskQueue); | |
| 97 } | |
| 98 | |
| 99 void RendererScheduler::EndIdlePeriod() { | |
| 100 renderer_scheduler_selector_->DisableQueue(kIdleTaskQueue); | |
| 101 } | |
| 102 | |
| 103 } // namespace content | |
| OLD | NEW |