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

Side by Side Diff: content/renderer/scheduler/renderer_scheduler_impl.cc

Issue 962633002: scheduler: Convert enums to enum classes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Did the rest too. Created 5 years, 10 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 #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
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
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
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
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
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
OLDNEW
« no previous file with comments | « content/renderer/scheduler/renderer_scheduler_impl.h ('k') | content/renderer/scheduler/task_queue_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698