content: Add RendererScheduler.
commit321f924d52091bd19cbdf7397fb0764a574741ee
authorrmcilroy <rmcilroy@chromium.org>
Thu, 6 Nov 2014 00:56:00 +0000 (5 16:56 -0800)
committerCommit bot <commit-bot@chromium.org>
Thu, 6 Nov 2014 00:56:37 +0000 (6 00:56 +0000)
tree743528f91cffed7a4f2d66e1ba53624958fe8e48
parente0a32c5a4a62f48289471d3f9a6deb9332b773ac
content: Add RendererScheduler.

This CL introduces a RendererScheduler which makes use of a
TaskQueueManager to schedule rendering tasks based upon
incoming events.

A RendererSchedulerSelector chooses the next queue to
service in the available TasksQueues by priority. The
RendererSchedulerSelector first looks at all queues with
the highest priority level, choosing the queue with the
oldest pending task. If these queues are empty, it then
performs the same process one level of priority lower.
Queues can be enabled / disabled and changed priority.

The RendererScheduler has three user accessible queues -
a default task queue, a compositor task queue and an
idle task queue.  By default the default and compositor
task queues have normal priority, with the idle task queue
being disabled. The scheduler will enter scheduler priority
policy for a short time (100ms) after an input event,
during which the compositor tasks will have high priority.
Between frame times the scheduler will enable idle periods,
during which it enables scheduling of tasks in the idle
queue at a best effort priority (i.e., lower priority than
any other task).

The RendererScheduler also creates a non-user accessible
task queue called the control queue which is used to enable
posting of scheduling control operations on the main
thread. This queue has the highest priority, with tasks
always run before any user task. This queue is used to
enable thread-safe transitioning to the compositor priority
policy.

Design doc: https://docs.google.com/a/chromium.org/document/d/16f_RIhZa47uEK_OdtTgzWdRU0RFMTQWMpEWyWXIpXUo/edit

BUG=391005

Review URL: https://codereview.chromium.org/664963002

Cr-Commit-Position: refs/heads/master@{#302929}
19 files changed:
content/content_renderer.gypi
content/content_tests.gypi
content/public/test/render_view_test.cc
content/public/test/render_view_test.h
content/renderer/render_thread_impl.cc
content/renderer/render_thread_impl.h
content/renderer/renderer_blink_platform_impl.cc
content/renderer/renderer_blink_platform_impl.h
content/renderer/scheduler/null_renderer_scheduler.cc [new file with mode: 0644]
content/renderer/scheduler/null_renderer_scheduler.h [new file with mode: 0644]
content/renderer/scheduler/renderer_scheduler.cc [new file with mode: 0644]
content/renderer/scheduler/renderer_scheduler.h [new file with mode: 0644]
content/renderer/scheduler/renderer_scheduler_impl.cc [new file with mode: 0644]
content/renderer/scheduler/renderer_scheduler_impl.h [new file with mode: 0644]
content/renderer/scheduler/renderer_scheduler_impl_unittest.cc [new file with mode: 0644]
content/renderer/scheduler/single_thread_idle_task_runner.cc [new file with mode: 0644]
content/renderer/scheduler/single_thread_idle_task_runner.h [new file with mode: 0644]
content/renderer/scheduler/web_scheduler_impl.cc [new file with mode: 0644]
content/renderer/scheduler/web_scheduler_impl.h [new file with mode: 0644]