| 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 "platform/scheduler/renderer/renderer_scheduler_impl.h" | 5 #include "platform/scheduler/renderer/renderer_scheduler_impl.h" | 
| 6 | 6 | 
| 7 #include "base/bind.h" | 7 #include "base/bind.h" | 
| 8 #include "base/debug/stack_trace.h" | 8 #include "base/debug/stack_trace.h" | 
| 9 #include "base/logging.h" | 9 #include "base/logging.h" | 
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" | 
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 79       delayed_update_policy_runner_( | 79       delayed_update_policy_runner_( | 
| 80           base::Bind(&RendererSchedulerImpl::UpdatePolicy, | 80           base::Bind(&RendererSchedulerImpl::UpdatePolicy, | 
| 81                      base::Unretained(this)), | 81                      base::Unretained(this)), | 
| 82           helper_.ControlTaskRunner()), | 82           helper_.ControlTaskRunner()), | 
| 83       main_thread_only_(this, | 83       main_thread_only_(this, | 
| 84                         compositor_task_runner_, | 84                         compositor_task_runner_, | 
| 85                         helper_.scheduler_tqm_delegate().get(), | 85                         helper_.scheduler_tqm_delegate().get(), | 
| 86                         helper_.scheduler_tqm_delegate()->NowTicks()), | 86                         helper_.scheduler_tqm_delegate()->NowTicks()), | 
| 87       policy_may_need_update_(&any_thread_lock_), | 87       policy_may_need_update_(&any_thread_lock_), | 
| 88       weak_factory_(this) { | 88       weak_factory_(this) { | 
| 89   throttling_helper_.reset(new ThrottlingHelper(this, "renderer.scheduler")); | 89   task_queue_throttler_.reset( | 
|  | 90       new TaskQueueThrottler(this, "renderer.scheduler")); | 
| 90   update_policy_closure_ = base::Bind(&RendererSchedulerImpl::UpdatePolicy, | 91   update_policy_closure_ = base::Bind(&RendererSchedulerImpl::UpdatePolicy, | 
| 91                                       weak_factory_.GetWeakPtr()); | 92                                       weak_factory_.GetWeakPtr()); | 
| 92   end_renderer_hidden_idle_period_closure_.Reset(base::Bind( | 93   end_renderer_hidden_idle_period_closure_.Reset(base::Bind( | 
| 93       &RendererSchedulerImpl::EndIdlePeriod, weak_factory_.GetWeakPtr())); | 94       &RendererSchedulerImpl::EndIdlePeriod, weak_factory_.GetWeakPtr())); | 
| 94 | 95 | 
| 95   suspend_timers_when_backgrounded_closure_.Reset( | 96   suspend_timers_when_backgrounded_closure_.Reset( | 
| 96       base::Bind(&RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded, | 97       base::Bind(&RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded, | 
| 97                  weak_factory_.GetWeakPtr())); | 98                  weak_factory_.GetWeakPtr())); | 
| 98 | 99 | 
| 99   default_loading_task_runner_ = NewLoadingTaskRunner("default_loading_tq"); | 100   default_loading_task_runner_ = NewLoadingTaskRunner("default_loading_tq"); | 
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 192 RendererSchedulerImpl::CompositorThreadOnly::CompositorThreadOnly() | 193 RendererSchedulerImpl::CompositorThreadOnly::CompositorThreadOnly() | 
| 193     : last_input_type(blink::WebInputEvent::Undefined) {} | 194     : last_input_type(blink::WebInputEvent::Undefined) {} | 
| 194 | 195 | 
| 195 RendererSchedulerImpl::CompositorThreadOnly::~CompositorThreadOnly() {} | 196 RendererSchedulerImpl::CompositorThreadOnly::~CompositorThreadOnly() {} | 
| 196 | 197 | 
| 197 void RendererSchedulerImpl::Shutdown() { | 198 void RendererSchedulerImpl::Shutdown() { | 
| 198   base::TimeTicks now = tick_clock()->NowTicks(); | 199   base::TimeTicks now = tick_clock()->NowTicks(); | 
| 199   MainThreadOnly().background_main_thread_load_tracker.RecordIdle(now); | 200   MainThreadOnly().background_main_thread_load_tracker.RecordIdle(now); | 
| 200   MainThreadOnly().foreground_main_thread_load_tracker.RecordIdle(now); | 201   MainThreadOnly().foreground_main_thread_load_tracker.RecordIdle(now); | 
| 201 | 202 | 
| 202   throttling_helper_.reset(); | 203   task_queue_throttler_.reset(); | 
| 203   helper_.Shutdown(); | 204   helper_.Shutdown(); | 
| 204   MainThreadOnly().was_shutdown = true; | 205   MainThreadOnly().was_shutdown = true; | 
| 205   MainThreadOnly().rail_mode_observer = nullptr; | 206   MainThreadOnly().rail_mode_observer = nullptr; | 
| 206 } | 207 } | 
| 207 | 208 | 
| 208 std::unique_ptr<blink::WebThread> RendererSchedulerImpl::CreateMainThread() { | 209 std::unique_ptr<blink::WebThread> RendererSchedulerImpl::CreateMainThread() { | 
| 209   return base::MakeUnique<WebThreadImplForRendererScheduler>(this); | 210   return base::MakeUnique<WebThreadImplForRendererScheduler>(this); | 
| 210 } | 211 } | 
| 211 | 212 | 
| 212 scoped_refptr<TaskQueue> RendererSchedulerImpl::DefaultTaskRunner() { | 213 scoped_refptr<TaskQueue> RendererSchedulerImpl::DefaultTaskRunner() { | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 245       TaskQueue::Spec(name).SetShouldMonitorQuiescence(true).SetTimeDomain( | 246       TaskQueue::Spec(name).SetShouldMonitorQuiescence(true).SetTimeDomain( | 
| 246           MainThreadOnly().use_virtual_time ? GetVirtualTimeDomain() | 247           MainThreadOnly().use_virtual_time ? GetVirtualTimeDomain() | 
| 247                                             : nullptr))); | 248                                             : nullptr))); | 
| 248   loading_task_runners_.insert(loading_task_queue); | 249   loading_task_runners_.insert(loading_task_queue); | 
| 249   loading_task_queue->SetQueueEnabled( | 250   loading_task_queue->SetQueueEnabled( | 
| 250       MainThreadOnly().current_policy.loading_queue_policy.is_enabled); | 251       MainThreadOnly().current_policy.loading_queue_policy.is_enabled); | 
| 251   loading_task_queue->SetQueuePriority( | 252   loading_task_queue->SetQueuePriority( | 
| 252       MainThreadOnly().current_policy.loading_queue_policy.priority); | 253       MainThreadOnly().current_policy.loading_queue_policy.priority); | 
| 253   if (MainThreadOnly().current_policy.loading_queue_policy.time_domain_type == | 254   if (MainThreadOnly().current_policy.loading_queue_policy.time_domain_type == | 
| 254       TimeDomainType::THROTTLED) { | 255       TimeDomainType::THROTTLED) { | 
| 255     throttling_helper_->IncreaseThrottleRefCount(loading_task_queue.get()); | 256     task_queue_throttler_->IncreaseThrottleRefCount(loading_task_queue.get()); | 
| 256   } | 257   } | 
| 257   loading_task_queue->AddTaskObserver( | 258   loading_task_queue->AddTaskObserver( | 
| 258       &MainThreadOnly().loading_task_cost_estimator); | 259       &MainThreadOnly().loading_task_cost_estimator); | 
| 259   return loading_task_queue; | 260   return loading_task_queue; | 
| 260 } | 261 } | 
| 261 | 262 | 
| 262 scoped_refptr<TaskQueue> RendererSchedulerImpl::NewTimerTaskRunner( | 263 scoped_refptr<TaskQueue> RendererSchedulerImpl::NewTimerTaskRunner( | 
| 263     const char* name) { | 264     const char* name) { | 
| 264   helper_.CheckOnValidThread(); | 265   helper_.CheckOnValidThread(); | 
| 265   // TODO(alexclarke): Consider using ApplyTaskQueuePolicy() for brevity. | 266   // TODO(alexclarke): Consider using ApplyTaskQueuePolicy() for brevity. | 
| 266   scoped_refptr<TaskQueue> timer_task_queue( | 267   scoped_refptr<TaskQueue> timer_task_queue( | 
| 267       helper_.NewTaskQueue(TaskQueue::Spec(name) | 268       helper_.NewTaskQueue(TaskQueue::Spec(name) | 
| 268                                .SetShouldMonitorQuiescence(true) | 269                                .SetShouldMonitorQuiescence(true) | 
| 269                                .SetShouldReportWhenExecutionBlocked(true) | 270                                .SetShouldReportWhenExecutionBlocked(true) | 
| 270                                .SetTimeDomain(MainThreadOnly().use_virtual_time | 271                                .SetTimeDomain(MainThreadOnly().use_virtual_time | 
| 271                                                   ? GetVirtualTimeDomain() | 272                                                   ? GetVirtualTimeDomain() | 
| 272                                                   : nullptr))); | 273                                                   : nullptr))); | 
| 273   timer_task_runners_.insert(timer_task_queue); | 274   timer_task_runners_.insert(timer_task_queue); | 
| 274   timer_task_queue->SetQueueEnabled( | 275   timer_task_queue->SetQueueEnabled( | 
| 275       MainThreadOnly().current_policy.timer_queue_policy.is_enabled); | 276       MainThreadOnly().current_policy.timer_queue_policy.is_enabled); | 
| 276   timer_task_queue->SetQueuePriority( | 277   timer_task_queue->SetQueuePriority( | 
| 277       MainThreadOnly().current_policy.timer_queue_policy.priority); | 278       MainThreadOnly().current_policy.timer_queue_policy.priority); | 
| 278   if (MainThreadOnly().current_policy.timer_queue_policy.time_domain_type == | 279   if (MainThreadOnly().current_policy.timer_queue_policy.time_domain_type == | 
| 279       TimeDomainType::THROTTLED) { | 280       TimeDomainType::THROTTLED) { | 
| 280     throttling_helper_->IncreaseThrottleRefCount(timer_task_queue.get()); | 281     task_queue_throttler_->IncreaseThrottleRefCount(timer_task_queue.get()); | 
| 281   } | 282   } | 
| 282   timer_task_queue->AddTaskObserver( | 283   timer_task_queue->AddTaskObserver( | 
| 283       &MainThreadOnly().timer_task_cost_estimator); | 284       &MainThreadOnly().timer_task_cost_estimator); | 
| 284   return timer_task_queue; | 285   return timer_task_queue; | 
| 285 } | 286 } | 
| 286 | 287 | 
| 287 scoped_refptr<TaskQueue> RendererSchedulerImpl::NewUnthrottledTaskRunner( | 288 scoped_refptr<TaskQueue> RendererSchedulerImpl::NewUnthrottledTaskRunner( | 
| 288     const char* name) { | 289     const char* name) { | 
| 289   helper_.CheckOnValidThread(); | 290   helper_.CheckOnValidThread(); | 
| 290   scoped_refptr<TaskQueue> unthrottled_task_queue(helper_.NewTaskQueue( | 291   scoped_refptr<TaskQueue> unthrottled_task_queue(helper_.NewTaskQueue( | 
| 291       TaskQueue::Spec(name).SetShouldMonitorQuiescence(true).SetTimeDomain( | 292       TaskQueue::Spec(name).SetShouldMonitorQuiescence(true).SetTimeDomain( | 
| 292           MainThreadOnly().use_virtual_time ? GetVirtualTimeDomain() | 293           MainThreadOnly().use_virtual_time ? GetVirtualTimeDomain() | 
| 293                                             : nullptr))); | 294                                             : nullptr))); | 
| 294   unthrottled_task_runners_.insert(unthrottled_task_queue); | 295   unthrottled_task_runners_.insert(unthrottled_task_queue); | 
| 295   return unthrottled_task_queue; | 296   return unthrottled_task_queue; | 
| 296 } | 297 } | 
| 297 | 298 | 
| 298 std::unique_ptr<RenderWidgetSchedulingState> | 299 std::unique_ptr<RenderWidgetSchedulingState> | 
| 299 RendererSchedulerImpl::NewRenderWidgetSchedulingState() { | 300 RendererSchedulerImpl::NewRenderWidgetSchedulingState() { | 
| 300   return render_widget_scheduler_signals_.NewRenderWidgetSchedulingState(); | 301   return render_widget_scheduler_signals_.NewRenderWidgetSchedulingState(); | 
| 301 } | 302 } | 
| 302 | 303 | 
| 303 void RendererSchedulerImpl::OnUnregisterTaskQueue( | 304 void RendererSchedulerImpl::OnUnregisterTaskQueue( | 
| 304     const scoped_refptr<TaskQueue>& task_queue) { | 305     const scoped_refptr<TaskQueue>& task_queue) { | 
| 305   if (throttling_helper_.get()) | 306   if (task_queue_throttler_.get()) | 
| 306     throttling_helper_->UnregisterTaskQueue(task_queue.get()); | 307     task_queue_throttler_->UnregisterTaskQueue(task_queue.get()); | 
| 307 | 308 | 
| 308   if (loading_task_runners_.find(task_queue) != loading_task_runners_.end()) { | 309   if (loading_task_runners_.find(task_queue) != loading_task_runners_.end()) { | 
| 309     task_queue->RemoveTaskObserver( | 310     task_queue->RemoveTaskObserver( | 
| 310         &MainThreadOnly().loading_task_cost_estimator); | 311         &MainThreadOnly().loading_task_cost_estimator); | 
| 311     loading_task_runners_.erase(task_queue); | 312     loading_task_runners_.erase(task_queue); | 
| 312   } else if (timer_task_runners_.find(task_queue) != | 313   } else if (timer_task_runners_.find(task_queue) != | 
| 313              timer_task_runners_.end()) { | 314              timer_task_runners_.end()) { | 
| 314     task_queue->RemoveTaskObserver(&MainThreadOnly().timer_task_cost_estimator); | 315     task_queue->RemoveTaskObserver(&MainThreadOnly().timer_task_cost_estimator); | 
| 315     timer_task_runners_.erase(task_queue); | 316     timer_task_runners_.erase(task_queue); | 
| 316   } else if (unthrottled_task_runners_.find(task_queue) != | 317   } else if (unthrottled_task_runners_.find(task_queue) != | 
| (...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1020 | 1021 | 
| 1021   DCHECK(compositor_task_runner_->IsQueueEnabled()); | 1022   DCHECK(compositor_task_runner_->IsQueueEnabled()); | 
| 1022   MainThreadOnly().current_policy = new_policy; | 1023   MainThreadOnly().current_policy = new_policy; | 
| 1023 } | 1024 } | 
| 1024 | 1025 | 
| 1025 void RendererSchedulerImpl::ApplyTaskQueuePolicy( | 1026 void RendererSchedulerImpl::ApplyTaskQueuePolicy( | 
| 1026     TaskQueue* task_queue, | 1027     TaskQueue* task_queue, | 
| 1027     const TaskQueuePolicy& old_task_queue_policy, | 1028     const TaskQueuePolicy& old_task_queue_policy, | 
| 1028     const TaskQueuePolicy& new_task_queue_policy) const { | 1029     const TaskQueuePolicy& new_task_queue_policy) const { | 
| 1029   if (old_task_queue_policy.is_enabled != new_task_queue_policy.is_enabled) { | 1030   if (old_task_queue_policy.is_enabled != new_task_queue_policy.is_enabled) { | 
| 1030     throttling_helper_->SetQueueEnabled(task_queue, | 1031     task_queue_throttler_->SetQueueEnabled(task_queue, | 
| 1031                                         new_task_queue_policy.is_enabled); | 1032                                            new_task_queue_policy.is_enabled); | 
| 1032   } | 1033   } | 
| 1033 | 1034 | 
| 1034   if (old_task_queue_policy.priority != new_task_queue_policy.priority) | 1035   if (old_task_queue_policy.priority != new_task_queue_policy.priority) | 
| 1035     task_queue->SetQueuePriority(new_task_queue_policy.priority); | 1036     task_queue->SetQueuePriority(new_task_queue_policy.priority); | 
| 1036 | 1037 | 
| 1037   if (old_task_queue_policy.time_domain_type != | 1038   if (old_task_queue_policy.time_domain_type != | 
| 1038       new_task_queue_policy.time_domain_type) { | 1039       new_task_queue_policy.time_domain_type) { | 
| 1039     if (old_task_queue_policy.time_domain_type == TimeDomainType::THROTTLED) { | 1040     if (old_task_queue_policy.time_domain_type == TimeDomainType::THROTTLED) { | 
| 1040       throttling_helper_->DecreaseThrottleRefCount(task_queue); | 1041       task_queue_throttler_->DecreaseThrottleRefCount(task_queue); | 
| 1041     } else if (new_task_queue_policy.time_domain_type == | 1042     } else if (new_task_queue_policy.time_domain_type == | 
| 1042                TimeDomainType::THROTTLED) { | 1043                TimeDomainType::THROTTLED) { | 
| 1043       throttling_helper_->IncreaseThrottleRefCount(task_queue); | 1044       task_queue_throttler_->IncreaseThrottleRefCount(task_queue); | 
| 1044     } else if (new_task_queue_policy.time_domain_type == | 1045     } else if (new_task_queue_policy.time_domain_type == | 
| 1045                TimeDomainType::VIRTUAL) { | 1046                TimeDomainType::VIRTUAL) { | 
| 1046       DCHECK(virtual_time_domain_); | 1047       DCHECK(virtual_time_domain_); | 
| 1047       task_queue->SetTimeDomain(virtual_time_domain_.get()); | 1048       task_queue->SetTimeDomain(virtual_time_domain_.get()); | 
| 1048     } | 1049     } | 
| 1049   } | 1050   } | 
| 1050 } | 1051 } | 
| 1051 | 1052 | 
| 1052 RendererSchedulerImpl::UseCase RendererSchedulerImpl::ComputeCurrentUseCase( | 1053 RendererSchedulerImpl::UseCase RendererSchedulerImpl::ComputeCurrentUseCase( | 
| 1053     base::TimeTicks now, | 1054     base::TimeTicks now, | 
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1454         true; | 1455         true; | 
| 1455     BroadcastIntervention( | 1456     BroadcastIntervention( | 
| 1456         "Blink deferred a task in order to make scrolling smoother. " | 1457         "Blink deferred a task in order to make scrolling smoother. " | 
| 1457         "Your timer and network tasks should take less than 50ms to run " | 1458         "Your timer and network tasks should take less than 50ms to run " | 
| 1458         "to avoid this. Please see " | 1459         "to avoid this. Please see " | 
| 1459         "https://developers.google.com/web/tools/chrome-devtools/profile/evaluat
      e-performance/rail" | 1460         "https://developers.google.com/web/tools/chrome-devtools/profile/evaluat
      e-performance/rail" | 
| 1460         " and https://crbug.com/574343#c40 for more information."); | 1461         " and https://crbug.com/574343#c40 for more information."); | 
| 1461   } | 1462   } | 
| 1462 } | 1463 } | 
| 1463 | 1464 | 
| 1464 void RendererSchedulerImpl::ReportTaskTime(double start_time, double end_time) { | 1465 void RendererSchedulerImpl::ReportTaskTime(TaskQueue* task_queue, | 
| 1465   base::TimeTicks start_time_ticks = | 1466                                            base::TimeTicks start_time, | 
| 1466       MonotonicTimeInSecondsToTimeTicks(start_time); | 1467                                            base::TimeTicks end_time) { | 
| 1467   base::TimeTicks end_time_ticks = MonotonicTimeInSecondsToTimeTicks(end_time); | 1468   MainThreadOnly().queueing_time_estimator.OnToplevelTaskCompleted(start_time, | 
|  | 1469                                                                    end_time); | 
| 1468 | 1470 | 
| 1469   MainThreadOnly().queueing_time_estimator.OnToplevelTaskCompleted( | 1471   task_queue_throttler()->OnTaskRunTimeReported(task_queue, start_time, | 
| 1470       start_time_ticks, end_time_ticks); | 1472                                                 end_time); | 
|  | 1473 | 
| 1471   // We want to measure thread time here, but for efficiency reasons | 1474   // We want to measure thread time here, but for efficiency reasons | 
| 1472   // we stick with wall time. | 1475   // we stick with wall time. | 
| 1473   MainThreadOnly().foreground_main_thread_load_tracker.RecordTaskTime( | 1476   MainThreadOnly().foreground_main_thread_load_tracker.RecordTaskTime( | 
| 1474       start_time_ticks, end_time_ticks); | 1477       start_time, end_time); | 
| 1475   MainThreadOnly().background_main_thread_load_tracker.RecordTaskTime( | 1478   MainThreadOnly().background_main_thread_load_tracker.RecordTaskTime( | 
| 1476       start_time_ticks, end_time_ticks); | 1479       start_time, end_time); | 
| 1477   // TODO(altimin): Per-page metrics should also be considered. | 1480   // TODO(altimin): Per-page metrics should also be considered. | 
|  | 1481 | 
| 1478   UMA_HISTOGRAM_CUSTOM_COUNTS("RendererScheduler.TaskTime", | 1482   UMA_HISTOGRAM_CUSTOM_COUNTS("RendererScheduler.TaskTime", | 
| 1479                               (end_time_ticks - start_time_ticks).InMicroseconds
      (), 1, | 1483                               (end_time - start_time).InMicroseconds(), 1, | 
| 1480                               1000000, 50); | 1484                               1000000, 50); | 
| 1481 } | 1485 } | 
| 1482 | 1486 | 
| 1483 void RendererSchedulerImpl::AddTaskTimeObserver( | 1487 void RendererSchedulerImpl::AddTaskTimeObserver( | 
| 1484     TaskTimeObserver* task_time_observer) { | 1488     TaskTimeObserver* task_time_observer) { | 
| 1485   helper_.AddTaskTimeObserver(task_time_observer); | 1489   helper_.AddTaskTimeObserver(task_time_observer); | 
| 1486 } | 1490 } | 
| 1487 | 1491 | 
| 1488 void RendererSchedulerImpl::RemoveTaskTimeObserver( | 1492 void RendererSchedulerImpl::RemoveTaskTimeObserver( | 
| 1489     TaskTimeObserver* task_time_observer) { | 1493     TaskTimeObserver* task_time_observer) { | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 1509 } | 1513 } | 
| 1510 | 1514 | 
| 1511 void RendererSchedulerImpl::EnableVirtualTime() { | 1515 void RendererSchedulerImpl::EnableVirtualTime() { | 
| 1512   MainThreadOnly().use_virtual_time = true; | 1516   MainThreadOnly().use_virtual_time = true; | 
| 1513 | 1517 | 
| 1514   // The |unthrottled_task_runners_| are not actively managed by UpdatePolicy(). | 1518   // The |unthrottled_task_runners_| are not actively managed by UpdatePolicy(). | 
| 1515   AutoAdvancingVirtualTimeDomain* time_domain = GetVirtualTimeDomain(); | 1519   AutoAdvancingVirtualTimeDomain* time_domain = GetVirtualTimeDomain(); | 
| 1516   for (const scoped_refptr<TaskQueue>& task_queue : unthrottled_task_runners_) | 1520   for (const scoped_refptr<TaskQueue>& task_queue : unthrottled_task_runners_) | 
| 1517     task_queue->SetTimeDomain(time_domain); | 1521     task_queue->SetTimeDomain(time_domain); | 
| 1518 | 1522 | 
| 1519   throttling_helper_->EnableVirtualTime(); | 1523   task_queue_throttler_->EnableVirtualTime(); | 
| 1520 | 1524 | 
| 1521   ForceUpdatePolicy(); | 1525   ForceUpdatePolicy(); | 
| 1522 } | 1526 } | 
| 1523 | 1527 | 
| 1524 // static | 1528 // static | 
| 1525 const char* RendererSchedulerImpl::UseCaseToString(UseCase use_case) { | 1529 const char* RendererSchedulerImpl::UseCaseToString(UseCase use_case) { | 
| 1526   switch (use_case) { | 1530   switch (use_case) { | 
| 1527     case UseCase::NONE: | 1531     case UseCase::NONE: | 
| 1528       return "none"; | 1532       return "none"; | 
| 1529     case UseCase::COMPOSITOR_GESTURE: | 1533     case UseCase::COMPOSITOR_GESTURE: | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 1556     case v8::PERFORMANCE_LOAD: | 1560     case v8::PERFORMANCE_LOAD: | 
| 1557       return "load"; | 1561       return "load"; | 
| 1558     default: | 1562     default: | 
| 1559       NOTREACHED(); | 1563       NOTREACHED(); | 
| 1560       return nullptr; | 1564       return nullptr; | 
| 1561   } | 1565   } | 
| 1562 } | 1566 } | 
| 1563 | 1567 | 
| 1564 }  // namespace scheduler | 1568 }  // namespace scheduler | 
| 1565 }  // namespace blink | 1569 }  // namespace blink | 
| OLD | NEW | 
|---|