Skia Task Scheduler
This directory contains code for a custom Swarming task scheduler used by Skia's
bots.
Motivation
Skia's automated testing involves sets of tasks which depend on one another,
for example compiling code and then running tests on a particular platform.
These tasks are performed on Skia's bots via Swarming. We need a way to
intelligently schedule these Swarming tasks to optimally utilize the machines
in our test lab. In particular, we want to keep up with incoming commits to the
Skia repo by testing multiple commits as part of a single task, and then during
idle time run tests at commits which were previously batched to increase the
granularity of our test data. Additionally, the scheduler must keep track of the
directed acyclic graph of tasks for each commit.
Design
At a high level, the scheduler first generates a set of all tasks which could
possibly be scheduled, filters out tasks which cannot run (eg. due to
unsatisfied dependencies) or should not run (eg. we've already run it), then
assigns a score for each candidate task based on the value added by running that
task (eg. how many new commits it tests, or how large a batch it bisects). It
then sorts the tasks by score to form a queue. When a swarming bot is free, the
scheduler triggers the highest-scoring task candidate which matches the
Swarming dimensions of the bot. Detailed design can be found here:
https://docs.google.com/document/d/12DzzmeDBDomNxTWWtHCRIfj6MoB8Yvw4v5horGuJPek/edit
and here:
https://docs.google.com/document/d/1tKlBi0reIKo6ActxN8TQY-4t80uQCJXv_CW9WVWG5w8/edit