Created
September 20, 2019 16:33
-
-
Save bluss/f57a987580d861d1c84ca162cae0b0ad to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<title>Cargo Build Timings — ndarray 0.12.1</title> | |
<meta charset="utf-8"> | |
<style type="text/css"> | |
html { | |
font-family: sans-serif; | |
} | |
.canvas-container { | |
position: relative; | |
margin-top: 5px; | |
margin-bottom: 5px; | |
} | |
h1 { | |
border-bottom: 1px solid #c0c0c0; | |
} | |
.graph { | |
display: block; | |
} | |
.my-table { | |
margin-top: 20px; | |
margin-bottom: 20px; | |
border-collapse: collapse; | |
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); | |
} | |
.my-table th { | |
color: #d5dde5; | |
background: #1b1e24; | |
border-bottom: 4px solid #9ea7af; | |
border-right: 1px solid #343a45; | |
font-size: 18px; | |
font-weight: 100; | |
padding: 12px; | |
text-align: left; | |
vertical-align: middle; | |
} | |
.my-table th:first-child { | |
border-top-left-radius: 3px; | |
} | |
.my-table th:last-child { | |
border-top-right-radius: 3px; | |
border-right:none; | |
} | |
.my-table tr { | |
border-top: 1px solid #c1c3d1; | |
border-bottom: 1px solid #c1c3d1; | |
font-size: 16px; | |
font-weight: normal; | |
} | |
.my-table tr:first-child { | |
border-top:none; | |
} | |
.my-table tr:last-child { | |
border-bottom:none; | |
} | |
.my-table tr:nth-child(odd) td { | |
background: #ebebeb; | |
} | |
.my-table tr:last-child td:first-child { | |
border-bottom-left-radius:3px; | |
} | |
.my-table tr:last-child td:last-child { | |
border-bottom-right-radius:3px; | |
} | |
.my-table td { | |
background: #ffffff; | |
padding: 10px; | |
text-align: left; | |
vertical-align: middle; | |
font-weight: 300; | |
font-size: 14px; | |
border-right: 1px solid #C1C3D1; | |
} | |
.my-table td:last-child { | |
border-right: 0px; | |
} | |
.summary-table td:first-child { | |
vertical-align: top; | |
text-align: right; | |
} | |
.input-table td { | |
text-align: center; | |
} | |
</style> | |
</head> | |
<body> | |
<h1>Cargo Build Timings</h1> | |
<table class="my-table summary-table"> | |
<tr> | |
<td>Targets:</td><td>ndarray 0.12.1 (bench "par_rayon")</td> | |
</tr> | |
<tr> | |
<td>Profile:</td><td>release</td> | |
</tr> | |
<tr> | |
<td>Fresh units:</td><td>0</td> | |
</tr> | |
<tr> | |
<td>Dirty units:</td><td>63</td> | |
</tr> | |
<tr> | |
<td>Total units:</td><td>63</td> | |
</tr> | |
<tr> | |
<td>Max concurrency:</td><td>4</td> | |
</tr> | |
<tr> | |
<td>Build start:</td><td>2019-09-20T16:28:02Z</td> | |
</tr> | |
<tr> | |
<td>Total time:</td><td>77s (1m 17s)</td> | |
</tr> | |
<tr> | |
<td>rustc:</td><td>rustc 1.39.0-nightly (9b9d2aff8 2019-09-19)<br>Host: x86_64-unknown-linux-gnu<br>Target: Host</td> | |
</tr> | |
</table> | |
<table class="input-table"> | |
<tr> | |
<td><label for="min-unit-time">Min unit time:</label></td> | |
<td><label for="scale">Scale:</label></td> | |
</tr> | |
<tr> | |
<td><input type="range" min="0" max="30" step="0.1" value="0" id="min-unit-time"></td> | |
<td><input type="range" min="1" max="50" value="20" id="scale"></td> | |
</tr> | |
<tr> | |
<td><output for="min-unit-time" id="min-unit-time-output"></output></td> | |
<td><output for="scale" id="scale-output"></output></td> | |
</tr> | |
</table> | |
<div id="pipeline-container" class="canvas-container"> | |
<canvas id="pipeline-graph" class="graph" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas> | |
<canvas id="pipeline-graph-lines" style="position: absolute; left: 0; top: 0; z-index: 1; pointer-events:none;"></canvas> | |
</div> | |
<div class="canvas-container"> | |
<canvas id="timing-graph" class="graph"></canvas> | |
</div> | |
<table class="my-table"> | |
<thead> | |
<tr> | |
<th></th> | |
<th>Unit</th> | |
<th>Total</th> | |
<th>Codegen</th> | |
<th>Features</th> | |
</tr> | |
</thead> | |
<tbody> | |
<tr> | |
<td>1.</td> | |
<td>ndarray v0.12.1</td> | |
<td>25.4s</td> | |
<td>1.1s (4%)</td> | |
<td>rayon</td> | |
</tr> | |
<tr> | |
<td>2.</td> | |
<td>rayon v1.2.0</td> | |
<td>13.7s</td> | |
<td>1.4s (11%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>3.</td> | |
<td>rand v0.6.5</td> | |
<td>11.8s</td> | |
<td>5.5s (47%)</td> | |
<td>alloc, default, rand_os, std</td> | |
</tr> | |
<tr> | |
<td>4.</td> | |
<td>matrixmultiply v0.2.3</td> | |
<td>11.3s</td> | |
<td>8.9s (79%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>5.</td> | |
<td>quickcheck v0.8.5</td> | |
<td>9.9s</td> | |
<td>6.0s (61%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>6.</td> | |
<td>rayon-core v1.6.0</td> | |
<td>8.8s</td> | |
<td>6.8s (78%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>7.</td> | |
<td>semver-parser v0.7.0</td> | |
<td>7.2s</td> | |
<td>6.4s (90%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>8.</td> | |
<td>ndarray v0.12.1 bench "par_rayon" (test)</td> | |
<td>6.9s</td> | |
<td>0.0s (0%)</td> | |
<td>rayon</td> | |
</tr> | |
<tr> | |
<td>9.</td> | |
<td>crossbeam-utils v0.6.6</td> | |
<td>6.9s</td> | |
<td>5.5s (80%)</td> | |
<td>default, lazy_static, std</td> | |
</tr> | |
<tr> | |
<td>10.</td> | |
<td>num-traits v0.2.8</td> | |
<td>6.6s</td> | |
<td>1.6s (24%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>11.</td> | |
<td>semver v0.9.0</td> | |
<td>6.2s</td> | |
<td>4.8s (77%)</td> | |
<td>default</td> | |
</tr> | |
<tr> | |
<td>12.</td> | |
<td>itertools v0.8.0</td> | |
<td>6.0s</td> | |
<td>0.1s (2%)</td> | |
<td>use_std</td> | |
</tr> | |
<tr> | |
<td>13.</td> | |
<td>autocfg v0.1.6</td> | |
<td>5.8s</td> | |
<td>5.1s (88%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>14.</td> | |
<td>num_cpus v1.10.1</td> | |
<td>5.5s</td> | |
<td>5.1s (94%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>15.</td> | |
<td>num-complex v0.2.3</td> | |
<td>5.1s</td> | |
<td>1.3s (25%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>16.</td> | |
<td>crossbeam-epoch v0.7.2</td> | |
<td>4.8s</td> | |
<td>3.5s (72%)</td> | |
<td>default, lazy_static, std</td> | |
</tr> | |
<tr> | |
<td>17.</td> | |
<td>rustc_version v0.2.3</td> | |
<td>4.8s</td> | |
<td>4.0s (85%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>18.</td> | |
<td>libc v0.2.62</td> | |
<td>4.0s</td> | |
<td>0.7s (18%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>19.</td> | |
<td>num-integer v0.1.41</td> | |
<td>3.5s</td> | |
<td>2.0s (56%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>20.</td> | |
<td>arrayvec v0.4.11 custom-build</td> | |
<td>3.1s</td> | |
<td>0.0s (0%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>21.</td> | |
<td>rand_hc v0.1.0</td> | |
<td>3.0s</td> | |
<td>2.3s (78%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>22.</td> | |
<td>rand_isaac v0.1.1</td> | |
<td>2.9s</td> | |
<td>2.2s (74%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>23.</td> | |
<td>libc v0.2.62 custom-build</td> | |
<td>2.7s</td> | |
<td>0.0s (0%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>24.</td> | |
<td>rand_os v0.1.3</td> | |
<td>2.6s</td> | |
<td>2.1s (80%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>25.</td> | |
<td>arrayvec v0.4.11</td> | |
<td>2.0s</td> | |
<td>0.0s (2%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>26.</td> | |
<td>rand_core v0.4.2</td> | |
<td>1.8s</td> | |
<td>0.9s (50%)</td> | |
<td>alloc, std</td> | |
</tr> | |
<tr> | |
<td>27.</td> | |
<td>memoffset v0.5.1 custom-build</td> | |
<td>1.6s</td> | |
<td>0.0s (0%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>28.</td> | |
<td>rand_chacha v0.1.1</td> | |
<td>1.5s</td> | |
<td>0.9s (59%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>29.</td> | |
<td>rand_jitter v0.1.4</td> | |
<td>1.4s</td> | |
<td>0.9s (62%)</td> | |
<td>std</td> | |
</tr> | |
<tr> | |
<td>30.</td> | |
<td>num-complex v0.2.3 custom-build</td> | |
<td>1.3s</td> | |
<td>0.0s (0%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>31.</td> | |
<td>num-traits v0.2.8 custom-build</td> | |
<td>1.2s</td> | |
<td>0.0s (0%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>32.</td> | |
<td>crossbeam-deque v0.7.1</td> | |
<td>1.1s</td> | |
<td>0.1s (6%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>33.</td> | |
<td>rand v0.6.5 custom-build</td> | |
<td>1.1s</td> | |
<td>0.0s (0%)</td> | |
<td>alloc, default, rand_os, std</td> | |
</tr> | |
<tr> | |
<td>34.</td> | |
<td>num-integer v0.1.41 custom-build</td> | |
<td>1.0s</td> | |
<td>0.0s (0%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>35.</td> | |
<td>rand_xorshift v0.1.1</td> | |
<td>0.9s</td> | |
<td>0.5s (53%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>36.</td> | |
<td>rand_pcg v0.1.2 custom-build</td> | |
<td>0.8s</td> | |
<td>0.0s (0%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>37.</td> | |
<td>crossbeam-queue v0.1.2</td> | |
<td>0.8s</td> | |
<td>0.1s (7%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>38.</td> | |
<td>rand_chacha v0.1.1 custom-build</td> | |
<td>0.8s</td> | |
<td>0.0s (0%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>39.</td> | |
<td>either v1.5.3</td> | |
<td>0.8s</td> | |
<td>0.0s (4%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>40.</td> | |
<td>rand_pcg v0.1.2</td> | |
<td>0.7s</td> | |
<td>0.3s (43%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>41.</td> | |
<td>approx v0.3.2</td> | |
<td>0.7s</td> | |
<td>0.0s (4%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>42.</td> | |
<td>ndarray v0.12.1 custom-build</td> | |
<td>0.6s</td> | |
<td>0.0s (0%)</td> | |
<td>rayon</td> | |
</tr> | |
<tr> | |
<td>43.</td> | |
<td>rayon-core v1.6.0 custom-build</td> | |
<td>0.5s</td> | |
<td>0.0s (0%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>44.</td> | |
<td>num-traits v0.2.8 custom-build (run)</td> | |
<td>0.4s</td> | |
<td>0.0s (0%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>45.</td> | |
<td>num-complex v0.2.3 custom-build (run)</td> | |
<td>0.3s</td> | |
<td>0.0s (0%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>46.</td> | |
<td>lazy_static v1.4.0</td> | |
<td>0.3s</td> | |
<td>0.0s (10%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>47.</td> | |
<td>num-integer v0.1.41 custom-build (run)</td> | |
<td>0.3s</td> | |
<td>0.0s (0%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>48.</td> | |
<td>scopeguard v1.0.0</td> | |
<td>0.3s</td> | |
<td>0.0s (13%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>49.</td> | |
<td>arrayvec v0.4.11 custom-build (run)</td> | |
<td>0.2s</td> | |
<td>0.0s (0%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>50.</td> | |
<td>rawpointer v0.2.1</td> | |
<td>0.2s</td> | |
<td>0.0s (14%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>51.</td> | |
<td>rand_pcg v0.1.2 custom-build (run)</td> | |
<td>0.2s</td> | |
<td>0.0s (0%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>52.</td> | |
<td>rand_chacha v0.1.1 custom-build (run)</td> | |
<td>0.2s</td> | |
<td>0.0s (0%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>53.</td> | |
<td>rand v0.6.5 custom-build (run)</td> | |
<td>0.2s</td> | |
<td>0.0s (0%)</td> | |
<td>alloc, default, rand_os, std</td> | |
</tr> | |
<tr> | |
<td>54.</td> | |
<td>rand_core v0.3.1</td> | |
<td>0.2s</td> | |
<td>0.0s (21%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>55.</td> | |
<td>nodrop v0.1.13</td> | |
<td>0.1s</td> | |
<td>0.0s (18%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>56.</td> | |
<td>memoffset v0.5.1 custom-build (run)</td> | |
<td>0.1s</td> | |
<td>0.0s (0%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>57.</td> | |
<td>defmac v0.2.1</td> | |
<td>0.1s</td> | |
<td>0.0s (22%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>58.</td> | |
<td>memoffset v0.5.1</td> | |
<td>0.1s</td> | |
<td>0.0s (20%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>59.</td> | |
<td>cfg-if v0.1.9</td> | |
<td>0.1s</td> | |
<td>0.0s (22%)</td> | |
<td></td> | |
</tr> | |
<tr> | |
<td>60.</td> | |
<td>libc v0.2.62 custom-build (run)</td> | |
<td>0.0s</td> | |
<td>0.0s (0%)</td> | |
<td>default, std</td> | |
</tr> | |
<tr> | |
<td>61.</td> | |
<td>ndarray v0.12.1 custom-build (run)</td> | |
<td>0.0s</td> | |
<td>0.0s (1%)</td> | |
<td>rayon</td> | |
</tr> | |
<tr> | |
<td>62.</td> | |
<td>ndarray v0.12.1 custom-build (run)</td> | |
<td>0.0s</td> | |
<td>0.0s (1%)</td> | |
<td>rayon</td> | |
</tr> | |
<tr> | |
<td>63.</td> | |
<td>rayon-core v1.6.0 custom-build (run)</td> | |
<td>0.0s</td> | |
<td>0.0s (1%)</td> | |
<td></td> | |
</tr> | |
</tbody> | |
</table> | |
<script> | |
DURATION = 77; | |
const UNIT_DATA = [ | |
{ | |
"i": 0, | |
"name": "semver-parser", | |
"version": "0.7.0", | |
"mode": "todo", | |
"target": "", | |
"start": 0.36, | |
"duration": 7.19, | |
"rmeta_time": 0.74, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
15 | |
] | |
}, | |
{ | |
"i": 1, | |
"name": "arrayvec", | |
"version": "0.4.11", | |
"mode": "todo", | |
"target": " custom-build", | |
"start": 0.36, | |
"duration": 3.07, | |
"rmeta_time": 3.07, | |
"unlocked_units": [ | |
17 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 2, | |
"name": "libc", | |
"version": "0.2.62", | |
"mode": "todo", | |
"target": " custom-build", | |
"start": 0.36, | |
"duration": 2.71, | |
"rmeta_time": 2.71, | |
"unlocked_units": [ | |
16 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 3, | |
"name": "cfg-if", | |
"version": "0.1.9", | |
"mode": "todo", | |
"target": "", | |
"start": 0.36, | |
"duration": 0.11, | |
"rmeta_time": 0.08, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 4, | |
"name": "nodrop", | |
"version": "0.1.13", | |
"mode": "todo", | |
"target": "", | |
"start": 0.47, | |
"duration": 0.15, | |
"rmeta_time": 0.12, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 5, | |
"name": "lazy_static", | |
"version": "1.4.0", | |
"mode": "todo", | |
"target": "", | |
"start": 0.61, | |
"duration": 0.28, | |
"rmeta_time": 0.25, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
14 | |
] | |
}, | |
{ | |
"i": 6, | |
"name": "autocfg", | |
"version": "0.1.6", | |
"mode": "todo", | |
"target": "", | |
"start": 0.9, | |
"duration": 5.82, | |
"rmeta_time": 0.73, | |
"unlocked_units": [ | |
30, | |
29, | |
26, | |
27, | |
28, | |
25 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 7, | |
"name": "scopeguard", | |
"version": "1.0.0", | |
"mode": "todo", | |
"target": "", | |
"start": 3.07, | |
"duration": 0.26, | |
"rmeta_time": 0.23, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 8, | |
"name": "rayon-core", | |
"version": "1.6.0", | |
"mode": "todo", | |
"target": " custom-build", | |
"start": 3.33, | |
"duration": 0.53, | |
"rmeta_time": 0.53, | |
"unlocked_units": [ | |
18 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 9, | |
"name": "rand_core", | |
"version": "0.4.2", | |
"mode": "todo", | |
"target": "", | |
"start": 3.43, | |
"duration": 1.78, | |
"rmeta_time": 0.9, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
20, | |
19 | |
] | |
}, | |
{ | |
"i": 10, | |
"name": "ndarray", | |
"version": "0.12.1", | |
"mode": "todo", | |
"target": " custom-build", | |
"start": 3.86, | |
"duration": 0.58, | |
"rmeta_time": 0.58, | |
"unlocked_units": [ | |
21, | |
22 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 11, | |
"name": "rawpointer", | |
"version": "0.2.1", | |
"mode": "todo", | |
"target": "", | |
"start": 4.44, | |
"duration": 0.2, | |
"rmeta_time": 0.17, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
23 | |
] | |
}, | |
{ | |
"i": 12, | |
"name": "either", | |
"version": "1.5.3", | |
"mode": "todo", | |
"target": "", | |
"start": 4.65, | |
"duration": 0.76, | |
"rmeta_time": 0.73, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
24 | |
] | |
}, | |
{ | |
"i": 13, | |
"name": "defmac", | |
"version": "0.2.1", | |
"mode": "todo", | |
"target": "", | |
"start": 5.21, | |
"duration": 0.13, | |
"rmeta_time": 0.1, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 14, | |
"name": "crossbeam-utils", | |
"version": "0.6.6", | |
"mode": "todo", | |
"target": "", | |
"start": 5.34, | |
"duration": 6.86, | |
"rmeta_time": 1.4, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
31 | |
] | |
}, | |
{ | |
"i": 15, | |
"name": "semver", | |
"version": "0.9.0", | |
"mode": "todo", | |
"target": "", | |
"start": 5.41, | |
"duration": 6.16, | |
"rmeta_time": 1.41, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
33 | |
] | |
}, | |
{ | |
"i": 16, | |
"name": "libc", | |
"version": "0.2.62", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 6.72, | |
"duration": 0.03, | |
"rmeta_time": 0.03, | |
"unlocked_units": [ | |
32 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 17, | |
"name": "arrayvec", | |
"version": "0.4.11", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 6.75, | |
"duration": 0.21, | |
"rmeta_time": 0.21, | |
"unlocked_units": [ | |
34 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 18, | |
"name": "rayon-core", | |
"version": "1.6.0", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 6.96, | |
"duration": 0.0, | |
"rmeta_time": 0.0, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 19, | |
"name": "rand_core", | |
"version": "0.3.1", | |
"mode": "todo", | |
"target": "", | |
"start": 6.96, | |
"duration": 0.15, | |
"rmeta_time": 0.12, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
35, | |
37, | |
36 | |
] | |
}, | |
{ | |
"i": 20, | |
"name": "rand_jitter", | |
"version": "0.1.4", | |
"mode": "todo", | |
"target": "", | |
"start": 7.12, | |
"duration": 1.45, | |
"rmeta_time": 0.54, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 21, | |
"name": "ndarray", | |
"version": "0.12.1", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 7.55, | |
"duration": 0.0, | |
"rmeta_time": 0.0, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 22, | |
"name": "ndarray", | |
"version": "0.12.1", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 7.55, | |
"duration": 0.01, | |
"rmeta_time": 0.01, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 23, | |
"name": "matrixmultiply", | |
"version": "0.2.3", | |
"mode": "todo", | |
"target": "", | |
"start": 7.56, | |
"duration": 11.34, | |
"rmeta_time": 2.41, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 24, | |
"name": "itertools", | |
"version": "0.8.0", | |
"mode": "todo", | |
"target": "", | |
"start": 8.57, | |
"duration": 5.99, | |
"rmeta_time": 5.86, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 25, | |
"name": "rand_pcg", | |
"version": "0.1.2", | |
"mode": "todo", | |
"target": " custom-build", | |
"start": 11.58, | |
"duration": 0.84, | |
"rmeta_time": 0.84, | |
"unlocked_units": [ | |
38 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 26, | |
"name": "num-traits", | |
"version": "0.2.8", | |
"mode": "todo", | |
"target": " custom-build", | |
"start": 12.2, | |
"duration": 1.19, | |
"rmeta_time": 1.19, | |
"unlocked_units": [ | |
40 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 27, | |
"name": "rand_chacha", | |
"version": "0.1.1", | |
"mode": "todo", | |
"target": " custom-build", | |
"start": 12.42, | |
"duration": 0.78, | |
"rmeta_time": 0.78, | |
"unlocked_units": [ | |
39 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 28, | |
"name": "rand", | |
"version": "0.6.5", | |
"mode": "todo", | |
"target": " custom-build", | |
"start": 13.2, | |
"duration": 1.06, | |
"rmeta_time": 1.06, | |
"unlocked_units": [ | |
41 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 29, | |
"name": "num-complex", | |
"version": "0.2.3", | |
"mode": "todo", | |
"target": " custom-build", | |
"start": 13.39, | |
"duration": 1.32, | |
"rmeta_time": 1.32, | |
"unlocked_units": [ | |
42 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 30, | |
"name": "num-integer", | |
"version": "0.1.41", | |
"mode": "todo", | |
"target": " custom-build", | |
"start": 14.26, | |
"duration": 1.01, | |
"rmeta_time": 1.01, | |
"unlocked_units": [ | |
43 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 31, | |
"name": "crossbeam-queue", | |
"version": "0.1.2", | |
"mode": "todo", | |
"target": "", | |
"start": 14.56, | |
"duration": 0.83, | |
"rmeta_time": 0.77, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 32, | |
"name": "libc", | |
"version": "0.2.62", | |
"mode": "todo", | |
"target": "", | |
"start": 14.71, | |
"duration": 3.98, | |
"rmeta_time": 3.28, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
45, | |
44 | |
] | |
}, | |
{ | |
"i": 33, | |
"name": "rustc_version", | |
"version": "0.2.3", | |
"mode": "todo", | |
"target": "", | |
"start": 15.27, | |
"duration": 4.77, | |
"rmeta_time": 0.74, | |
"unlocked_units": [ | |
49 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 34, | |
"name": "arrayvec", | |
"version": "0.4.11", | |
"mode": "todo", | |
"target": "", | |
"start": 15.39, | |
"duration": 2.02, | |
"rmeta_time": 1.98, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 35, | |
"name": "rand_xorshift", | |
"version": "0.1.1", | |
"mode": "todo", | |
"target": "", | |
"start": 17.4, | |
"duration": 0.86, | |
"rmeta_time": 0.4, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 36, | |
"name": "rand_isaac", | |
"version": "0.1.1", | |
"mode": "todo", | |
"target": "", | |
"start": 18.27, | |
"duration": 2.91, | |
"rmeta_time": 0.76, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 37, | |
"name": "rand_hc", | |
"version": "0.1.0", | |
"mode": "todo", | |
"target": "", | |
"start": 18.69, | |
"duration": 3.0, | |
"rmeta_time": 0.67, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 38, | |
"name": "rand_pcg", | |
"version": "0.1.2", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 18.9, | |
"duration": 0.19, | |
"rmeta_time": 0.19, | |
"unlocked_units": [ | |
46 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 39, | |
"name": "rand_chacha", | |
"version": "0.1.1", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 19.09, | |
"duration": 0.18, | |
"rmeta_time": 0.18, | |
"unlocked_units": [ | |
47 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 40, | |
"name": "num-traits", | |
"version": "0.2.8", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 19.28, | |
"duration": 0.39, | |
"rmeta_time": 0.39, | |
"unlocked_units": [ | |
48 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 41, | |
"name": "rand", | |
"version": "0.6.5", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 19.66, | |
"duration": 0.16, | |
"rmeta_time": 0.16, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 42, | |
"name": "num-complex", | |
"version": "0.2.3", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 19.83, | |
"duration": 0.29, | |
"rmeta_time": 0.29, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 43, | |
"name": "num-integer", | |
"version": "0.1.41", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 20.05, | |
"duration": 0.26, | |
"rmeta_time": 0.26, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 44, | |
"name": "num_cpus", | |
"version": "1.10.1", | |
"mode": "todo", | |
"target": "", | |
"start": 20.12, | |
"duration": 5.48, | |
"rmeta_time": 0.35, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 45, | |
"name": "rand_os", | |
"version": "0.1.3", | |
"mode": "todo", | |
"target": "", | |
"start": 20.31, | |
"duration": 2.57, | |
"rmeta_time": 0.5, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 46, | |
"name": "rand_pcg", | |
"version": "0.1.2", | |
"mode": "todo", | |
"target": "", | |
"start": 21.17, | |
"duration": 0.74, | |
"rmeta_time": 0.42, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 47, | |
"name": "rand_chacha", | |
"version": "0.1.1", | |
"mode": "todo", | |
"target": "", | |
"start": 21.69, | |
"duration": 1.5, | |
"rmeta_time": 0.61, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
50 | |
] | |
}, | |
{ | |
"i": 48, | |
"name": "num-traits", | |
"version": "0.2.8", | |
"mode": "todo", | |
"target": "", | |
"start": 21.92, | |
"duration": 6.59, | |
"rmeta_time": 4.98, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
56, | |
57, | |
55 | |
] | |
}, | |
{ | |
"i": 49, | |
"name": "memoffset", | |
"version": "0.5.1", | |
"mode": "todo", | |
"target": " custom-build", | |
"start": 22.88, | |
"duration": 1.61, | |
"rmeta_time": 1.61, | |
"unlocked_units": [ | |
51 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 50, | |
"name": "rand", | |
"version": "0.6.5", | |
"mode": "todo", | |
"target": "", | |
"start": 23.19, | |
"duration": 11.75, | |
"rmeta_time": 6.27, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
59 | |
] | |
}, | |
{ | |
"i": 51, | |
"name": "memoffset", | |
"version": "0.5.1", | |
"mode": "run-custom-build", | |
"target": " custom-build (run)", | |
"start": 24.49, | |
"duration": 0.14, | |
"rmeta_time": 0.14, | |
"unlocked_units": [ | |
52 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 52, | |
"name": "memoffset", | |
"version": "0.5.1", | |
"mode": "todo", | |
"target": "", | |
"start": 24.64, | |
"duration": 0.11, | |
"rmeta_time": 0.09, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
53 | |
] | |
}, | |
{ | |
"i": 53, | |
"name": "crossbeam-epoch", | |
"version": "0.7.2", | |
"mode": "todo", | |
"target": "", | |
"start": 24.75, | |
"duration": 4.83, | |
"rmeta_time": 1.34, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
54 | |
] | |
}, | |
{ | |
"i": 54, | |
"name": "crossbeam-deque", | |
"version": "0.7.1", | |
"mode": "todo", | |
"target": "", | |
"start": 26.09, | |
"duration": 1.13, | |
"rmeta_time": 1.07, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
58 | |
] | |
}, | |
{ | |
"i": 55, | |
"name": "num-complex", | |
"version": "0.2.3", | |
"mode": "todo", | |
"target": "", | |
"start": 27.22, | |
"duration": 5.11, | |
"rmeta_time": 3.86, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 56, | |
"name": "num-integer", | |
"version": "0.1.41", | |
"mode": "todo", | |
"target": "", | |
"start": 28.51, | |
"duration": 3.5, | |
"rmeta_time": 1.54, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 57, | |
"name": "approx", | |
"version": "0.3.2", | |
"mode": "todo", | |
"target": "", | |
"start": 29.58, | |
"duration": 0.71, | |
"rmeta_time": 0.68, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 58, | |
"name": "rayon-core", | |
"version": "1.6.0", | |
"mode": "todo", | |
"target": "", | |
"start": 30.29, | |
"duration": 8.82, | |
"rmeta_time": 1.97, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
60 | |
] | |
}, | |
{ | |
"i": 59, | |
"name": "quickcheck", | |
"version": "0.8.5", | |
"mode": "todo", | |
"target": "", | |
"start": 32.02, | |
"duration": 9.92, | |
"rmeta_time": 3.91, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 60, | |
"name": "rayon", | |
"version": "1.2.0", | |
"mode": "todo", | |
"target": "", | |
"start": 32.34, | |
"duration": 13.67, | |
"rmeta_time": 12.23, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [ | |
61 | |
] | |
}, | |
{ | |
"i": 61, | |
"name": "ndarray", | |
"version": "0.12.1", | |
"mode": "todo", | |
"target": "", | |
"start": 44.57, | |
"duration": 25.38, | |
"rmeta_time": 24.28, | |
"unlocked_units": [ | |
62 | |
], | |
"unlocked_rmeta_units": [] | |
}, | |
{ | |
"i": 62, | |
"name": "ndarray", | |
"version": "0.12.1", | |
"mode": "todo", | |
"target": " bench \"par_rayon\" (test)", | |
"start": 69.95, | |
"duration": 6.89, | |
"rmeta_time": 6.89, | |
"unlocked_units": [], | |
"unlocked_rmeta_units": [] | |
} | |
]; | |
const CONCURRENCY_DATA = [ | |
{ | |
"t": 0.357564186, | |
"active": 1, | |
"waiting": 13, | |
"inactive": 49 | |
}, | |
{ | |
"t": 0.358156752, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 49 | |
}, | |
{ | |
"t": 0.359465115, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 49 | |
}, | |
{ | |
"t": 0.360028265, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 49 | |
}, | |
{ | |
"t": 0.441712283, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 49 | |
}, | |
{ | |
"t": 0.465074049, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 49 | |
}, | |
{ | |
"t": 0.465377996, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 49 | |
}, | |
{ | |
"t": 0.586102964, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 49 | |
}, | |
{ | |
"t": 0.613793116, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 49 | |
}, | |
{ | |
"t": 0.614424087, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 49 | |
}, | |
{ | |
"t": 0.86743988, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 48 | |
}, | |
{ | |
"t": 0.894792136, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 48 | |
}, | |
{ | |
"t": 0.895048494, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 48 | |
}, | |
{ | |
"t": 1.099723167, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 47 | |
}, | |
{ | |
"t": 1.62169914, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 47 | |
}, | |
{ | |
"t": 3.070548156, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 47 | |
}, | |
{ | |
"t": 3.070943683, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 46 | |
}, | |
{ | |
"t": 3.071386603, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 46 | |
}, | |
{ | |
"t": 3.298237679, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 46 | |
}, | |
{ | |
"t": 3.3332160809999998, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 46 | |
}, | |
{ | |
"t": 3.333541356, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 46 | |
}, | |
{ | |
"t": 3.425362596, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 46 | |
}, | |
{ | |
"t": 3.42581206, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 45 | |
}, | |
{ | |
"t": 3.426041885, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 45 | |
}, | |
{ | |
"t": 3.860842404, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 45 | |
}, | |
{ | |
"t": 3.861313313, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 44 | |
}, | |
{ | |
"t": 3.861604648, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 44 | |
}, | |
{ | |
"t": 4.321712747, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 42 | |
}, | |
{ | |
"t": 4.443685457, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 42 | |
}, | |
{ | |
"t": 4.4441119669999996, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 40 | |
}, | |
{ | |
"t": 4.444377541, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 40 | |
}, | |
{ | |
"t": 4.618374702, | |
"active": 4, | |
"waiting": 12, | |
"inactive": 39 | |
}, | |
{ | |
"t": 4.646855667, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 39 | |
}, | |
{ | |
"t": 4.647285921, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 39 | |
}, | |
{ | |
"t": 5.205963798, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 39 | |
}, | |
{ | |
"t": 5.206681963, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 39 | |
}, | |
{ | |
"t": 5.310045644, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 39 | |
}, | |
{ | |
"t": 5.340200498, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 39 | |
}, | |
{ | |
"t": 5.340433704, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 39 | |
}, | |
{ | |
"t": 5.378679856, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 38 | |
}, | |
{ | |
"t": 5.4125761390000005, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 38 | |
}, | |
{ | |
"t": 5.412822625, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 38 | |
}, | |
{ | |
"t": 6.719278714, | |
"active": 4, | |
"waiting": 14, | |
"inactive": 32 | |
}, | |
{ | |
"t": 6.7196038609999995, | |
"active": 4, | |
"waiting": 14, | |
"inactive": 32 | |
}, | |
{ | |
"t": 6.73861463, | |
"active": 4, | |
"waiting": 15, | |
"inactive": 31 | |
}, | |
{ | |
"t": 6.744871322, | |
"active": 4, | |
"waiting": 15, | |
"inactive": 31 | |
}, | |
{ | |
"t": 6.745214252, | |
"active": 4, | |
"waiting": 15, | |
"inactive": 30 | |
}, | |
{ | |
"t": 6.745561261, | |
"active": 4, | |
"waiting": 15, | |
"inactive": 30 | |
}, | |
{ | |
"t": 6.826525859, | |
"active": 4, | |
"waiting": 16, | |
"inactive": 29 | |
}, | |
{ | |
"t": 6.958679958, | |
"active": 4, | |
"waiting": 16, | |
"inactive": 29 | |
}, | |
{ | |
"t": 6.959068436, | |
"active": 4, | |
"waiting": 16, | |
"inactive": 28 | |
}, | |
{ | |
"t": 6.959404067, | |
"active": 4, | |
"waiting": 16, | |
"inactive": 28 | |
}, | |
{ | |
"t": 6.9636563460000005, | |
"active": 4, | |
"waiting": 16, | |
"inactive": 28 | |
}, | |
{ | |
"t": 6.964067127, | |
"active": 4, | |
"waiting": 15, | |
"inactive": 28 | |
}, | |
{ | |
"t": 6.964729491, | |
"active": 4, | |
"waiting": 15, | |
"inactive": 28 | |
}, | |
{ | |
"t": 7.086527955, | |
"active": 4, | |
"waiting": 18, | |
"inactive": 25 | |
}, | |
{ | |
"t": 7.119745373, | |
"active": 4, | |
"waiting": 17, | |
"inactive": 25 | |
}, | |
{ | |
"t": 7.120139838, | |
"active": 4, | |
"waiting": 17, | |
"inactive": 25 | |
}, | |
{ | |
"t": 7.546795267, | |
"active": 4, | |
"waiting": 16, | |
"inactive": 25 | |
}, | |
{ | |
"t": 7.547049229, | |
"active": 4, | |
"waiting": 16, | |
"inactive": 25 | |
}, | |
{ | |
"t": 7.551605542, | |
"active": 4, | |
"waiting": 16, | |
"inactive": 25 | |
}, | |
{ | |
"t": 7.551898995, | |
"active": 4, | |
"waiting": 15, | |
"inactive": 25 | |
}, | |
{ | |
"t": 7.552317721, | |
"active": 4, | |
"waiting": 15, | |
"inactive": 25 | |
}, | |
{ | |
"t": 7.557411299, | |
"active": 4, | |
"waiting": 15, | |
"inactive": 25 | |
}, | |
{ | |
"t": 7.558093608, | |
"active": 4, | |
"waiting": 14, | |
"inactive": 25 | |
}, | |
{ | |
"t": 7.558182386, | |
"active": 4, | |
"waiting": 14, | |
"inactive": 25 | |
}, | |
{ | |
"t": 7.664771408, | |
"active": 4, | |
"waiting": 14, | |
"inactive": 25 | |
}, | |
{ | |
"t": 8.567497342, | |
"active": 4, | |
"waiting": 13, | |
"inactive": 25 | |
}, | |
{ | |
"t": 8.567732953, | |
"active": 4, | |
"waiting": 13, | |
"inactive": 25 | |
}, | |
{ | |
"t": 9.970249168, | |
"active": 4, | |
"waiting": 13, | |
"inactive": 25 | |
}, | |
{ | |
"t": 11.577823903, | |
"active": 4, | |
"waiting": 12, | |
"inactive": 25 | |
}, | |
{ | |
"t": 11.578280229, | |
"active": 4, | |
"waiting": 12, | |
"inactive": 25 | |
}, | |
{ | |
"t": 12.198719619, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 25 | |
}, | |
{ | |
"t": 12.199014666, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 25 | |
}, | |
{ | |
"t": 12.422879835, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 25 | |
}, | |
{ | |
"t": 12.423338667, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 24 | |
}, | |
{ | |
"t": 12.423741557, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 24 | |
}, | |
{ | |
"t": 13.200527867, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 24 | |
}, | |
{ | |
"t": 13.20088265, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 23 | |
}, | |
{ | |
"t": 13.20108778, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 23 | |
}, | |
{ | |
"t": 13.393229654, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 23 | |
}, | |
{ | |
"t": 13.393652909, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 22 | |
}, | |
{ | |
"t": 13.393933521, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 22 | |
}, | |
{ | |
"t": 14.257863028, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 22 | |
}, | |
{ | |
"t": 14.258241561, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 21 | |
}, | |
{ | |
"t": 14.258592529, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 21 | |
}, | |
{ | |
"t": 14.425359152, | |
"active": 4, | |
"waiting": 11, | |
"inactive": 21 | |
}, | |
{ | |
"t": 14.555339153, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 21 | |
}, | |
{ | |
"t": 14.555708401, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 21 | |
}, | |
{ | |
"t": 14.709437238, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 21 | |
}, | |
{ | |
"t": 14.709792228, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 20 | |
}, | |
{ | |
"t": 14.71037838, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 20 | |
}, | |
{ | |
"t": 15.272039407, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 20 | |
}, | |
{ | |
"t": 15.272499896, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 19 | |
}, | |
{ | |
"t": 15.272956292, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 19 | |
}, | |
{ | |
"t": 15.326659537, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 19 | |
}, | |
{ | |
"t": 15.388086582, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 19 | |
}, | |
{ | |
"t": 15.388432178, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 19 | |
}, | |
{ | |
"t": 16.009091749, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 19 | |
}, | |
{ | |
"t": 17.372174344, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 19 | |
}, | |
{ | |
"t": 17.403935258, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 19 | |
}, | |
{ | |
"t": 17.404158047, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 19 | |
}, | |
{ | |
"t": 17.806125661, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 19 | |
}, | |
{ | |
"t": 17.988911146, | |
"active": 4, | |
"waiting": 10, | |
"inactive": 17 | |
}, | |
{ | |
"t": 18.263787377, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 17 | |
}, | |
{ | |
"t": 18.265213549, | |
"active": 4, | |
"waiting": 9, | |
"inactive": 17 | |
}, | |
{ | |
"t": 18.688360099, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 17 | |
}, | |
{ | |
"t": 18.688664135, | |
"active": 4, | |
"waiting": 8, | |
"inactive": 17 | |
}, | |
{ | |
"t": 18.896088126, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 17 | |
}, | |
{ | |
"t": 18.896839822, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 17 | |
}, | |
{ | |
"t": 19.023091418, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 17 | |
}, | |
{ | |
"t": 19.089329856, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 17 | |
}, | |
{ | |
"t": 19.08961318, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 16 | |
}, | |
{ | |
"t": 19.089876626, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 16 | |
}, | |
{ | |
"t": 19.274844571, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 16 | |
}, | |
{ | |
"t": 19.275094684, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 15 | |
}, | |
{ | |
"t": 19.275747461, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 15 | |
}, | |
{ | |
"t": 19.358164559, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 15 | |
}, | |
{ | |
"t": 19.663392909, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 15 | |
}, | |
{ | |
"t": 19.663680519, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 14 | |
}, | |
{ | |
"t": 19.664003532, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 14 | |
}, | |
{ | |
"t": 19.828135172, | |
"active": 4, | |
"waiting": 7, | |
"inactive": 14 | |
}, | |
{ | |
"t": 19.828457175, | |
"active": 4, | |
"waiting": 6, | |
"inactive": 14 | |
}, | |
{ | |
"t": 19.828671846, | |
"active": 4, | |
"waiting": 6, | |
"inactive": 14 | |
}, | |
{ | |
"t": 20.047814652, | |
"active": 4, | |
"waiting": 6, | |
"inactive": 13 | |
}, | |
{ | |
"t": 20.04812681, | |
"active": 4, | |
"waiting": 6, | |
"inactive": 13 | |
}, | |
{ | |
"t": 20.119711672, | |
"active": 4, | |
"waiting": 6, | |
"inactive": 13 | |
}, | |
{ | |
"t": 20.120198085, | |
"active": 4, | |
"waiting": 5, | |
"inactive": 13 | |
}, | |
{ | |
"t": 20.12042062, | |
"active": 4, | |
"waiting": 5, | |
"inactive": 13 | |
}, | |
{ | |
"t": 20.312475223, | |
"active": 4, | |
"waiting": 5, | |
"inactive": 13 | |
}, | |
{ | |
"t": 20.312923607, | |
"active": 4, | |
"waiting": 4, | |
"inactive": 13 | |
}, | |
{ | |
"t": 20.313649724, | |
"active": 4, | |
"waiting": 4, | |
"inactive": 13 | |
}, | |
{ | |
"t": 20.466203527, | |
"active": 4, | |
"waiting": 4, | |
"inactive": 13 | |
}, | |
{ | |
"t": 20.816797208, | |
"active": 4, | |
"waiting": 4, | |
"inactive": 13 | |
}, | |
{ | |
"t": 21.174066413, | |
"active": 4, | |
"waiting": 3, | |
"inactive": 13 | |
}, | |
{ | |
"t": 21.174469664, | |
"active": 4, | |
"waiting": 3, | |
"inactive": 13 | |
}, | |
{ | |
"t": 21.598241266, | |
"active": 4, | |
"waiting": 3, | |
"inactive": 13 | |
}, | |
{ | |
"t": 21.691285155, | |
"active": 4, | |
"waiting": 2, | |
"inactive": 13 | |
}, | |
{ | |
"t": 21.691650592, | |
"active": 4, | |
"waiting": 2, | |
"inactive": 13 | |
}, | |
{ | |
"t": 21.915976713, | |
"active": 4, | |
"waiting": 1, | |
"inactive": 13 | |
}, | |
{ | |
"t": 21.91649631, | |
"active": 4, | |
"waiting": 1, | |
"inactive": 13 | |
}, | |
{ | |
"t": 22.304901855, | |
"active": 4, | |
"waiting": 2, | |
"inactive": 12 | |
}, | |
{ | |
"t": 22.88409821, | |
"active": 4, | |
"waiting": 1, | |
"inactive": 12 | |
}, | |
{ | |
"t": 22.884437739, | |
"active": 4, | |
"waiting": 1, | |
"inactive": 12 | |
}, | |
{ | |
"t": 23.18864798, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 12 | |
}, | |
{ | |
"t": 23.188993813, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 12 | |
}, | |
{ | |
"t": 24.493543229, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 12 | |
}, | |
{ | |
"t": 24.493863702, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 11 | |
}, | |
{ | |
"t": 24.494125391, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 11 | |
}, | |
{ | |
"t": 24.636197335, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 11 | |
}, | |
{ | |
"t": 24.636592408, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 10 | |
}, | |
{ | |
"t": 24.637026284, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 10 | |
}, | |
{ | |
"t": 24.727783151, | |
"active": 4, | |
"waiting": 1, | |
"inactive": 9 | |
}, | |
{ | |
"t": 24.750483328, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 24.75088389, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.603589124, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.603727588, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.603767494, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.603827067, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.603885356, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.603913729, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.60394228, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.603965608, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.603984968, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604006242, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604025812, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604044617, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604063363, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604101935, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604122414, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604161154, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604183767, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604204918, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604229753, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604251926, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604274095, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604294808, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604316209, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604336875, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604357895, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.60437968, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604401144, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604422586, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.6044439, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604465364, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604485953, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604507408, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.60452952, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604549949, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.60457135, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604591979, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604612378, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604632262, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604652654, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.60467334, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604693642, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604718504, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604793932, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604858272, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604882088, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604903436, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604925260999998, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604946351, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.60496809, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.604989113, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 25.605007852, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 9 | |
}, | |
{ | |
"t": 26.089301532, | |
"active": 3, | |
"waiting": 1, | |
"inactive": 8 | |
}, | |
{ | |
"t": 26.08963936, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 8 | |
}, | |
{ | |
"t": 26.089905119, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 8 | |
}, | |
{ | |
"t": 26.901247667, | |
"active": 4, | |
"waiting": 3, | |
"inactive": 5 | |
}, | |
{ | |
"t": 27.157990605, | |
"active": 4, | |
"waiting": 4, | |
"inactive": 4 | |
}, | |
{ | |
"t": 27.223369183, | |
"active": 4, | |
"waiting": 3, | |
"inactive": 4 | |
}, | |
{ | |
"t": 27.22364343, | |
"active": 4, | |
"waiting": 3, | |
"inactive": 4 | |
}, | |
{ | |
"t": 28.508940917, | |
"active": 4, | |
"waiting": 2, | |
"inactive": 4 | |
}, | |
{ | |
"t": 28.509244419, | |
"active": 4, | |
"waiting": 2, | |
"inactive": 4 | |
}, | |
{ | |
"t": 29.454382889, | |
"active": 4, | |
"waiting": 3, | |
"inactive": 3 | |
}, | |
{ | |
"t": 29.581908868, | |
"active": 4, | |
"waiting": 2, | |
"inactive": 3 | |
}, | |
{ | |
"t": 29.582155767, | |
"active": 4, | |
"waiting": 2, | |
"inactive": 3 | |
}, | |
{ | |
"t": 30.053931256, | |
"active": 4, | |
"waiting": 2, | |
"inactive": 3 | |
}, | |
{ | |
"t": 30.258516965, | |
"active": 4, | |
"waiting": 2, | |
"inactive": 3 | |
}, | |
{ | |
"t": 30.288157601, | |
"active": 4, | |
"waiting": 1, | |
"inactive": 3 | |
}, | |
{ | |
"t": 30.288633163, | |
"active": 4, | |
"waiting": 1, | |
"inactive": 3 | |
}, | |
{ | |
"t": 31.081051066, | |
"active": 4, | |
"waiting": 1, | |
"inactive": 3 | |
}, | |
{ | |
"t": 32.013757955, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 3 | |
}, | |
{ | |
"t": 32.016187793, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 3 | |
}, | |
{ | |
"t": 32.259567605, | |
"active": 4, | |
"waiting": 1, | |
"inactive": 2 | |
}, | |
{ | |
"t": 32.335589168, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 32.336294255, | |
"active": 4, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 34.940430761, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 35.929526106, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 36.585840173, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 36.585910527, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 36.586002545, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 36.586110388, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 36.586275158, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 36.586332843, | |
"active": 3, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 39.107880682, | |
"active": 2, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 41.940954514, | |
"active": 1, | |
"waiting": 0, | |
"inactive": 2 | |
}, | |
{ | |
"t": 44.571163083, | |
"active": 1, | |
"waiting": 1, | |
"inactive": 1 | |
}, | |
{ | |
"t": 44.571362875, | |
"active": 2, | |
"waiting": 0, | |
"inactive": 1 | |
}, | |
{ | |
"t": 44.571850226, | |
"active": 2, | |
"waiting": 0, | |
"inactive": 1 | |
}, | |
{ | |
"t": 46.007270616, | |
"active": 1, | |
"waiting": 0, | |
"inactive": 1 | |
}, | |
{ | |
"t": 68.850437899, | |
"active": 1, | |
"waiting": 0, | |
"inactive": 1 | |
}, | |
{ | |
"t": 69.947525877, | |
"active": 1, | |
"waiting": 0, | |
"inactive": 0 | |
}, | |
{ | |
"t": 69.947943693, | |
"active": 1, | |
"waiting": 0, | |
"inactive": 0 | |
}, | |
{ | |
"t": 76.84235846199999, | |
"active": 1, | |
"waiting": 0, | |
"inactive": 0 | |
}, | |
{ | |
"t": 76.842597153, | |
"active": 0, | |
"waiting": 0, | |
"inactive": 0 | |
} | |
]; | |
// Position of the vertical axis. | |
const X_LINE = 50; | |
// General-use margin size. | |
const MARGIN = 5; | |
// Position of the horizontal axis, relative to the bottom. | |
const Y_LINE = 35; | |
// Minimum distance between time tick labels. | |
const MIN_TICK_DIST = 50; | |
// Radius for rounded rectangle corners. | |
const RADIUS = 3; | |
// Height of unit boxes. | |
const BOX_HEIGHT = 25; | |
// Distance between Y tick marks on the unit graph. | |
const Y_TICK_DIST = BOX_HEIGHT + 2; | |
// Rects used for mouseover detection. | |
// Objects of {x, y, x2, y2, i} where `i` is the index into UNIT_DATA. | |
let HIT_BOXES = []; | |
// Index into UNIT_DATA of the last unit hovered over by mouse. | |
let LAST_HOVER = null; | |
// Key is unit index, value is {x, y, width, rmeta_x} of the box. | |
let UNIT_COORDS = {}; | |
// Map of unit index to the index it was unlocked by. | |
let REVERSE_UNIT_DEPS = {}; | |
let REVERSE_UNIT_RMETA_DEPS = {}; | |
for (let n=0; n<UNIT_DATA.length; n++) { | |
let unit = UNIT_DATA[n]; | |
for (let unlocked of unit.unlocked_units) { | |
REVERSE_UNIT_DEPS[unlocked] = n; | |
} | |
for (let unlocked of unit.unlocked_rmeta_units) { | |
REVERSE_UNIT_RMETA_DEPS[unlocked] = n; | |
} | |
} | |
function render_pipeline_graph() { | |
if (UNIT_DATA.length == 0) { | |
return; | |
} | |
let g = document.getElementById('pipeline-graph'); | |
HIT_BOXES.length = 0; | |
g.onmousemove = pipeline_mousemove; | |
const min_time = document.getElementById('min-unit-time').valueAsNumber; | |
const units = UNIT_DATA.filter(unit => unit.duration >= min_time); | |
const graph_height = Y_TICK_DIST * units.length; | |
const {ctx, width, height} = draw_graph_axes('pipeline-graph', graph_height); | |
const container = document.getElementById('pipeline-container'); | |
container.style.width = width; | |
container.style.height = height; | |
const PX_PER_SEC = document.getElementById('scale').valueAsNumber; | |
// Canvas for hover highlights. This is a separate layer to improve performance. | |
const linectx = setup_canvas('pipeline-graph-lines', width, height); | |
linectx.clearRect(0, 0, width, height); | |
// Draw Y tick marks. | |
for (let n=1; n<units.length; n++) { | |
const y = graph_height - (n * Y_TICK_DIST); | |
ctx.beginPath(); | |
ctx.moveTo(X_LINE, y); | |
ctx.lineTo(X_LINE-5, y); | |
ctx.stroke(); | |
} | |
// Draw Y labels. | |
ctx.textAlign = 'end'; | |
for (let n=0; n<units.length; n++) { | |
let y = MARGIN + (Y_TICK_DIST * (n + 1)) - 13; | |
ctx.fillText(n+1, X_LINE-4, y); | |
} | |
// Draw the graph. | |
ctx.save(); | |
ctx.translate(X_LINE, MARGIN); | |
// Compute x,y coordinate of each block. | |
UNIT_COORDS = {}; | |
for (i=0; i<units.length; i++) { | |
let unit = units[i]; | |
let y = i * Y_TICK_DIST + 1; | |
let x = PX_PER_SEC * unit.start; | |
let rmeta_x = null; | |
if (unit.rmeta_time != null) { | |
rmeta_x = x + PX_PER_SEC * unit.rmeta_time; | |
} | |
let width = Math.max(PX_PER_SEC * unit.duration, 1.0); | |
UNIT_COORDS[unit.i] = {x, y, width, rmeta_x}; | |
} | |
// Draw the blocks. | |
for (i=0; i<units.length; i++) { | |
let unit = units[i]; | |
let {x, y, width, rmeta_x} = UNIT_COORDS[unit.i]; | |
HIT_BOXES.push({x: X_LINE+x, y:MARGIN+y, x2: X_LINE+x+width, y2: MARGIN+y+BOX_HEIGHT, i: unit.i}); | |
ctx.beginPath(); | |
ctx.fillStyle = unit.mode == 'run-custom-build' ? '#f0b165' : '#95cce8'; | |
roundedRect(ctx, x, y, width, BOX_HEIGHT, RADIUS); | |
ctx.fill(); | |
if (unit.rmeta_time != null) { | |
ctx.beginPath(); | |
ctx.fillStyle = '#aa95e8'; | |
let ctime = unit.duration - unit.rmeta_time; | |
roundedRect(ctx, rmeta_x, y, PX_PER_SEC * ctime, BOX_HEIGHT, RADIUS); | |
ctx.fill(); | |
} | |
ctx.fillStyle = "#000"; | |
ctx.textAlign = 'start'; | |
ctx.textBaseline = 'hanging'; | |
ctx.font = '14px sans-serif'; | |
ctx.fillText(`${unit.name}${unit.target} ${unit.duration}s`, x + 5.0, y + BOX_HEIGHT / 2 - 6); | |
draw_dep_lines(ctx, unit.i, false); | |
} | |
ctx.restore(); | |
} | |
// Draws lines from the given unit to the units it unlocks. | |
function draw_dep_lines(ctx, unit_idx, highlighted) { | |
const unit = UNIT_DATA[unit_idx]; | |
const {x, y, rmeta_x} = UNIT_COORDS[unit_idx]; | |
ctx.save(); | |
for (const unlocked of unit.unlocked_units) { | |
draw_one_dep_line(ctx, x, y, unlocked, highlighted); | |
} | |
for (const unlocked of unit.unlocked_rmeta_units) { | |
draw_one_dep_line(ctx, rmeta_x, y, unlocked, highlighted); | |
} | |
ctx.restore(); | |
} | |
function draw_one_dep_line(ctx, from_x, from_y, to_unit, highlighted) { | |
if (to_unit in UNIT_COORDS) { | |
let {x: u_x, y: u_y} = UNIT_COORDS[to_unit]; | |
ctx.strokeStyle = highlighted ? '#000' : '#ddd'; | |
ctx.setLineDash([2]); | |
ctx.beginPath(); | |
ctx.moveTo(from_x, from_y+BOX_HEIGHT/2); | |
ctx.lineTo(from_x-5, from_y+BOX_HEIGHT/2); | |
ctx.lineTo(from_x-5, u_y+BOX_HEIGHT/2); | |
ctx.lineTo(u_x, u_y+BOX_HEIGHT/2); | |
ctx.stroke(); | |
} | |
} | |
function render_timing_graph() { | |
if (CONCURRENCY_DATA.length == 0) { | |
return; | |
} | |
const HEIGHT = 400; | |
const AXIS_HEIGHT = HEIGHT - MARGIN - Y_LINE; | |
const TOP_MARGIN = 10; | |
const GRAPH_HEIGHT = AXIS_HEIGHT - TOP_MARGIN; | |
const {graph_width, ctx} = draw_graph_axes('timing-graph', AXIS_HEIGHT); | |
// Draw Y tick marks and labels. | |
let max_v = 0; | |
for (c of CONCURRENCY_DATA) { | |
max_v = Math.max(max_v, c.active, c.waiting, c.inactive); | |
} | |
let [step, top] = split_ticks(max_v, GRAPH_HEIGHT / MIN_TICK_DIST); | |
let num_ticks = top / step; | |
let tick_dist = GRAPH_HEIGHT / num_ticks; | |
ctx.textAlign = 'end'; | |
for (n=0; n<num_ticks; n++) { | |
let y = HEIGHT - Y_LINE - ((n + 1) * tick_dist); | |
ctx.beginPath(); | |
ctx.moveTo(X_LINE, y); | |
ctx.lineTo(X_LINE-5, y); | |
ctx.stroke(); | |
ctx.fillText((n+1) * step, X_LINE-10, y+5); | |
} | |
// Label the Y axis. | |
let label_y = (HEIGHT - Y_LINE) / 2; | |
ctx.save(); | |
ctx.translate(15, label_y); | |
ctx.rotate(3*Math.PI/2); | |
ctx.textAlign = 'center'; | |
ctx.fillText('# Units', 0, 0); | |
ctx.restore(); | |
// Draw the graph. | |
ctx.save(); | |
ctx.translate(X_LINE, MARGIN); | |
function coord(t, v) { | |
return { | |
x: graph_width * (t/DURATION), | |
y: TOP_MARGIN + GRAPH_HEIGHT * (1.0 - (v / max_v)) | |
}; | |
} | |
function draw_line(style, key) { | |
let first = CONCURRENCY_DATA[0]; | |
let last = coord(first.t, key(first)); | |
ctx.strokeStyle = style; | |
ctx.beginPath(); | |
ctx.moveTo(last.x, last.y); | |
for (let i=1; i<CONCURRENCY_DATA.length; i++) { | |
let c = CONCURRENCY_DATA[i]; | |
let {x, y} = coord(c.t, key(c)); | |
ctx.lineTo(x, last.y); | |
ctx.lineTo(x, y); | |
last = {x, y}; | |
} | |
ctx.stroke(); | |
} | |
draw_line('blue', function(c) {return c.inactive;}); | |
draw_line('red', function(c) {return c.waiting;}); | |
draw_line('green', function(c) {return c.active;}); | |
// Draw a legend. | |
ctx.restore(); | |
ctx.save(); | |
ctx.translate(graph_width-120, MARGIN); | |
// background | |
ctx.fillStyle = '#fff'; | |
ctx.strokeStyle = '#000'; | |
ctx.lineWidth = 1; | |
ctx.textBaseline = 'middle' | |
ctx.textAlign = 'start'; | |
ctx.beginPath(); | |
ctx.rect(0, 0, 120, 62); | |
ctx.stroke(); | |
ctx.fill(); | |
ctx.fillStyle = '#000' | |
ctx.beginPath(); | |
ctx.lineWidth = 2; | |
ctx.strokeStyle = 'red'; | |
ctx.moveTo(5, 10); | |
ctx.lineTo(50, 10); | |
ctx.stroke(); | |
ctx.fillText('Waiting', 54, 11); | |
ctx.beginPath(); | |
ctx.strokeStyle = 'blue'; | |
ctx.moveTo(5, 30); | |
ctx.lineTo(50, 30); | |
ctx.stroke(); | |
ctx.fillText('Inactive', 54, 31); | |
ctx.beginPath(); | |
ctx.strokeStyle = 'green'; | |
ctx.moveTo(5, 50); | |
ctx.lineTo(50, 50); | |
ctx.stroke(); | |
ctx.fillText('Active', 54, 51); | |
ctx.restore(); | |
} | |
function setup_canvas(id, width, height) { | |
let g = document.getElementById(id); | |
let dpr = window.devicePixelRatio || 1; | |
g.width = width * dpr; | |
g.height = height * dpr; | |
g.style.width = width; | |
g.style.height = height; | |
let ctx = g.getContext('2d'); | |
ctx.scale(dpr, dpr); | |
return ctx; | |
} | |
function draw_graph_axes(id, graph_height) { | |
const PX_PER_SEC = document.getElementById('scale').valueAsNumber; | |
const graph_width = PX_PER_SEC * DURATION; | |
const width = graph_width + X_LINE + 30; | |
const height = graph_height + MARGIN + Y_LINE; | |
let ctx = setup_canvas(id, width, height); | |
ctx.fillStyle = '#f7f7f7'; | |
ctx.fillRect(0, 0, width, height); | |
ctx.lineWidth = 2; | |
ctx.font = '16px sans-serif'; | |
ctx.textAlign = 'center'; | |
// Draw main axes. | |
ctx.beginPath(); | |
ctx.moveTo(X_LINE, MARGIN); | |
ctx.lineTo(X_LINE, graph_height + MARGIN); | |
ctx.lineTo(X_LINE+graph_width+20, graph_height + MARGIN); | |
ctx.stroke(); | |
// Draw X tick marks. | |
const tick_width = graph_width - 10; | |
const [step, top] = split_ticks(DURATION, tick_width / MIN_TICK_DIST); | |
const num_ticks = top / step; | |
const tick_dist = tick_width / num_ticks; | |
ctx.fillStyle = '#303030'; | |
for (let n=0; n<num_ticks; n++) { | |
const x = X_LINE + ((n + 1) * tick_dist); | |
ctx.beginPath(); | |
ctx.moveTo(x, height-Y_LINE); | |
ctx.lineTo(x, height-Y_LINE+5); | |
ctx.stroke(); | |
ctx.fillText(`${(n+1) * step}s`, x, height - Y_LINE + 20); | |
} | |
// Draw vertical lines. | |
ctx.strokeStyle = '#e6e6e6'; | |
ctx.setLineDash([2, 4]); | |
for (n=0; n<num_ticks; n++) { | |
const x = X_LINE + ((n + 1) * tick_dist); | |
ctx.beginPath(); | |
ctx.moveTo(x, MARGIN); | |
ctx.lineTo(x, MARGIN+graph_height); | |
ctx.stroke(); | |
} | |
ctx.strokeStyle = '#000'; | |
ctx.setLineDash([]); | |
return {width, height, graph_width, graph_height, ctx}; | |
} | |
function round_up(n, step) { | |
if (n % step == 0) { | |
return n; | |
} else { | |
return (step - n % step) + n; | |
} | |
} | |
// Determine the `(step, max_value)` of the number of ticks along an axis. | |
function split_ticks(n, max_ticks) { | |
if (n <= max_ticks) { | |
return [1, n]; | |
} else if (n <= max_ticks * 2) { | |
return [2, round_up(n, 2)]; | |
} else if (n <= max_ticks * 4) { | |
return [4, round_up(n, 4)]; | |
} else if (n <= max_ticks * 5) { | |
return [5, round_up(n, 5)]; | |
} else { | |
let step = 10; | |
while (true) { | |
let top = round_up(n, step); | |
if (top <= max_ticks * step) { | |
return [step, top]; | |
} | |
step += 10; | |
} | |
} | |
} | |
function codegen_time(unit) { | |
if (unit.rmeta_time == null) { | |
return null; | |
} | |
let ctime = unit.duration - unit.rmeta_time; | |
return [unit.rmeta_time, ctime]; | |
} | |
function roundedRect(ctx, x, y, width, height, r) { | |
r = Math.min(r, width, height); | |
ctx.beginPath(); | |
ctx.moveTo(x+r, y); | |
ctx.lineTo(x+width-r, y); | |
ctx.arc(x+width-r, y+r, r, 3*Math.PI/2, 0); | |
ctx.lineTo(x+width, y+height-r); | |
ctx.arc(x+width-r, y+height-r, r, 0, Math.PI/2); | |
ctx.lineTo(x+r, y+height); | |
ctx.arc(x+r, y+height-r, r, Math.PI/2, Math.PI); | |
ctx.lineTo(x, y-r); | |
ctx.arc(x+r, y+r, r, Math.PI, 3*Math.PI/2); | |
ctx.closePath(); | |
} | |
function pipeline_mouse_hit(event) { | |
// This brute-force method can be optimized if needed. | |
for (let box of HIT_BOXES) { | |
if (event.offsetX >= box.x && event.offsetX <= box.x2 && | |
event.offsetY >= box.y && event.offsetY <= box.y2) { | |
return box; | |
} | |
} | |
} | |
function pipeline_mousemove(event) { | |
// Highlight dependency lines on mouse hover. | |
let box = pipeline_mouse_hit(event); | |
if (box) { | |
if (box.i != LAST_HOVER) { | |
LAST_HOVER = box.i; | |
let g = document.getElementById('pipeline-graph-lines'); | |
let ctx = g.getContext('2d'); | |
ctx.clearRect(0, 0, g.width, g.height); | |
ctx.save(); | |
ctx.translate(X_LINE, MARGIN); | |
ctx.lineWidth = 2; | |
draw_dep_lines(ctx, box.i, true); | |
if (box.i in REVERSE_UNIT_DEPS) { | |
const dep_unit = REVERSE_UNIT_DEPS[box.i]; | |
if (dep_unit in UNIT_COORDS) { | |
const {x, y, rmeta_x} = UNIT_COORDS[dep_unit]; | |
draw_one_dep_line(ctx, x, y, box.i, true); | |
} | |
} | |
if (box.i in REVERSE_UNIT_RMETA_DEPS) { | |
const dep_unit = REVERSE_UNIT_RMETA_DEPS[box.i]; | |
if (dep_unit in UNIT_COORDS) { | |
const {x, y, rmeta_x} = UNIT_COORDS[dep_unit]; | |
draw_one_dep_line(ctx, rmeta_x, y, box.i, true); | |
} | |
} | |
ctx.restore(); | |
} | |
} | |
} | |
render_pipeline_graph(); | |
render_timing_graph(); | |
// Set up and handle controls. | |
{ | |
const range = document.getElementById('min-unit-time'); | |
const time_output = document.getElementById('min-unit-time-output'); | |
time_output.innerHTML = `${range.value}s`; | |
range.oninput = event => { | |
time_output.innerHTML = `${range.value}s`; | |
render_pipeline_graph(); | |
}; | |
const scale = document.getElementById('scale'); | |
const scale_output = document.getElementById('scale-output'); | |
scale_output.innerHTML = `${scale.value}`; | |
scale.oninput = event => { | |
scale_output.innerHTML = `${scale.value}`; | |
render_pipeline_graph(); | |
render_timing_graph(); | |
}; | |
} | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment