| 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 |