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