| Index: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
 | 
| diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
 | 
| index f3369ecb1d37ebb10a89938fb290bf28bd1e0067..08cd6f979f11814c98e75eac8ab14c6f586f6087 100644
 | 
| --- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
 | 
| +++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
 | 
| @@ -217,7 +217,8 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly(
 | 
|        in_idle_period_for_testing(false),
 | 
|        use_virtual_time(false),
 | 
|        is_audio_playing(false),
 | 
| -      rail_mode_observer(nullptr) {
 | 
| +      rail_mode_observer(nullptr),
 | 
| +      wake_up_budget_pool(nullptr) {
 | 
|    foreground_main_thread_load_tracker.Resume(now);
 | 
|  }
 | 
|  
 | 
| @@ -336,6 +337,7 @@ scoped_refptr<TaskQueue> RendererSchedulerImpl::NewLoadingTaskQueue(
 | 
|    }
 | 
|    loading_task_queue->AddTaskObserver(
 | 
|        &GetMainThreadOnly().loading_task_cost_estimator);
 | 
| +  AddQueueToWakeUpBudgetPool(loading_task_queue.get());
 | 
|    return loading_task_queue;
 | 
|  }
 | 
|  
 | 
| @@ -362,6 +364,7 @@ scoped_refptr<TaskQueue> RendererSchedulerImpl::NewTimerTaskQueue(
 | 
|    }
 | 
|    timer_task_queue->AddTaskObserver(
 | 
|        &GetMainThreadOnly().timer_task_cost_estimator);
 | 
| +  AddQueueToWakeUpBudgetPool(timer_task_queue.get());
 | 
|    return timer_task_queue;
 | 
|  }
 | 
|  
 | 
| @@ -1354,6 +1357,10 @@ IdleTimeEstimator* RendererSchedulerImpl::GetIdleTimeEstimatorForTesting() {
 | 
|    return &GetMainThreadOnly().idle_time_estimator;
 | 
|  }
 | 
|  
 | 
| +WakeUpBudgetPool* RendererSchedulerImpl::GetWakeUpBudgetPoolForTesting() {
 | 
| +  return GetMainThreadOnly().wake_up_budget_pool;
 | 
| +}
 | 
| +
 | 
|  void RendererSchedulerImpl::SuspendTimerQueue() {
 | 
|    GetMainThreadOnly().timer_queue_suspend_count++;
 | 
|    ForceUpdatePolicy();
 | 
| @@ -1892,6 +1899,18 @@ bool RendererSchedulerImpl::ShouldDisableThrottlingBecauseOfAudio(
 | 
|           now;
 | 
|  }
 | 
|  
 | 
| +void RendererSchedulerImpl::AddQueueToWakeUpBudgetPool(TaskQueue* queue) {
 | 
| +  if (!GetMainThreadOnly().wake_up_budget_pool) {
 | 
| +    GetMainThreadOnly().wake_up_budget_pool =
 | 
| +        task_queue_throttler()->CreateWakeUpBudgetPool("renderer_wake_up_pool");
 | 
| +    GetMainThreadOnly().wake_up_budget_pool->SetWakeUpRate(1);
 | 
| +    GetMainThreadOnly().wake_up_budget_pool->SetWakeUpDuration(
 | 
| +        base::TimeDelta());
 | 
| +  }
 | 
| +  GetMainThreadOnly().wake_up_budget_pool->AddQueue(tick_clock()->NowTicks(),
 | 
| +                                                    queue);
 | 
| +}
 | 
| +
 | 
|  TimeDomain* RendererSchedulerImpl::GetActiveTimeDomain() {
 | 
|    if (GetMainThreadOnly().use_virtual_time) {
 | 
|      return GetVirtualTimeDomain();
 | 
| 
 |