OLD | NEW |
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 #ifndef COMPONENTS_SCHEDULER_RENDERER_RENDERER_SCHEDULER_IMPL_H_ | 5 #ifndef COMPONENTS_SCHEDULER_RENDERER_RENDERER_SCHEDULER_IMPL_H_ |
6 #define COMPONENTS_SCHEDULER_RENDERER_RENDERER_SCHEDULER_IMPL_H_ | 6 #define COMPONENTS_SCHEDULER_RENDERER_RENDERER_SCHEDULER_IMPL_H_ |
7 | 7 |
8 #include "base/atomicops.h" | 8 #include "base/atomicops.h" |
9 #include "base/synchronization/lock.h" | 9 #include "base/synchronization/lock.h" |
10 #include "components/scheduler/base/pollable_thread_safe_flag.h" | 10 #include "components/scheduler/base/pollable_thread_safe_flag.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 | 26 |
27 namespace scheduler { | 27 namespace scheduler { |
28 class RenderWidgetSchedulingState; | 28 class RenderWidgetSchedulingState; |
29 | 29 |
30 class SCHEDULER_EXPORT RendererSchedulerImpl | 30 class SCHEDULER_EXPORT RendererSchedulerImpl |
31 : public RendererScheduler, | 31 : public RendererScheduler, |
32 public IdleHelper::Delegate, | 32 public IdleHelper::Delegate, |
33 public SchedulerHelper::Observer, | 33 public SchedulerHelper::Observer, |
34 public RenderWidgetSignals::Observer { | 34 public RenderWidgetSignals::Observer { |
35 public: | 35 public: |
| 36 enum class TimeSource { NORMAL, VIRTUAL }; |
| 37 |
36 RendererSchedulerImpl( | 38 RendererSchedulerImpl( |
37 scoped_refptr<SchedulerTaskRunnerDelegate> main_task_runner); | 39 scoped_refptr<SchedulerTaskRunnerDelegate> main_task_runner, |
| 40 TimeSource time_source); |
38 ~RendererSchedulerImpl() override; | 41 ~RendererSchedulerImpl() override; |
39 | 42 |
40 // RendererScheduler implementation: | 43 // RendererScheduler implementation: |
41 scoped_refptr<TaskQueue> DefaultTaskRunner() override; | 44 scoped_refptr<TaskQueue> DefaultTaskRunner() override; |
42 scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override; | 45 scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override; |
43 scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override; | 46 scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override; |
44 scoped_refptr<base::SingleThreadTaskRunner> LoadingTaskRunner() override; | 47 scoped_refptr<base::SingleThreadTaskRunner> LoadingTaskRunner() override; |
45 scoped_refptr<TaskQueue> TimerTaskRunner() override; | 48 scoped_refptr<TaskQueue> TimerTaskRunner() override; |
46 scoped_refptr<TaskQueue> NewLoadingTaskRunner(const char* name) override; | 49 scoped_refptr<TaskQueue> NewLoadingTaskRunner(const char* name) override; |
47 scoped_refptr<TaskQueue> NewTimerTaskRunner(const char* name) override; | 50 scoped_refptr<TaskQueue> NewTimerTaskRunner(const char* name) override; |
(...skipping 16 matching lines...) Expand all Loading... |
64 bool IsHighPriorityWorkAnticipated() override; | 67 bool IsHighPriorityWorkAnticipated() override; |
65 bool ShouldYieldForHighPriorityWork() override; | 68 bool ShouldYieldForHighPriorityWork() override; |
66 bool CanExceedIdleDeadlineIfRequired() const override; | 69 bool CanExceedIdleDeadlineIfRequired() const override; |
67 void AddTaskObserver(base::MessageLoop::TaskObserver* task_observer) override; | 70 void AddTaskObserver(base::MessageLoop::TaskObserver* task_observer) override; |
68 void RemoveTaskObserver( | 71 void RemoveTaskObserver( |
69 base::MessageLoop::TaskObserver* task_observer) override; | 72 base::MessageLoop::TaskObserver* task_observer) override; |
70 void Shutdown() override; | 73 void Shutdown() override; |
71 void SuspendTimerQueue() override; | 74 void SuspendTimerQueue() override; |
72 void ResumeTimerQueue() override; | 75 void ResumeTimerQueue() override; |
73 void SetTimerQueueSuspensionWhenBackgroundedEnabled(bool enabled) override; | 76 void SetTimerQueueSuspensionWhenBackgroundedEnabled(bool enabled) override; |
| 77 double currentTime() const override; |
| 78 double monotonicallyIncreasingTime() const override; |
74 | 79 |
75 // RenderWidgetSignals::Observer implementation: | 80 // RenderWidgetSignals::Observer implementation: |
76 void SetAllRenderWidgetsHidden(bool hidden) override; | 81 void SetAllRenderWidgetsHidden(bool hidden) override; |
77 void SetHasVisibleRenderWidgetWithTouchHandler( | 82 void SetHasVisibleRenderWidgetWithTouchHandler( |
78 bool has_visible_render_widget_with_touch_handler) override; | 83 bool has_visible_render_widget_with_touch_handler) override; |
79 | 84 |
80 // TaskQueueManager::Observer implementation: | 85 // TaskQueueManager::Observer implementation: |
81 void OnUnregisterTaskQueue(const scoped_refptr<TaskQueue>& queue) override; | 86 void OnUnregisterTaskQueue(const scoped_refptr<TaskQueue>& queue) override; |
82 | 87 |
83 // Test helpers. | 88 // Test helpers. |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 std::set<scoped_refptr<TaskQueue>> loading_task_runners_; | 239 std::set<scoped_refptr<TaskQueue>> loading_task_runners_; |
235 std::set<scoped_refptr<TaskQueue>> timer_task_runners_; | 240 std::set<scoped_refptr<TaskQueue>> timer_task_runners_; |
236 scoped_refptr<TaskQueue> default_loading_task_runner_; | 241 scoped_refptr<TaskQueue> default_loading_task_runner_; |
237 scoped_refptr<TaskQueue> default_timer_task_runner_; | 242 scoped_refptr<TaskQueue> default_timer_task_runner_; |
238 | 243 |
239 base::Closure update_policy_closure_; | 244 base::Closure update_policy_closure_; |
240 DeadlineTaskRunner delayed_update_policy_runner_; | 245 DeadlineTaskRunner delayed_update_policy_runner_; |
241 CancelableClosureHolder end_renderer_hidden_idle_period_closure_; | 246 CancelableClosureHolder end_renderer_hidden_idle_period_closure_; |
242 CancelableClosureHolder suspend_timers_when_backgrounded_closure_; | 247 CancelableClosureHolder suspend_timers_when_backgrounded_closure_; |
243 | 248 |
| 249 const TimeSource time_source_; |
| 250 |
244 // We have decided to improve thread safety at the cost of some boilerplate | 251 // We have decided to improve thread safety at the cost of some boilerplate |
245 // (the accessors) for the following data members. | 252 // (the accessors) for the following data members. |
246 | 253 |
247 struct MainThreadOnly { | 254 struct MainThreadOnly { |
248 explicit MainThreadOnly( | 255 MainThreadOnly(const scoped_refptr<TaskQueue>& compositor_task_runner, |
249 const scoped_refptr<TaskQueue>& compositor_task_runner); | 256 base::TickClock* time_source); |
250 ~MainThreadOnly(); | 257 ~MainThreadOnly(); |
251 | 258 |
252 TaskCostEstimator loading_task_cost_estimator; | 259 TaskCostEstimator loading_task_cost_estimator; |
253 TaskCostEstimator timer_task_cost_estimator; | 260 TaskCostEstimator timer_task_cost_estimator; |
254 IdleTimeEstimator idle_time_estimator; | 261 IdleTimeEstimator idle_time_estimator; |
255 UseCase current_use_case; | 262 UseCase current_use_case; |
256 Policy current_policy; | 263 Policy current_policy; |
257 base::TimeTicks current_policy_expiration_time; | 264 base::TimeTicks current_policy_expiration_time; |
258 base::TimeTicks estimated_next_frame_begin; | 265 base::TimeTicks estimated_next_frame_begin; |
259 base::TimeDelta compositor_frame_interval; | 266 base::TimeDelta compositor_frame_interval; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 | 340 |
334 PollableThreadSafeFlag policy_may_need_update_; | 341 PollableThreadSafeFlag policy_may_need_update_; |
335 base::WeakPtrFactory<RendererSchedulerImpl> weak_factory_; | 342 base::WeakPtrFactory<RendererSchedulerImpl> weak_factory_; |
336 | 343 |
337 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImpl); | 344 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImpl); |
338 }; | 345 }; |
339 | 346 |
340 } // namespace scheduler | 347 } // namespace scheduler |
341 | 348 |
342 #endif // COMPONENTS_SCHEDULER_RENDERER_RENDERER_SCHEDULER_IMPL_H_ | 349 #endif // COMPONENTS_SCHEDULER_RENDERER_RENDERER_SCHEDULER_IMPL_H_ |
OLD | NEW |