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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.h

Issue 2273703002: Force events to be non blocking if main thread is unresponsive. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Dave's comments. Created 4 years, 3 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 #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"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 void AddTaskObserver(base::MessageLoop::TaskObserver* task_observer) override; 112 void AddTaskObserver(base::MessageLoop::TaskObserver* task_observer) override;
113 void RemoveTaskObserver( 113 void RemoveTaskObserver(
114 base::MessageLoop::TaskObserver* task_observer) override; 114 base::MessageLoop::TaskObserver* task_observer) override;
115 void Shutdown() override; 115 void Shutdown() override;
116 void SuspendTimerQueue() override; 116 void SuspendTimerQueue() override;
117 void ResumeTimerQueue() override; 117 void ResumeTimerQueue() override;
118 void SetTimerQueueSuspensionWhenBackgroundedEnabled(bool enabled) override; 118 void SetTimerQueueSuspensionWhenBackgroundedEnabled(bool enabled) override;
119 void SetTopLevelBlameContext( 119 void SetTopLevelBlameContext(
120 base::trace_event::BlameContext* blame_context) override; 120 base::trace_event::BlameContext* blame_context) override;
121 void SetRAILModeObserver(RAILModeObserver* observer) override; 121 void SetRAILModeObserver(RAILModeObserver* observer) override;
122 bool ShouldForceEventsNonBlockingForUnresponsiveMainThread() const override;
122 123
123 // RenderWidgetSignals::Observer implementation: 124 // RenderWidgetSignals::Observer implementation:
124 void SetAllRenderWidgetsHidden(bool hidden) override; 125 void SetAllRenderWidgetsHidden(bool hidden) override;
125 void SetHasVisibleRenderWidgetWithTouchHandler( 126 void SetHasVisibleRenderWidgetWithTouchHandler(
126 bool has_visible_render_widget_with_touch_handler) override; 127 bool has_visible_render_widget_with_touch_handler) override;
127 128
128 // SchedulerHelper::Observer implementation: 129 // SchedulerHelper::Observer implementation:
129 void OnUnregisterTaskQueue(const scoped_refptr<TaskQueue>& queue) override; 130 void OnUnregisterTaskQueue(const scoped_refptr<TaskQueue>& queue) override;
130 void OnTriedToExecuteBlockedTask(const TaskQueue& queue, 131 void OnTriedToExecuteBlockedTask(const TaskQueue& queue,
131 const base::PendingTask& task) override; 132 const base::PendingTask& task) override;
132 133
133 // TaskTimeTracker implementation: 134 // TaskTimeTracker implementation:
135 void ReportTaskStartTime(base::TimeTicks start_time) override;
134 void ReportTaskTime(base::TimeTicks start_time, 136 void ReportTaskTime(base::TimeTicks start_time,
135 base::TimeTicks end_time) override; 137 base::TimeTicks end_time) override;
136 138
137 // QueueingTimeEstimator::Client implementation: 139 // QueueingTimeEstimator::Client implementation:
138 void OnQueueingTimeForWindowEstimated(base::TimeDelta queueing_time) override; 140 void OnQueueingTimeForWindowEstimated(base::TimeDelta queueing_time) override;
139 141
140 // Returns a task runner where tasks run at the highest possible priority. 142 // Returns a task runner where tasks run at the highest possible priority.
141 scoped_refptr<TaskQueue> ControlTaskRunner(); 143 scoped_refptr<TaskQueue> ControlTaskRunner();
142 144
143 void RegisterTimeDomain(TimeDomain* time_domain); 145 void RegisterTimeDomain(TimeDomain* time_domain);
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 367
366 base::Closure update_policy_closure_; 368 base::Closure update_policy_closure_;
367 DeadlineTaskRunner delayed_update_policy_runner_; 369 DeadlineTaskRunner delayed_update_policy_runner_;
368 CancelableClosureHolder end_renderer_hidden_idle_period_closure_; 370 CancelableClosureHolder end_renderer_hidden_idle_period_closure_;
369 CancelableClosureHolder suspend_timers_when_backgrounded_closure_; 371 CancelableClosureHolder suspend_timers_when_backgrounded_closure_;
370 372
371 // We have decided to improve thread safety at the cost of some boilerplate 373 // We have decided to improve thread safety at the cost of some boilerplate
372 // (the accessors) for the following data members. 374 // (the accessors) for the following data members.
373 375
374 struct MainThreadOnly { 376 struct MainThreadOnly {
375 MainThreadOnly(RendererSchedulerImpl* renderer_scheduler_impl, 377 MainThreadOnly(const scoped_refptr<TaskQueue>& compositor_task_runner,
376 const scoped_refptr<TaskQueue>& compositor_task_runner,
377 base::TickClock* time_source); 378 base::TickClock* time_source);
378 ~MainThreadOnly(); 379 ~MainThreadOnly();
379 380
380 TaskCostEstimator loading_task_cost_estimator; 381 TaskCostEstimator loading_task_cost_estimator;
381 TaskCostEstimator timer_task_cost_estimator; 382 TaskCostEstimator timer_task_cost_estimator;
382 QueueingTimeEstimator queueing_time_estimator;
383 LongTaskTracker long_task_tracker; 383 LongTaskTracker long_task_tracker;
384 IdleTimeEstimator idle_time_estimator; 384 IdleTimeEstimator idle_time_estimator;
385 UseCase current_use_case; 385 UseCase current_use_case;
386 Policy current_policy; 386 Policy current_policy;
387 base::TimeTicks current_policy_expiration_time; 387 base::TimeTicks current_policy_expiration_time;
388 base::TimeTicks estimated_next_frame_begin; 388 base::TimeTicks estimated_next_frame_begin;
389 base::TimeDelta compositor_frame_interval; 389 base::TimeDelta compositor_frame_interval;
390 base::TimeDelta longest_jank_free_task_duration; 390 base::TimeDelta longest_jank_free_task_duration;
391 int timer_queue_suspend_count; // TIMER_TASK_QUEUE suspended if non-zero. 391 int timer_queue_suspend_count; // TIMER_TASK_QUEUE suspended if non-zero.
392 int navigation_task_expected_count; 392 int navigation_task_expected_count;
(...skipping 12 matching lines...) Expand all
405 bool have_reported_blocking_intervention_since_navigation; 405 bool have_reported_blocking_intervention_since_navigation;
406 bool has_visible_render_widget_with_touch_handler; 406 bool has_visible_render_widget_with_touch_handler;
407 bool begin_frame_not_expected_soon; 407 bool begin_frame_not_expected_soon;
408 bool in_idle_period_for_testing; 408 bool in_idle_period_for_testing;
409 bool use_virtual_time; 409 bool use_virtual_time;
410 std::set<WebViewSchedulerImpl*> web_view_schedulers; // Not owned. 410 std::set<WebViewSchedulerImpl*> web_view_schedulers; // Not owned.
411 RAILModeObserver* rail_mode_observer; // Not owned. 411 RAILModeObserver* rail_mode_observer; // Not owned.
412 }; 412 };
413 413
414 struct AnyThread { 414 struct AnyThread {
415 AnyThread(); 415 AnyThread(RendererSchedulerImpl* renderer_scheduler_impl);
416 ~AnyThread(); 416 ~AnyThread();
417 417
418 base::TimeTicks last_idle_period_end_time; 418 base::TimeTicks last_idle_period_end_time;
419 base::TimeTicks rails_loading_priority_deadline; 419 base::TimeTicks rails_loading_priority_deadline;
420 base::TimeTicks fling_compositor_escalation_deadline; 420 base::TimeTicks fling_compositor_escalation_deadline;
421 UserModel user_model; 421 UserModel user_model;
422 QueueingTimeEstimator queueing_time_estimator;
422 bool awaiting_touch_start_response; 423 bool awaiting_touch_start_response;
423 bool in_idle_period; 424 bool in_idle_period;
424 bool begin_main_frame_on_critical_path; 425 bool begin_main_frame_on_critical_path;
425 bool last_gesture_was_compositor_driven; 426 bool last_gesture_was_compositor_driven;
426 bool default_gesture_prevented; 427 bool default_gesture_prevented;
427 bool have_seen_touchstart; 428 bool have_seen_touchstart;
428 }; 429 };
429 430
430 struct CompositorThreadOnly { 431 struct CompositorThreadOnly {
431 CompositorThreadOnly(); 432 CompositorThreadOnly();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 PollableThreadSafeFlag policy_may_need_update_; 479 PollableThreadSafeFlag policy_may_need_update_;
479 base::WeakPtrFactory<RendererSchedulerImpl> weak_factory_; 480 base::WeakPtrFactory<RendererSchedulerImpl> weak_factory_;
480 481
481 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImpl); 482 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImpl);
482 }; 483 };
483 484
484 } // namespace scheduler 485 } // namespace scheduler
485 } // namespace blink 486 } // namespace blink
486 487
487 #endif // THIRD_PARTY_WEBKIT_SOURCE_PLATFORM_SCHEDULER_RENDERER_RENDERER_SCHEDU LER_IMPL_H_ 488 #endif // THIRD_PARTY_WEBKIT_SOURCE_PLATFORM_SCHEDULER_RENDERER_RENDERER_SCHEDU LER_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698