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 #include "content/renderer/scheduler/renderer_scheduler_impl.h" | 5 #include "content/renderer/scheduler/renderer_scheduler_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop/message_loop_proxy.h" | 8 #include "base/message_loop/message_loop_proxy.h" |
9 #include "base/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
10 #include "base/trace_event/trace_event_argument.h" | 10 #include "base/trace_event/trace_event_argument.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 control_task_runner_( | 24 control_task_runner_( |
25 task_queue_manager_->TaskRunnerForQueue(CONTROL_TASK_QUEUE)), | 25 task_queue_manager_->TaskRunnerForQueue(CONTROL_TASK_QUEUE)), |
26 control_task_after_wakeup_runner_(task_queue_manager_->TaskRunnerForQueue( | 26 control_task_after_wakeup_runner_(task_queue_manager_->TaskRunnerForQueue( |
27 CONTROL_TASK_AFTER_WAKEUP_QUEUE)), | 27 CONTROL_TASK_AFTER_WAKEUP_QUEUE)), |
28 default_task_runner_( | 28 default_task_runner_( |
29 task_queue_manager_->TaskRunnerForQueue(DEFAULT_TASK_QUEUE)), | 29 task_queue_manager_->TaskRunnerForQueue(DEFAULT_TASK_QUEUE)), |
30 compositor_task_runner_( | 30 compositor_task_runner_( |
31 task_queue_manager_->TaskRunnerForQueue(COMPOSITOR_TASK_QUEUE)), | 31 task_queue_manager_->TaskRunnerForQueue(COMPOSITOR_TASK_QUEUE)), |
32 loading_task_runner_( | 32 loading_task_runner_( |
33 task_queue_manager_->TaskRunnerForQueue(LOADING_TASK_QUEUE)), | 33 task_queue_manager_->TaskRunnerForQueue(LOADING_TASK_QUEUE)), |
34 current_policy_(NORMAL_PRIORITY_POLICY), | 34 current_policy_(Policy::NORMAL), |
35 last_input_type_(blink::WebInputEvent::Undefined), | 35 last_input_type_(blink::WebInputEvent::Undefined), |
36 input_stream_state_(INPUT_INACTIVE), | 36 input_stream_state_(InputStreamState::INACTIVE), |
37 policy_may_need_update_(&incoming_signals_lock_), | 37 policy_may_need_update_(&incoming_signals_lock_), |
38 weak_factory_(this) { | 38 weak_factory_(this) { |
39 weak_renderer_scheduler_ptr_ = weak_factory_.GetWeakPtr(); | 39 weak_renderer_scheduler_ptr_ = weak_factory_.GetWeakPtr(); |
40 update_policy_closure_ = base::Bind(&RendererSchedulerImpl::UpdatePolicy, | 40 update_policy_closure_ = base::Bind(&RendererSchedulerImpl::UpdatePolicy, |
41 weak_renderer_scheduler_ptr_); | 41 weak_renderer_scheduler_ptr_); |
42 end_idle_period_closure_.Reset(base::Bind( | 42 end_idle_period_closure_.Reset(base::Bind( |
43 &RendererSchedulerImpl::EndIdlePeriod, weak_renderer_scheduler_ptr_)); | 43 &RendererSchedulerImpl::EndIdlePeriod, weak_renderer_scheduler_ptr_)); |
44 idle_task_runner_ = make_scoped_refptr(new SingleThreadIdleTaskRunner( | 44 idle_task_runner_ = make_scoped_refptr(new SingleThreadIdleTaskRunner( |
45 task_queue_manager_->TaskRunnerForQueue(IDLE_TASK_QUEUE), | 45 task_queue_manager_->TaskRunnerForQueue(IDLE_TASK_QUEUE), |
46 control_task_after_wakeup_runner_, | 46 control_task_after_wakeup_runner_, |
47 base::Bind(&RendererSchedulerImpl::CurrentIdleTaskDeadlineCallback, | 47 base::Bind(&RendererSchedulerImpl::CurrentIdleTaskDeadlineCallback, |
48 weak_renderer_scheduler_ptr_))); | 48 weak_renderer_scheduler_ptr_))); |
49 | 49 |
50 renderer_task_queue_selector_->SetQueuePriority( | 50 renderer_task_queue_selector_->SetQueuePriority( |
51 CONTROL_TASK_QUEUE, RendererTaskQueueSelector::CONTROL_PRIORITY); | 51 CONTROL_TASK_QUEUE, RendererTaskQueueSelector::CONTROL_PRIORITY); |
52 | 52 |
53 renderer_task_queue_selector_->SetQueuePriority( | 53 renderer_task_queue_selector_->SetQueuePriority( |
54 CONTROL_TASK_AFTER_WAKEUP_QUEUE, | 54 CONTROL_TASK_AFTER_WAKEUP_QUEUE, |
55 RendererTaskQueueSelector::CONTROL_PRIORITY); | 55 RendererTaskQueueSelector::CONTROL_PRIORITY); |
56 task_queue_manager_->SetPumpPolicy( | 56 task_queue_manager_->SetPumpPolicy( |
57 CONTROL_TASK_AFTER_WAKEUP_QUEUE, | 57 CONTROL_TASK_AFTER_WAKEUP_QUEUE, |
58 TaskQueueManager::AUTO_PUMP_AFTER_WAKEUP_POLICY); | 58 TaskQueueManager::PumpPolicy::AFTER_WAKEUP); |
59 | 59 |
60 renderer_task_queue_selector_->DisableQueue(IDLE_TASK_QUEUE); | 60 renderer_task_queue_selector_->DisableQueue(IDLE_TASK_QUEUE); |
61 task_queue_manager_->SetPumpPolicy(IDLE_TASK_QUEUE, | 61 task_queue_manager_->SetPumpPolicy(IDLE_TASK_QUEUE, |
62 TaskQueueManager::MANUAL_PUMP_POLICY); | 62 TaskQueueManager::PumpPolicy::MANUAL); |
63 | 63 |
64 // TODO(skyostil): Increase this to 4 (crbug.com/444764). | 64 // TODO(skyostil): Increase this to 4 (crbug.com/444764). |
65 task_queue_manager_->SetWorkBatchSize(1); | 65 task_queue_manager_->SetWorkBatchSize(1); |
66 | 66 |
67 for (size_t i = 0; i < TASK_QUEUE_COUNT; i++) { | 67 for (size_t i = 0; i < TASK_QUEUE_COUNT; i++) { |
68 task_queue_manager_->SetQueueName( | 68 task_queue_manager_->SetQueueName( |
69 i, TaskQueueIdToString(static_cast<QueueId>(i))); | 69 i, TaskQueueIdToString(static_cast<QueueId>(i))); |
70 } | 70 } |
71 TRACE_EVENT_OBJECT_CREATED_WITH_ID( | 71 TRACE_EVENT_OBJECT_CREATED_WITH_ID( |
72 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", | 72 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 } | 187 } |
188 | 188 |
189 bool RendererSchedulerImpl::IsHighPriorityWorkAnticipated() { | 189 bool RendererSchedulerImpl::IsHighPriorityWorkAnticipated() { |
190 DCHECK(main_thread_checker_.CalledOnValidThread()); | 190 DCHECK(main_thread_checker_.CalledOnValidThread()); |
191 if (!task_queue_manager_) | 191 if (!task_queue_manager_) |
192 return false; | 192 return false; |
193 | 193 |
194 MaybeUpdatePolicy(); | 194 MaybeUpdatePolicy(); |
195 // The touchstart and compositor policies indicate a strong likelihood of | 195 // The touchstart and compositor policies indicate a strong likelihood of |
196 // high-priority work in the near future. | 196 // high-priority work in the near future. |
197 return SchedulerPolicy() == COMPOSITOR_PRIORITY_POLICY || | 197 return SchedulerPolicy() == Policy::COMPOSITOR_PRIORITY || |
198 SchedulerPolicy() == TOUCHSTART_PRIORITY_POLICY; | 198 SchedulerPolicy() == Policy::TOUCHSTART_PRIORITY; |
199 } | 199 } |
200 | 200 |
201 bool RendererSchedulerImpl::ShouldYieldForHighPriorityWork() { | 201 bool RendererSchedulerImpl::ShouldYieldForHighPriorityWork() { |
202 DCHECK(main_thread_checker_.CalledOnValidThread()); | 202 DCHECK(main_thread_checker_.CalledOnValidThread()); |
203 if (!task_queue_manager_) | 203 if (!task_queue_manager_) |
204 return false; | 204 return false; |
205 | 205 |
206 MaybeUpdatePolicy(); | 206 MaybeUpdatePolicy(); |
207 // We only yield if we are in the compositor priority and there is compositor | 207 // We only yield if we are in the compositor priority and there is compositor |
208 // work outstanding, or if we are in the touchstart response priority. | 208 // work outstanding, or if we are in the touchstart response priority. |
209 // Note: even though the control queue is higher priority we don't yield for | 209 // Note: even though the control queue is higher priority we don't yield for |
210 // it since these tasks are not user-provided work and they are only intended | 210 // it since these tasks are not user-provided work and they are only intended |
211 // to run before the next task, not interrupt the tasks. | 211 // to run before the next task, not interrupt the tasks. |
212 switch (SchedulerPolicy()) { | 212 switch (SchedulerPolicy()) { |
213 case NORMAL_PRIORITY_POLICY: | 213 case Policy::NORMAL: |
214 return false; | 214 return false; |
215 | 215 |
216 case COMPOSITOR_PRIORITY_POLICY: | 216 case Policy::COMPOSITOR_PRIORITY: |
217 return !task_queue_manager_->IsQueueEmpty(COMPOSITOR_TASK_QUEUE); | 217 return !task_queue_manager_->IsQueueEmpty(COMPOSITOR_TASK_QUEUE); |
218 | 218 |
219 case TOUCHSTART_PRIORITY_POLICY: | 219 case Policy::TOUCHSTART_PRIORITY: |
220 return true; | 220 return true; |
221 | 221 |
222 default: | 222 default: |
223 NOTREACHED(); | 223 NOTREACHED(); |
224 return false; | 224 return false; |
225 } | 225 } |
226 } | 226 } |
227 | 227 |
228 void RendererSchedulerImpl::CurrentIdleTaskDeadlineCallback( | 228 void RendererSchedulerImpl::CurrentIdleTaskDeadlineCallback( |
229 base::TimeTicks* deadline_out) const { | 229 base::TimeTicks* deadline_out) const { |
(...skipping 21 matching lines...) Expand all Loading... |
251 | 251 |
252 void RendererSchedulerImpl::UpdatePolicy() { | 252 void RendererSchedulerImpl::UpdatePolicy() { |
253 DCHECK(main_thread_checker_.CalledOnValidThread()); | 253 DCHECK(main_thread_checker_.CalledOnValidThread()); |
254 if (!task_queue_manager_) | 254 if (!task_queue_manager_) |
255 return; | 255 return; |
256 | 256 |
257 base::AutoLock lock(incoming_signals_lock_); | 257 base::AutoLock lock(incoming_signals_lock_); |
258 base::TimeTicks now; | 258 base::TimeTicks now; |
259 policy_may_need_update_.SetWhileLocked(false); | 259 policy_may_need_update_.SetWhileLocked(false); |
260 | 260 |
261 Policy new_policy = NORMAL_PRIORITY_POLICY; | 261 Policy new_policy = Policy::NORMAL; |
262 if (input_stream_state_ != INPUT_INACTIVE) { | 262 if (input_stream_state_ != InputStreamState::INACTIVE) { |
263 base::TimeDelta new_priority_duration = | 263 base::TimeDelta new_priority_duration = |
264 base::TimeDelta::FromMilliseconds(kPriorityEscalationAfterInputMillis); | 264 base::TimeDelta::FromMilliseconds(kPriorityEscalationAfterInputMillis); |
265 base::TimeTicks new_priority_end(last_input_time_ + new_priority_duration); | 265 base::TimeTicks new_priority_end(last_input_time_ + new_priority_duration); |
266 base::TimeDelta time_left_in_policy = new_priority_end - Now(); | 266 base::TimeDelta time_left_in_policy = new_priority_end - Now(); |
267 if (time_left_in_policy > base::TimeDelta()) { | 267 if (time_left_in_policy > base::TimeDelta()) { |
268 PostUpdatePolicyOnControlRunner(time_left_in_policy); | 268 PostUpdatePolicyOnControlRunner(time_left_in_policy); |
269 new_policy = | 269 new_policy = |
270 input_stream_state_ == INPUT_ACTIVE_AND_AWAITING_TOUCHSTART_RESPONSE | 270 input_stream_state_ == |
271 ? TOUCHSTART_PRIORITY_POLICY | 271 InputStreamState::ACTIVE_AND_AWAITING_TOUCHSTART_RESPONSE |
272 : COMPOSITOR_PRIORITY_POLICY; | 272 ? Policy::TOUCHSTART_PRIORITY |
| 273 : Policy::COMPOSITOR_PRIORITY; |
273 } else { | 274 } else { |
274 // Reset |input_stream_state_| to ensure | 275 // Reset |input_stream_state_| to ensure |
275 // DidReceiveInputEventOnCompositorThread will post an UpdatePolicy task | 276 // DidReceiveInputEventOnCompositorThread will post an UpdatePolicy task |
276 // when it's next called. | 277 // when it's next called. |
277 input_stream_state_ = INPUT_INACTIVE; | 278 input_stream_state_ = InputStreamState::INACTIVE; |
278 } | 279 } |
279 } | 280 } |
280 | 281 |
281 if (new_policy == current_policy_) | 282 if (new_policy == current_policy_) |
282 return; | 283 return; |
283 | 284 |
284 switch (new_policy) { | 285 switch (new_policy) { |
285 case COMPOSITOR_PRIORITY_POLICY: | 286 case Policy::COMPOSITOR_PRIORITY: |
286 renderer_task_queue_selector_->SetQueuePriority( | 287 renderer_task_queue_selector_->SetQueuePriority( |
287 COMPOSITOR_TASK_QUEUE, RendererTaskQueueSelector::HIGH_PRIORITY); | 288 COMPOSITOR_TASK_QUEUE, RendererTaskQueueSelector::HIGH_PRIORITY); |
288 // TODO(scheduler-dev): Add a task priority between HIGH and BEST_EFFORT | 289 // TODO(scheduler-dev): Add a task priority between HIGH and BEST_EFFORT |
289 // that still has some guarantee of running. | 290 // that still has some guarantee of running. |
290 renderer_task_queue_selector_->SetQueuePriority( | 291 renderer_task_queue_selector_->SetQueuePriority( |
291 LOADING_TASK_QUEUE, RendererTaskQueueSelector::BEST_EFFORT_PRIORITY); | 292 LOADING_TASK_QUEUE, RendererTaskQueueSelector::BEST_EFFORT_PRIORITY); |
292 break; | 293 break; |
293 case TOUCHSTART_PRIORITY_POLICY: | 294 case Policy::TOUCHSTART_PRIORITY: |
294 renderer_task_queue_selector_->SetQueuePriority( | 295 renderer_task_queue_selector_->SetQueuePriority( |
295 COMPOSITOR_TASK_QUEUE, RendererTaskQueueSelector::HIGH_PRIORITY); | 296 COMPOSITOR_TASK_QUEUE, RendererTaskQueueSelector::HIGH_PRIORITY); |
296 renderer_task_queue_selector_->DisableQueue(LOADING_TASK_QUEUE); | 297 renderer_task_queue_selector_->DisableQueue(LOADING_TASK_QUEUE); |
297 break; | 298 break; |
298 case NORMAL_PRIORITY_POLICY: | 299 case Policy::NORMAL: |
299 renderer_task_queue_selector_->SetQueuePriority( | 300 renderer_task_queue_selector_->SetQueuePriority( |
300 COMPOSITOR_TASK_QUEUE, RendererTaskQueueSelector::NORMAL_PRIORITY); | 301 COMPOSITOR_TASK_QUEUE, RendererTaskQueueSelector::NORMAL_PRIORITY); |
301 renderer_task_queue_selector_->SetQueuePriority( | 302 renderer_task_queue_selector_->SetQueuePriority( |
302 LOADING_TASK_QUEUE, RendererTaskQueueSelector::NORMAL_PRIORITY); | 303 LOADING_TASK_QUEUE, RendererTaskQueueSelector::NORMAL_PRIORITY); |
303 break; | 304 break; |
304 } | 305 } |
305 DCHECK(renderer_task_queue_selector_->IsQueueEnabled(COMPOSITOR_TASK_QUEUE)); | 306 DCHECK(renderer_task_queue_selector_->IsQueueEnabled(COMPOSITOR_TASK_QUEUE)); |
306 if (new_policy != TOUCHSTART_PRIORITY_POLICY) | 307 if (new_policy != Policy::TOUCHSTART_PRIORITY) |
307 DCHECK(renderer_task_queue_selector_->IsQueueEnabled(LOADING_TASK_QUEUE)); | 308 DCHECK(renderer_task_queue_selector_->IsQueueEnabled(LOADING_TASK_QUEUE)); |
308 | 309 |
309 current_policy_ = new_policy; | 310 current_policy_ = new_policy; |
310 | 311 |
311 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( | 312 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( |
312 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", | 313 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", |
313 this, AsValueLocked(now)); | 314 this, AsValueLocked(now)); |
314 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), | 315 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
315 "RendererScheduler.policy", current_policy_); | 316 "RendererScheduler.policy", current_policy_); |
316 } | 317 } |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 return "control_after_wakeup_tq"; | 395 return "control_after_wakeup_tq"; |
395 default: | 396 default: |
396 NOTREACHED(); | 397 NOTREACHED(); |
397 return nullptr; | 398 return nullptr; |
398 } | 399 } |
399 } | 400 } |
400 | 401 |
401 // static | 402 // static |
402 const char* RendererSchedulerImpl::PolicyToString(Policy policy) { | 403 const char* RendererSchedulerImpl::PolicyToString(Policy policy) { |
403 switch (policy) { | 404 switch (policy) { |
404 case NORMAL_PRIORITY_POLICY: | 405 case Policy::NORMAL: |
405 return "normal"; | 406 return "normal"; |
406 case COMPOSITOR_PRIORITY_POLICY: | 407 case Policy::COMPOSITOR_PRIORITY: |
407 return "compositor"; | 408 return "compositor"; |
408 case TOUCHSTART_PRIORITY_POLICY: | 409 case Policy::TOUCHSTART_PRIORITY: |
409 return "touchstart"; | 410 return "touchstart"; |
410 default: | 411 default: |
411 NOTREACHED(); | 412 NOTREACHED(); |
412 return nullptr; | 413 return nullptr; |
413 } | 414 } |
414 } | 415 } |
415 | 416 |
416 const char* RendererSchedulerImpl::InputStreamStateToString( | 417 const char* RendererSchedulerImpl::InputStreamStateToString( |
417 InputStreamState state) { | 418 InputStreamState state) { |
418 switch (state) { | 419 switch (state) { |
419 case INPUT_INACTIVE: | 420 case InputStreamState::INACTIVE: |
420 return "inactive"; | 421 return "inactive"; |
421 case INPUT_ACTIVE: | 422 case InputStreamState::ACTIVE: |
422 return "active"; | 423 return "active"; |
423 case INPUT_ACTIVE_AND_AWAITING_TOUCHSTART_RESPONSE: | 424 case InputStreamState::ACTIVE_AND_AWAITING_TOUCHSTART_RESPONSE: |
424 return "active_and_awaiting_touchstart_response"; | 425 return "active_and_awaiting_touchstart_response"; |
425 default: | 426 default: |
426 NOTREACHED(); | 427 NOTREACHED(); |
427 return nullptr; | 428 return nullptr; |
428 } | 429 } |
429 } | 430 } |
430 | 431 |
431 scoped_refptr<base::trace_event::ConvertableToTraceFormat> | 432 scoped_refptr<base::trace_event::ConvertableToTraceFormat> |
432 RendererSchedulerImpl::AsValueLocked(base::TimeTicks optional_now) const { | 433 RendererSchedulerImpl::AsValueLocked(base::TimeTicks optional_now) const { |
433 DCHECK(main_thread_checker_.CalledOnValidThread()); | 434 DCHECK(main_thread_checker_.CalledOnValidThread()); |
(...skipping 17 matching lines...) Expand all Loading... |
451 return state; | 452 return state; |
452 } | 453 } |
453 | 454 |
454 RendererSchedulerImpl::InputStreamState | 455 RendererSchedulerImpl::InputStreamState |
455 RendererSchedulerImpl::ComputeNewInputStreamState( | 456 RendererSchedulerImpl::ComputeNewInputStreamState( |
456 InputStreamState current_state, | 457 InputStreamState current_state, |
457 blink::WebInputEvent::Type new_input_type, | 458 blink::WebInputEvent::Type new_input_type, |
458 blink::WebInputEvent::Type last_input_type) { | 459 blink::WebInputEvent::Type last_input_type) { |
459 switch (new_input_type) { | 460 switch (new_input_type) { |
460 case blink::WebInputEvent::TouchStart: | 461 case blink::WebInputEvent::TouchStart: |
461 return INPUT_ACTIVE_AND_AWAITING_TOUCHSTART_RESPONSE; | 462 return InputStreamState::ACTIVE_AND_AWAITING_TOUCHSTART_RESPONSE; |
462 | 463 |
463 case blink::WebInputEvent::TouchMove: | 464 case blink::WebInputEvent::TouchMove: |
464 // Observation of consecutive touchmoves is a strong signal that the page | 465 // Observation of consecutive touchmoves is a strong signal that the page |
465 // is consuming the touch sequence, in which case touchstart response | 466 // is consuming the touch sequence, in which case touchstart response |
466 // prioritization is no longer necessary. Otherwise, the initial touchmove | 467 // prioritization is no longer necessary. Otherwise, the initial touchmove |
467 // should preserve the touchstart response pending state. | 468 // should preserve the touchstart response pending state. |
468 if (current_state == INPUT_ACTIVE_AND_AWAITING_TOUCHSTART_RESPONSE) { | 469 if (current_state == |
| 470 InputStreamState::ACTIVE_AND_AWAITING_TOUCHSTART_RESPONSE) { |
469 return last_input_type == blink::WebInputEvent::TouchMove | 471 return last_input_type == blink::WebInputEvent::TouchMove |
470 ? INPUT_ACTIVE | 472 ? InputStreamState::ACTIVE |
471 : INPUT_ACTIVE_AND_AWAITING_TOUCHSTART_RESPONSE; | 473 : InputStreamState::ACTIVE_AND_AWAITING_TOUCHSTART_RESPONSE; |
472 } | 474 } |
473 break; | 475 break; |
474 | 476 |
475 case blink::WebInputEvent::GestureTapDown: | 477 case blink::WebInputEvent::GestureTapDown: |
476 case blink::WebInputEvent::GestureShowPress: | 478 case blink::WebInputEvent::GestureShowPress: |
477 case blink::WebInputEvent::GestureFlingCancel: | 479 case blink::WebInputEvent::GestureFlingCancel: |
478 case blink::WebInputEvent::GestureScrollEnd: | 480 case blink::WebInputEvent::GestureScrollEnd: |
479 // With no observable effect, these meta events do not indicate a | 481 // With no observable effect, these meta events do not indicate a |
480 // meaningful touchstart response and should not impact task priority. | 482 // meaningful touchstart response and should not impact task priority. |
481 return current_state; | 483 return current_state; |
482 | 484 |
483 default: | 485 default: |
484 break; | 486 break; |
485 } | 487 } |
486 return INPUT_ACTIVE; | 488 return InputStreamState::ACTIVE; |
487 } | 489 } |
488 | 490 |
489 void RendererSchedulerImpl::AddTaskObserver( | 491 void RendererSchedulerImpl::AddTaskObserver( |
490 base::MessageLoop::TaskObserver* task_observer) { | 492 base::MessageLoop::TaskObserver* task_observer) { |
491 DCHECK(main_thread_checker_.CalledOnValidThread()); | 493 DCHECK(main_thread_checker_.CalledOnValidThread()); |
492 if (task_queue_manager_) | 494 if (task_queue_manager_) |
493 task_queue_manager_->AddTaskObserver(task_observer); | 495 task_queue_manager_->AddTaskObserver(task_observer); |
494 } | 496 } |
495 | 497 |
496 void RendererSchedulerImpl::RemoveTaskObserver( | 498 void RendererSchedulerImpl::RemoveTaskObserver( |
497 base::MessageLoop::TaskObserver* task_observer) { | 499 base::MessageLoop::TaskObserver* task_observer) { |
498 DCHECK(main_thread_checker_.CalledOnValidThread()); | 500 DCHECK(main_thread_checker_.CalledOnValidThread()); |
499 if (task_queue_manager_) | 501 if (task_queue_manager_) |
500 task_queue_manager_->RemoveTaskObserver(task_observer); | 502 task_queue_manager_->RemoveTaskObserver(task_observer); |
501 } | 503 } |
502 | 504 |
503 } // namespace content | 505 } // namespace content |
OLD | NEW |