| 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 THIRD_PARTY_WEBKIT_SOURCE_PLATFORM_SCHEDULER_RENDERER_RENDERER_SCHEDULER
_IMPL_H_ | 5 #ifndef THIRD_PARTY_WEBKIT_SOURCE_PLATFORM_SCHEDULER_RENDERER_RENDERER_SCHEDULER
_IMPL_H_ |
| 6 #define THIRD_PARTY_WEBKIT_SOURCE_PLATFORM_SCHEDULER_RENDERER_RENDERER_SCHEDULER
_IMPL_H_ | 6 #define THIRD_PARTY_WEBKIT_SOURCE_PLATFORM_SCHEDULER_RENDERER_RENDERER_SCHEDULER
_IMPL_H_ |
| 7 | 7 |
| 8 #include "base/atomicops.h" | 8 #include "base/atomicops.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/synchronization/lock.h" | 10 #include "base/synchronization/lock.h" |
| 11 #include "device/base/synchronization/shared_memory_seqlock_buffer.h" |
| 11 #include "platform/scheduler/base/pollable_thread_safe_flag.h" | 12 #include "platform/scheduler/base/pollable_thread_safe_flag.h" |
| 12 #include "platform/scheduler/base/queueing_time_estimator.h" | 13 #include "platform/scheduler/base/queueing_time_estimator.h" |
| 13 #include "platform/scheduler/base/thread_load_tracker.h" | 14 #include "platform/scheduler/base/thread_load_tracker.h" |
| 14 #include "platform/scheduler/child/idle_helper.h" | 15 #include "platform/scheduler/child/idle_helper.h" |
| 15 #include "platform/scheduler/child/scheduler_helper.h" | 16 #include "platform/scheduler/child/scheduler_helper.h" |
| 16 #include "platform/scheduler/renderer/deadline_task_runner.h" | 17 #include "platform/scheduler/renderer/deadline_task_runner.h" |
| 17 #include "platform/scheduler/renderer/idle_time_estimator.h" | 18 #include "platform/scheduler/renderer/idle_time_estimator.h" |
| 18 #include "platform/scheduler/renderer/render_widget_signals.h" | 19 #include "platform/scheduler/renderer/render_widget_signals.h" |
| 19 #include "platform/scheduler/renderer/task_cost_estimator.h" | 20 #include "platform/scheduler/renderer/task_cost_estimator.h" |
| 20 #include "platform/scheduler/renderer/user_model.h" | 21 #include "platform/scheduler/renderer/user_model.h" |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 void AddTaskObserver(base::MessageLoop::TaskObserver* task_observer) override; | 116 void AddTaskObserver(base::MessageLoop::TaskObserver* task_observer) override; |
| 116 void RemoveTaskObserver( | 117 void RemoveTaskObserver( |
| 117 base::MessageLoop::TaskObserver* task_observer) override; | 118 base::MessageLoop::TaskObserver* task_observer) override; |
| 118 void Shutdown() override; | 119 void Shutdown() override; |
| 119 void SuspendTimerQueue() override; | 120 void SuspendTimerQueue() override; |
| 120 void ResumeTimerQueue() override; | 121 void ResumeTimerQueue() override; |
| 121 void SetTimerQueueSuspensionWhenBackgroundedEnabled(bool enabled) override; | 122 void SetTimerQueueSuspensionWhenBackgroundedEnabled(bool enabled) override; |
| 122 void SetTopLevelBlameContext( | 123 void SetTopLevelBlameContext( |
| 123 base::trace_event::BlameContext* blame_context) override; | 124 base::trace_event::BlameContext* blame_context) override; |
| 124 void SetRAILModeObserver(RAILModeObserver* observer) override; | 125 void SetRAILModeObserver(RAILModeObserver* observer) override; |
| 126 bool ShouldForceEventsNonBlockingForUnresponsiveMainThread() const override; |
| 125 | 127 |
| 126 // RenderWidgetSignals::Observer implementation: | 128 // RenderWidgetSignals::Observer implementation: |
| 127 void SetAllRenderWidgetsHidden(bool hidden) override; | 129 void SetAllRenderWidgetsHidden(bool hidden) override; |
| 128 void SetHasVisibleRenderWidgetWithTouchHandler( | 130 void SetHasVisibleRenderWidgetWithTouchHandler( |
| 129 bool has_visible_render_widget_with_touch_handler) override; | 131 bool has_visible_render_widget_with_touch_handler) override; |
| 130 | 132 |
| 131 // SchedulerHelper::Observer implementation: | 133 // SchedulerHelper::Observer implementation: |
| 132 void OnUnregisterTaskQueue(const scoped_refptr<TaskQueue>& queue) override; | 134 void OnUnregisterTaskQueue(const scoped_refptr<TaskQueue>& queue) override; |
| 133 void OnTriedToExecuteBlockedTask(const TaskQueue& queue, | 135 void OnTriedToExecuteBlockedTask(const TaskQueue& queue, |
| 134 const base::PendingTask& task) override; | 136 const base::PendingTask& task) override; |
| 135 | 137 |
| 136 // TaskTimeObserver implementation: | 138 // TaskTimeObserver implementation: |
| 137 void ReportTaskTime(TaskQueue* task_queue, | 139 void ReportTaskStartTime(double start_time) override; |
| 138 double start_time, | 140 void ReportTaskEndTime(TaskQueue* task_queue, |
| 139 double end_time) override; | 141 double start_time, |
| 142 double end_time) override; |
| 140 | 143 |
| 141 // QueueingTimeEstimator::Client implementation: | 144 // QueueingTimeEstimator::Client implementation: |
| 142 void OnQueueingTimeForWindowEstimated(base::TimeDelta queueing_time) override; | 145 void OnQueueingTimeForWindowEstimated(base::TimeDelta queueing_time) override; |
| 143 | 146 |
| 144 // Returns a task runner where tasks run at the highest possible priority. | 147 // Returns a task runner where tasks run at the highest possible priority. |
| 145 scoped_refptr<TaskQueue> ControlTaskRunner(); | 148 scoped_refptr<TaskQueue> ControlTaskRunner(); |
| 146 | 149 |
| 147 void RegisterTimeDomain(TimeDomain* time_domain); | 150 void RegisterTimeDomain(TimeDomain* time_domain); |
| 148 void UnregisterTimeDomain(TimeDomain* time_domain); | 151 void UnregisterTimeDomain(TimeDomain* time_domain); |
| 149 | 152 |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 scoped_refptr<TaskQueue> default_timer_task_runner_; | 364 scoped_refptr<TaskQueue> default_timer_task_runner_; |
| 362 | 365 |
| 363 // Note |virtual_time_domain_| is lazily created. | 366 // Note |virtual_time_domain_| is lazily created. |
| 364 std::unique_ptr<AutoAdvancingVirtualTimeDomain> virtual_time_domain_; | 367 std::unique_ptr<AutoAdvancingVirtualTimeDomain> virtual_time_domain_; |
| 365 | 368 |
| 366 base::Closure update_policy_closure_; | 369 base::Closure update_policy_closure_; |
| 367 DeadlineTaskRunner delayed_update_policy_runner_; | 370 DeadlineTaskRunner delayed_update_policy_runner_; |
| 368 CancelableClosureHolder end_renderer_hidden_idle_period_closure_; | 371 CancelableClosureHolder end_renderer_hidden_idle_period_closure_; |
| 369 CancelableClosureHolder suspend_timers_when_backgrounded_closure_; | 372 CancelableClosureHolder suspend_timers_when_backgrounded_closure_; |
| 370 | 373 |
| 374 using SeqLockQueueingTimeEstimator = |
| 375 device::SharedMemorySeqLockBuffer<QueueingTimeEstimator>; |
| 376 |
| 377 SeqLockQueueingTimeEstimator seqlock_queueing_time_estimator_; |
| 378 |
| 371 // We have decided to improve thread safety at the cost of some boilerplate | 379 // We have decided to improve thread safety at the cost of some boilerplate |
| 372 // (the accessors) for the following data members. | 380 // (the accessors) for the following data members. |
| 373 | 381 |
| 374 struct MainThreadOnly { | 382 struct MainThreadOnly { |
| 375 MainThreadOnly(RendererSchedulerImpl* renderer_scheduler_impl, | 383 MainThreadOnly(RendererSchedulerImpl* renderer_scheduler_impl, |
| 376 const scoped_refptr<TaskQueue>& compositor_task_runner, | 384 const scoped_refptr<TaskQueue>& compositor_task_runner, |
| 377 base::TickClock* time_source, | 385 base::TickClock* time_source, |
| 378 base::TimeTicks now); | 386 base::TimeTicks now); |
| 379 ~MainThreadOnly(); | 387 ~MainThreadOnly(); |
| 380 | 388 |
| 381 TaskCostEstimator loading_task_cost_estimator; | 389 TaskCostEstimator loading_task_cost_estimator; |
| 382 TaskCostEstimator timer_task_cost_estimator; | 390 TaskCostEstimator timer_task_cost_estimator; |
| 383 QueueingTimeEstimator queueing_time_estimator; | 391 // QueueingTimeEstimator queueing_time_estimator; // TODO |
| 384 IdleTimeEstimator idle_time_estimator; | 392 IdleTimeEstimator idle_time_estimator; |
| 385 ThreadLoadTracker background_main_thread_load_tracker; | 393 ThreadLoadTracker background_main_thread_load_tracker; |
| 386 ThreadLoadTracker foreground_main_thread_load_tracker; | 394 ThreadLoadTracker foreground_main_thread_load_tracker; |
| 387 UseCase current_use_case; | 395 UseCase current_use_case; |
| 388 Policy current_policy; | 396 Policy current_policy; |
| 389 base::TimeTicks current_policy_expiration_time; | 397 base::TimeTicks current_policy_expiration_time; |
| 390 base::TimeTicks estimated_next_frame_begin; | 398 base::TimeTicks estimated_next_frame_begin; |
| 399 base::TimeTicks current_task_start_time; |
| 391 base::TimeDelta compositor_frame_interval; | 400 base::TimeDelta compositor_frame_interval; |
| 392 base::TimeDelta longest_jank_free_task_duration; | 401 base::TimeDelta longest_jank_free_task_duration; |
| 393 int timer_queue_suspend_count; // TIMER_TASK_QUEUE suspended if non-zero. | 402 int timer_queue_suspend_count; // TIMER_TASK_QUEUE suspended if non-zero. |
| 394 int navigation_task_expected_count; | 403 int navigation_task_expected_count; |
| 395 ExpensiveTaskPolicy expensive_task_policy; | 404 ExpensiveTaskPolicy expensive_task_policy; |
| 396 bool renderer_hidden; | 405 bool renderer_hidden; |
| 397 bool renderer_backgrounded; | 406 bool renderer_backgrounded; |
| 398 bool renderer_suspended; | 407 bool renderer_suspended; |
| 399 bool timer_queue_suspension_when_backgrounded_enabled; | 408 bool timer_queue_suspension_when_backgrounded_enabled; |
| 400 bool timer_queue_suspended_when_backgrounded; | 409 bool timer_queue_suspended_when_backgrounded; |
| 401 bool was_shutdown; | 410 bool was_shutdown; |
| 402 bool loading_tasks_seem_expensive; | 411 bool loading_tasks_seem_expensive; |
| 403 bool timer_tasks_seem_expensive; | 412 bool timer_tasks_seem_expensive; |
| 404 bool touchstart_expected_soon; | 413 bool touchstart_expected_soon; |
| 405 bool have_seen_a_begin_main_frame; | 414 bool have_seen_a_begin_main_frame; |
| 406 bool have_reported_blocking_intervention_in_current_policy; | 415 bool have_reported_blocking_intervention_in_current_policy; |
| 407 bool have_reported_blocking_intervention_since_navigation; | 416 bool have_reported_blocking_intervention_since_navigation; |
| 408 bool has_visible_render_widget_with_touch_handler; | 417 bool has_visible_render_widget_with_touch_handler; |
| 409 bool begin_frame_not_expected_soon; | 418 bool begin_frame_not_expected_soon; |
| 410 bool in_idle_period_for_testing; | 419 bool in_idle_period_for_testing; |
| 411 bool use_virtual_time; | 420 bool use_virtual_time; |
| 412 std::set<WebViewSchedulerImpl*> web_view_schedulers; // Not owned. | 421 std::set<WebViewSchedulerImpl*> web_view_schedulers; // Not owned. |
| 413 RAILModeObserver* rail_mode_observer; // Not owned. | 422 RAILModeObserver* rail_mode_observer; // Not owned. |
| 414 }; | 423 }; |
| 415 | 424 |
| 416 struct AnyThread { | 425 struct AnyThread { |
| 417 AnyThread(); | 426 AnyThread(RendererSchedulerImpl* renderer_scheduler_impl); |
| 418 ~AnyThread(); | 427 ~AnyThread(); |
| 419 | 428 |
| 420 base::TimeTicks last_idle_period_end_time; | 429 base::TimeTicks last_idle_period_end_time; |
| 421 base::TimeTicks rails_loading_priority_deadline; | 430 base::TimeTicks rails_loading_priority_deadline; |
| 422 base::TimeTicks fling_compositor_escalation_deadline; | 431 base::TimeTicks fling_compositor_escalation_deadline; |
| 423 UserModel user_model; | 432 UserModel user_model; |
| 424 bool awaiting_touch_start_response; | 433 bool awaiting_touch_start_response; |
| 425 bool in_idle_period; | 434 bool in_idle_period; |
| 426 bool begin_main_frame_on_critical_path; | 435 bool begin_main_frame_on_critical_path; |
| 427 bool last_gesture_was_compositor_driven; | 436 bool last_gesture_was_compositor_driven; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 480 PollableThreadSafeFlag policy_may_need_update_; | 489 PollableThreadSafeFlag policy_may_need_update_; |
| 481 base::WeakPtrFactory<RendererSchedulerImpl> weak_factory_; | 490 base::WeakPtrFactory<RendererSchedulerImpl> weak_factory_; |
| 482 | 491 |
| 483 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImpl); | 492 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImpl); |
| 484 }; | 493 }; |
| 485 | 494 |
| 486 } // namespace scheduler | 495 } // namespace scheduler |
| 487 } // namespace blink | 496 } // namespace blink |
| 488 | 497 |
| 489 #endif // THIRD_PARTY_WEBKIT_SOURCE_PLATFORM_SCHEDULER_RENDERER_RENDERER_SCHEDU
LER_IMPL_H_ | 498 #endif // THIRD_PARTY_WEBKIT_SOURCE_PLATFORM_SCHEDULER_RENDERER_RENDERER_SCHEDU
LER_IMPL_H_ |
| OLD | NEW |