Index: components/scheduler/child/compositor_worker_scheduler.cc |
diff --git a/components/scheduler/child/compositor_worker_scheduler.cc b/components/scheduler/child/compositor_worker_scheduler.cc |
index 38a8a4a5129a03c043863e94f4ed5d657c4f0bae..c088b1b3aac9545a6e89431109bedbe0ceeabffc 100644 |
--- a/components/scheduler/child/compositor_worker_scheduler.cc |
+++ b/components/scheduler/child/compositor_worker_scheduler.cc |
@@ -123,9 +123,13 @@ scoped_refptr<TaskQueue> CompositorWorkerScheduler::DefaultTaskRunner() { |
scoped_refptr<scheduler::SingleThreadIdleTaskRunner> |
CompositorWorkerScheduler::IdleTaskRunner() { |
- // TODO(sad): Not having a task-runner for idle tasks means v8 has to fallback |
- // to inline GC, which might cause jank. |
- return nullptr; |
+ // TODO(flackr): This posts idle tasks as regular tasks. We need to create |
+ // an idle task runner with the semantics we want for the compositor thread |
+ // which runs them after the current frame has been drawn before the next |
+ // vsync. https://crbug.com/609532 |
+ return make_scoped_refptr(new SingleThreadIdleTaskRunner( |
+ thread_->task_runner(), thread_->task_runner(), this, |
+ "compositor.scheduler")); |
} |
bool CompositorWorkerScheduler::CanExceedIdleDeadlineIfRequired() const { |
@@ -148,4 +152,15 @@ void CompositorWorkerScheduler::RemoveTaskObserver( |
void CompositorWorkerScheduler::Shutdown() {} |
+void CompositorWorkerScheduler::OnIdleTaskPosted() {} |
+ |
+base::TimeTicks CompositorWorkerScheduler::WillProcessIdleTask() { |
+ // TODO(flackr): Return the next frame time as the deadline instead. |
+ // TODO(flackr): Ensure that oilpan GC does happen on the compositor thread |
+ // even though we will have no long idle periods. https://crbug.com/609531 |
+ return base::TimeTicks::Now() + base::TimeDelta::FromMillisecondsD(16.7); |
+} |
+ |
+void CompositorWorkerScheduler::DidProcessIdleTask() {} |
+ |
} // namespace scheduler |