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

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

Issue 2383473002: [scheduler] Teach scheduler about audio state (Closed)
Patch Set: Reverted DEPS Created 4 years, 2 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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 void BeginFrameNotExpectedSoon() override; 94 void BeginFrameNotExpectedSoon() override;
95 void DidCommitFrameToCompositor() override; 95 void DidCommitFrameToCompositor() override;
96 void DidHandleInputEventOnCompositorThread( 96 void DidHandleInputEventOnCompositorThread(
97 const WebInputEvent& web_input_event, 97 const WebInputEvent& web_input_event,
98 InputEventState event_state) override; 98 InputEventState event_state) override;
99 void DidHandleInputEventOnMainThread( 99 void DidHandleInputEventOnMainThread(
100 const WebInputEvent& web_input_event) override; 100 const WebInputEvent& web_input_event) override;
101 void DidAnimateForInputOnCompositorThread() override; 101 void DidAnimateForInputOnCompositorThread() override;
102 void OnRendererBackgrounded() override; 102 void OnRendererBackgrounded() override;
103 void OnRendererForegrounded() override; 103 void OnRendererForegrounded() override;
104 void OnAudioStateChanged(bool is_audio_playing) override;
104 void SuspendRenderer() override; 105 void SuspendRenderer() override;
105 void AddPendingNavigation(WebScheduler::NavigatingFrameType type) override; 106 void AddPendingNavigation(WebScheduler::NavigatingFrameType type) override;
106 void RemovePendingNavigation(WebScheduler::NavigatingFrameType type) override; 107 void RemovePendingNavigation(WebScheduler::NavigatingFrameType type) override;
107 void OnNavigationStarted() override; 108 void OnNavigationStarted() override;
108 bool IsHighPriorityWorkAnticipated() override; 109 bool IsHighPriorityWorkAnticipated() override;
109 bool ShouldYieldForHighPriorityWork() override; 110 bool ShouldYieldForHighPriorityWork() override;
110 bool CanExceedIdleDeadlineIfRequired() const override; 111 bool CanExceedIdleDeadlineIfRequired() const override;
111 void AddTaskObserver(base::MessageLoop::TaskObserver* task_observer) override; 112 void AddTaskObserver(base::MessageLoop::TaskObserver* task_observer) override;
112 void RemoveTaskObserver( 113 void RemoveTaskObserver(
113 base::MessageLoop::TaskObserver* task_observer) override; 114 base::MessageLoop::TaskObserver* task_observer) override;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 bool PolicyNeedsUpdateForTesting(); 168 bool PolicyNeedsUpdateForTesting();
168 169
169 base::TickClock* tick_clock() const; 170 base::TickClock* tick_clock() const;
170 171
171 RealTimeDomain* real_time_domain() const { 172 RealTimeDomain* real_time_domain() const {
172 return helper_.real_time_domain(); 173 return helper_.real_time_domain();
173 } 174 }
174 175
175 AutoAdvancingVirtualTimeDomain* GetVirtualTimeDomain(); 176 AutoAdvancingVirtualTimeDomain* GetVirtualTimeDomain();
176 177
178 TimeDomain* GetActiveTimeDomain();
179
177 TaskQueueThrottler* task_queue_throttler() const { 180 TaskQueueThrottler* task_queue_throttler() const {
178 return task_queue_throttler_.get(); 181 return task_queue_throttler_.get();
179 } 182 }
180 183
181 private: 184 private:
182 friend class RendererSchedulerImplTest; 185 friend class RendererSchedulerImplTest;
183 friend class RendererSchedulerImplForTest; 186 friend class RendererSchedulerImplForTest;
184 friend class RenderWidgetSchedulingState; 187 friend class RenderWidgetSchedulingState;
185 188
186 enum class ExpensiveTaskPolicy { RUN, BLOCK, THROTTLE }; 189 enum class ExpensiveTaskPolicy { RUN, BLOCK, THROTTLE };
(...skipping 19 matching lines...) Expand all
206 time_domain_type == other.time_domain_type; 209 time_domain_type == other.time_domain_type;
207 } 210 }
208 }; 211 };
209 212
210 struct Policy { 213 struct Policy {
211 TaskQueuePolicy compositor_queue_policy; 214 TaskQueuePolicy compositor_queue_policy;
212 TaskQueuePolicy loading_queue_policy; 215 TaskQueuePolicy loading_queue_policy;
213 TaskQueuePolicy timer_queue_policy; 216 TaskQueuePolicy timer_queue_policy;
214 TaskQueuePolicy default_queue_policy; 217 TaskQueuePolicy default_queue_policy;
215 v8::RAILMode rail_mode = v8::PERFORMANCE_ANIMATION; 218 v8::RAILMode rail_mode = v8::PERFORMANCE_ANIMATION;
219 bool should_disable_throttling = false;
216 220
217 bool operator==(const Policy& other) const { 221 bool operator==(const Policy& other) const {
218 return compositor_queue_policy == other.compositor_queue_policy && 222 return compositor_queue_policy == other.compositor_queue_policy &&
219 loading_queue_policy == other.loading_queue_policy && 223 loading_queue_policy == other.loading_queue_policy &&
220 timer_queue_policy == other.timer_queue_policy && 224 timer_queue_policy == other.timer_queue_policy &&
221 default_queue_policy == other.default_queue_policy && 225 default_queue_policy == other.default_queue_policy &&
222 rail_mode == other.rail_mode; 226 rail_mode == other.rail_mode &&
227 should_disable_throttling == other.should_disable_throttling;
223 } 228 }
224 }; 229 };
225 230
226 class PollableNeedsUpdateFlag { 231 class PollableNeedsUpdateFlag {
227 public: 232 public:
228 PollableNeedsUpdateFlag(base::Lock* write_lock); 233 PollableNeedsUpdateFlag(base::Lock* write_lock);
229 ~PollableNeedsUpdateFlag(); 234 ~PollableNeedsUpdateFlag();
230 235
231 // Set the flag. May only be called if |write_lock| is held. 236 // Set the flag. May only be called if |write_lock| is held.
232 void SetWhileLocked(bool value); 237 void SetWhileLocked(bool value);
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 // Report an intervention to all WebViews in this process. 341 // Report an intervention to all WebViews in this process.
337 void BroadcastIntervention(const std::string& message); 342 void BroadcastIntervention(const std::string& message);
338 343
339 void ApplyTaskQueuePolicy(TaskQueue* task_queue, 344 void ApplyTaskQueuePolicy(TaskQueue* task_queue,
340 const TaskQueuePolicy& old_task_queue_policy, 345 const TaskQueuePolicy& old_task_queue_policy,
341 const TaskQueuePolicy& new_task_queue_policy) const; 346 const TaskQueuePolicy& new_task_queue_policy) const;
342 347
343 static const char* ExpensiveTaskPolicyToString( 348 static const char* ExpensiveTaskPolicyToString(
344 ExpensiveTaskPolicy expensive_task_policy); 349 ExpensiveTaskPolicy expensive_task_policy);
345 350
351 bool ShouldDisableThrottlingBecauseOfAudio(base::TimeTicks now);
352
346 SchedulerHelper helper_; 353 SchedulerHelper helper_;
347 IdleHelper idle_helper_; 354 IdleHelper idle_helper_;
348 std::unique_ptr<TaskQueueThrottler> task_queue_throttler_; 355 std::unique_ptr<TaskQueueThrottler> task_queue_throttler_;
349 RenderWidgetSignals render_widget_scheduler_signals_; 356 RenderWidgetSignals render_widget_scheduler_signals_;
350 357
351 const scoped_refptr<TaskQueue> control_task_runner_; 358 const scoped_refptr<TaskQueue> control_task_runner_;
352 const scoped_refptr<TaskQueue> compositor_task_runner_; 359 const scoped_refptr<TaskQueue> compositor_task_runner_;
353 std::set<scoped_refptr<TaskQueue>> loading_task_runners_; 360 std::set<scoped_refptr<TaskQueue>> loading_task_runners_;
354 std::set<scoped_refptr<TaskQueue>> timer_task_runners_; 361 std::set<scoped_refptr<TaskQueue>> timer_task_runners_;
355 std::set<scoped_refptr<TaskQueue>> unthrottled_task_runners_; 362 std::set<scoped_refptr<TaskQueue>> unthrottled_task_runners_;
(...skipping 23 matching lines...) Expand all
379 QueueingTimeEstimator queueing_time_estimator; 386 QueueingTimeEstimator queueing_time_estimator;
380 IdleTimeEstimator idle_time_estimator; 387 IdleTimeEstimator idle_time_estimator;
381 ThreadLoadTracker background_main_thread_load_tracker; 388 ThreadLoadTracker background_main_thread_load_tracker;
382 ThreadLoadTracker foreground_main_thread_load_tracker; 389 ThreadLoadTracker foreground_main_thread_load_tracker;
383 UseCase current_use_case; 390 UseCase current_use_case;
384 Policy current_policy; 391 Policy current_policy;
385 base::TimeTicks current_policy_expiration_time; 392 base::TimeTicks current_policy_expiration_time;
386 base::TimeTicks estimated_next_frame_begin; 393 base::TimeTicks estimated_next_frame_begin;
387 base::TimeDelta compositor_frame_interval; 394 base::TimeDelta compositor_frame_interval;
388 base::TimeDelta longest_jank_free_task_duration; 395 base::TimeDelta longest_jank_free_task_duration;
396 base::Optional<base::TimeTicks> last_audio_state_change;
397 base::TimeDelta throttling_delay_after_audio_is_played;
389 int timer_queue_suspend_count; // TIMER_TASK_QUEUE suspended if non-zero. 398 int timer_queue_suspend_count; // TIMER_TASK_QUEUE suspended if non-zero.
390 int navigation_task_expected_count; 399 int navigation_task_expected_count;
391 ExpensiveTaskPolicy expensive_task_policy; 400 ExpensiveTaskPolicy expensive_task_policy;
392 bool renderer_hidden; 401 bool renderer_hidden;
393 bool renderer_backgrounded; 402 bool renderer_backgrounded;
394 bool renderer_suspended; 403 bool renderer_suspended;
395 bool timer_queue_suspension_when_backgrounded_enabled; 404 bool timer_queue_suspension_when_backgrounded_enabled;
396 bool timer_queue_suspended_when_backgrounded; 405 bool timer_queue_suspended_when_backgrounded;
397 bool was_shutdown; 406 bool was_shutdown;
398 bool loading_tasks_seem_expensive; 407 bool loading_tasks_seem_expensive;
399 bool timer_tasks_seem_expensive; 408 bool timer_tasks_seem_expensive;
400 bool touchstart_expected_soon; 409 bool touchstart_expected_soon;
401 bool have_seen_a_begin_main_frame; 410 bool have_seen_a_begin_main_frame;
402 bool have_reported_blocking_intervention_in_current_policy; 411 bool have_reported_blocking_intervention_in_current_policy;
403 bool have_reported_blocking_intervention_since_navigation; 412 bool have_reported_blocking_intervention_since_navigation;
404 bool has_visible_render_widget_with_touch_handler; 413 bool has_visible_render_widget_with_touch_handler;
405 bool begin_frame_not_expected_soon; 414 bool begin_frame_not_expected_soon;
406 bool in_idle_period_for_testing; 415 bool in_idle_period_for_testing;
407 bool use_virtual_time; 416 bool use_virtual_time;
417 bool is_audio_playing;
408 std::set<WebViewSchedulerImpl*> web_view_schedulers; // Not owned. 418 std::set<WebViewSchedulerImpl*> web_view_schedulers; // Not owned.
409 RAILModeObserver* rail_mode_observer; // Not owned. 419 RAILModeObserver* rail_mode_observer; // Not owned.
410 }; 420 };
411 421
412 struct AnyThread { 422 struct AnyThread {
413 AnyThread(); 423 AnyThread();
414 ~AnyThread(); 424 ~AnyThread();
415 425
416 base::TimeTicks last_idle_period_end_time; 426 base::TimeTicks last_idle_period_end_time;
417 base::TimeTicks rails_loading_priority_deadline; 427 base::TimeTicks rails_loading_priority_deadline;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 PollableThreadSafeFlag policy_may_need_update_; 486 PollableThreadSafeFlag policy_may_need_update_;
477 base::WeakPtrFactory<RendererSchedulerImpl> weak_factory_; 487 base::WeakPtrFactory<RendererSchedulerImpl> weak_factory_;
478 488
479 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImpl); 489 DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImpl);
480 }; 490 };
481 491
482 } // namespace scheduler 492 } // namespace scheduler
483 } // namespace blink 493 } // namespace blink
484 494
485 #endif // THIRD_PARTY_WEBKIT_SOURCE_PLATFORM_SCHEDULER_RENDERER_RENDERER_SCHEDU LER_IMPL_H_ 495 #endif // THIRD_PARTY_WEBKIT_SOURCE_PLATFORM_SCHEDULER_RENDERER_RENDERER_SCHEDU LER_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698