Home | History | Annotate | Download | only in dm
      1 DM is like GM, but multithreaded.  It doesn't do everything GM does.
      2 
      3 DM's design is based around Tasks and a TaskRunner.
      4 
      5 A Task represents an independent unit of work that might fail.  We make a task
      6 for each GM/configuration pair we want to run.  Tasks can kick off new tasks
      7 themselves.  For example, a CpuTask can kick off a ReplayTask to make sure
      8 recording and playing back an SkPicture gives the same result as direct
      9 rendering.
     10 
     11 The TaskRunner runs all tasks on one of two threadpools, whose sizes are
     12 configurable by --cpuThreads and --gpuThreads.  Ideally we'd run these on a
     13 single threadpool but it can swamp the GPU if we shove too much work into it at
     14 once.  --cpuThreads defaults to the number of cores on the machine.
     15 --gpuThreads defaults to 1, but you may find 2 or 4 runs a little faster.
     16 
     17 So the main flow of DM is:
     18 
     19     for each GM:
     20         for each configuration:
     21             kick off a new task
     22     < tasks run, maybe fail, and maybe kick off new tasks >
     23     wait for all tasks to finish
     24     report failures
     25 
     26