Chromium Code Reviews| Index: components/scheduler/renderer/web_view_scheduler_impl.cc | 
| diff --git a/components/scheduler/renderer/web_view_scheduler_impl.cc b/components/scheduler/renderer/web_view_scheduler_impl.cc | 
| index 28bc2163e10c4aa418a4cb0f6057bc3a76afc208..1db944b0e0f01d680cf40c0dd3c9bc5b23ab4f29 100644 | 
| --- a/components/scheduler/renderer/web_view_scheduler_impl.cc | 
| +++ b/components/scheduler/renderer/web_view_scheduler_impl.cc | 
| @@ -5,6 +5,7 @@ | 
| #include "components/scheduler/renderer/web_view_scheduler_impl.h" | 
| #include "base/logging.h" | 
| +#include "components/scheduler/renderer/renderer_scheduler_impl.h" | 
| #include "components/scheduler/renderer/web_frame_scheduler_impl.h" | 
| #include "third_party/WebKit/public/platform/WebFrameScheduler.h" | 
| @@ -12,10 +13,16 @@ namespace scheduler { | 
| WebViewSchedulerImpl::WebViewSchedulerImpl( | 
| blink::WebView* web_view, | 
| - RendererSchedulerImpl* renderer_scheduler) | 
| + RendererSchedulerImpl* renderer_scheduler, | 
| + const char* tracing_category) | 
| : web_view_(web_view), | 
| renderer_scheduler_(renderer_scheduler), | 
| - background_(false) {} | 
| + tracing_category_(tracing_category), | 
| + background_(false), | 
| + weak_factory_(this) { | 
| + pump_throttled_tasks_closure_.Reset(base::Bind( | 
| 
 
Sami
2015/11/17 10:12:21
Doing this here is fine for now, but I wonder how
 
alex clarke (OOO till 29th)
2015/11/23 17:13:45
Yes we probably will add a helper.
 
 | 
| + &WebViewSchedulerImpl::PumpThrottledTasks, weak_factory_.GetWeakPtr())); | 
| +} | 
| WebViewSchedulerImpl::~WebViewSchedulerImpl() { | 
| // TODO(alexclarke): Find out why we can't rely on the web view outliving the | 
| @@ -26,14 +33,27 @@ WebViewSchedulerImpl::~WebViewSchedulerImpl() { | 
| } | 
| void WebViewSchedulerImpl::setPageInBackground(bool background) { | 
| + if (background_ == background) | 
| + return; | 
| + | 
| background_ = background; | 
| - // TODO(alexclarke): Do something with this flag. | 
| + | 
| + for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { | 
| + frame_scheduler->SetPageInBackground(background); | 
| + } | 
| + | 
| + if (background) { | 
| + SchedulePumpThrottledTasks(); | 
| + } else { | 
| + pump_throttled_tasks_closure_.Cancel(); | 
| + } | 
| } | 
| blink::WebPassOwnPtr<blink::WebFrameScheduler> | 
| WebViewSchedulerImpl::createFrameScheduler() { | 
| scoped_ptr<WebFrameSchedulerImpl> frame_scheduler( | 
| new WebFrameSchedulerImpl(renderer_scheduler_, this)); | 
| + frame_scheduler->SetPageInBackground(background_); | 
| frame_schedulers_.insert(frame_scheduler.get()); | 
| return blink::adoptWebPtr(frame_scheduler.release()); | 
| } | 
| @@ -43,4 +63,27 @@ void WebViewSchedulerImpl::Unregister(WebFrameSchedulerImpl* frame_scheduler) { | 
| frame_schedulers_.erase(frame_scheduler); | 
| } | 
| +void WebViewSchedulerImpl::PumpThrottledTasks() { | 
| + TRACE_EVENT0(tracing_category_, "WebViewSchedulerImpl::PumpThrottledTasks"); | 
| + DCHECK(background_); | 
| + for (WebFrameSchedulerImpl* frame_scheduler : frame_schedulers_) { | 
| + frame_scheduler->PumpBackgroundTasks(); | 
| + } | 
| + SchedulePumpThrottledTasks(); | 
| 
 
Sami
2015/11/17 10:12:21
Will this ever stop ticking if there's no work to
 
alex clarke (OOO till 29th)
2015/11/23 17:13:45
I've changed it so it does.
 
 | 
| +} | 
| + | 
| +/* static */ | 
| +double WebViewSchedulerImpl::DelayToNextRunTimeInSeconds( | 
| + double now_in_seconds) { | 
| + return ceilf(now_in_seconds + 0.2) - now_in_seconds; | 
| 
 
Sami
2015/11/17 10:12:21
This probably deserves a comment and a named const
 
alex clarke (OOO till 29th)
2015/11/23 17:13:45
Yes and this also ticks once per second too.
 
 | 
| +} | 
| + | 
| +void WebViewSchedulerImpl::SchedulePumpThrottledTasks() { | 
| + pump_throttled_tasks_closure_.Cancel(); | 
| + renderer_scheduler_->ControlTaskRunner()->PostDelayedTask( | 
| + FROM_HERE, pump_throttled_tasks_closure_.callback(), | 
| + base::TimeDelta::FromSecondsD(DelayToNextRunTimeInSeconds( | 
| 
 
Sami
2015/11/17 10:12:21
Is there a way to do this calculation only using T
 
alex clarke (OOO till 29th)
2015/11/23 17:13:45
Done.
 
 | 
| + renderer_scheduler_->MonotonicallyIncreasingTimeSeconds()))); | 
| +} | 
| + | 
| } // namespace scheduler |