Skip to content

Instantly share code, notes, and snippets.

@CreepySkeleton
Created July 28, 2020 11:04
Show Gist options
  • Save CreepySkeleton/8ee8a91bfe081221672908eb57fcf723 to your computer and use it in GitHub Desktop.
Save CreepySkeleton/8ee8a91bfe081221672908eb57fcf723 to your computer and use it in GitHub Desktop.
<html>
<head>
<title>Cargo Build Timings — clap 3.0.0-beta.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;
}
.error-text {
color: #e80000;
}
</style>
</head>
<body>
<h1>Cargo Build Timings</h1>
<table class="my-table summary-table">
<tr>
<td>Targets:</td><td>clap 3.0.0-beta.1 (lib)</td>
</tr>
<tr>
<td>Profile:</td><td>dev</td>
</tr>
<tr>
<td>Fresh units:</td><td>0</td>
</tr>
<tr>
<td>Dirty units:</td><td>43</td>
</tr>
<tr>
<td>Total units:</td><td>43</td>
</tr>
<tr>
<td>Max concurrency:</td><td>2 (jobs=2 ncpu=2)</td>
</tr>
<tr>
<td>Build start:</td><td>2020-07-28T10:58:54Z</td>
</tr>
<tr>
<td>Total time:</td><td>44.4s</td>
</tr>
<tr>
<td>rustc:</td><td>rustc 1.47.0-nightly (6c8927b0c 2020-07-26)<br>Host: x86_64-unknown-linux-gnu<br>Target: x86_64-unknown-linux-gnu</td>
</tr>
<tr>
<td>Max (global) rustc threads concurrency:</td><td>0</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>syn v1.0.34</td>
<td>12.5s</td>
<td>5.3s (42%)</td>
<td>clone-impls, default, derive, full, parsing, printing, proc-macro, quote, visit</td>
</tr>
<tr>
<td>2.</td>
<td>clap v3.0.0-beta.1</td>
<td>11.5s</td>
<td>5.6s (49%)</td>
<td>atty, cargo, clap_derive, color, default, derive, lazy_static, std, strsim, suggestions, termcolor, unstable, yaml, yaml-rust</td>
</tr>
<tr>
<td>3.</td>
<td>clap_derive v3.0.0-beta.1</td>
<td>7.0s</td>
<td>0.0s (0%)</td>
<td>default, unstable</td>
</tr>
<tr>
<td>4.</td>
<td>yaml-rust v0.4.4</td>
<td>3.2s</td>
<td>2.0s (64%)</td>
<td></td>
</tr>
<tr>
<td>5.</td>
<td>proc-macro2 v1.0.18</td>
<td>2.2s</td>
<td>1.2s (54%)</td>
<td>default, proc-macro</td>
</tr>
<tr>
<td>6.</td>
<td>proc-macro-error-attr v1.0.3</td>
<td>1.7s</td>
<td>0.0s (0%)</td>
<td></td>
</tr>
<tr>
<td>7.</td>
<td>libc v0.2.72</td>
<td>1.5s</td>
<td>0.1s (7%)</td>
<td>default, std</td>
</tr>
<tr>
<td>8.</td>
<td>autocfg v1.0.0</td>
<td>1.5s</td>
<td>1.0s (66%)</td>
<td></td>
</tr>
<tr>
<td>9.</td>
<td>syn-mid v0.5.0</td>
<td>1.3s</td>
<td>0.9s (71%)</td>
<td></td>
</tr>
<tr>
<td>10.</td>
<td>unicode-segmentation v1.6.0</td>
<td>1.2s</td>
<td>0.3s (23%)</td>
<td></td>
</tr>
<tr>
<td>11.</td>
<td>version_check v0.9.2</td>
<td>1.1s</td>
<td>0.8s (71%)</td>
<td></td>
</tr>
<tr>
<td>12.</td>
<td>strsim v0.10.0</td>
<td>1.1s</td>
<td>0.8s (71%)</td>
<td></td>
</tr>
<tr>
<td>13.</td>
<td>termcolor v1.1.0</td>
<td>1.0s</td>
<td>0.5s (54%)</td>
<td></td>
</tr>
<tr>
<td>14.</td>
<td>hashbrown v0.8.1</td>
<td>1.0s</td>
<td>0.0s (4%)</td>
<td>raw</td>
</tr>
<tr>
<td>15.</td>
<td>proc-macro2 v1.0.18 custom-build</td>
<td>0.9s</td>
<td>0.0s (0%)</td>
<td>default, proc-macro</td>
</tr>
<tr>
<td>16.</td>
<td>libc v0.2.72 custom-build</td>
<td>0.9s</td>
<td>0.0s (0%)</td>
<td>default, std</td>
</tr>
<tr>
<td>17.</td>
<td>indexmap v1.5.0</td>
<td>0.8s</td>
<td>0.1s (11%)</td>
<td></td>
</tr>
<tr>
<td>18.</td>
<td>quote v1.0.7</td>
<td>0.8s</td>
<td>0.4s (48%)</td>
<td>default, proc-macro</td>
</tr>
<tr>
<td>19.</td>
<td>bitflags v1.2.1 custom-build</td>
<td>0.8s</td>
<td>0.0s (0%)</td>
<td>default</td>
</tr>
<tr>
<td>20.</td>
<td>syn v1.0.34 custom-build</td>
<td>0.8s</td>
<td>0.0s (0%)</td>
<td>clone-impls, default, derive, full, parsing, printing, proc-macro, quote, visit</td>
</tr>
<tr>
<td>21.</td>
<td>proc-macro-error v1.0.3</td>
<td>0.8s</td>
<td>0.4s (51%)</td>
<td></td>
</tr>
<tr>
<td>22.</td>
<td>textwrap v0.12.1</td>
<td>0.7s</td>
<td>0.5s (61%)</td>
<td></td>
</tr>
<tr>
<td>23.</td>
<td>heck v0.3.1</td>
<td>0.5s</td>
<td>0.3s (66%)</td>
<td></td>
</tr>
<tr>
<td>24.</td>
<td>proc-macro-error-attr v1.0.3 custom-build</td>
<td>0.4s</td>
<td>0.0s (0%)</td>
<td></td>
</tr>
<tr>
<td>25.</td>
<td>linked-hash-map v0.5.3</td>
<td>0.3s</td>
<td>0.0s (4%)</td>
<td></td>
</tr>
<tr>
<td>26.</td>
<td>hashbrown v0.8.1 custom-build</td>
<td>0.3s</td>
<td>0.0s (0%)</td>
<td>raw</td>
</tr>
<tr>
<td>27.</td>
<td>proc-macro-error v1.0.3 custom-build</td>
<td>0.3s</td>
<td>0.0s (0%)</td>
<td></td>
</tr>
<tr>
<td>28.</td>
<td>indexmap v1.5.0 custom-build</td>
<td>0.3s</td>
<td>0.0s (0%)</td>
<td></td>
</tr>
<tr>
<td>29.</td>
<td>vec_map v0.8.2</td>
<td>0.3s</td>
<td>0.0s (5%)</td>
<td></td>
</tr>
<tr>
<td>30.</td>
<td>os_str_bytes v2.3.1</td>
<td>0.3s</td>
<td>0.1s (39%)</td>
<td>raw</td>
</tr>
<tr>
<td>31.</td>
<td>unicode-xid v0.2.1</td>
<td>0.2s</td>
<td>0.0s (25%)</td>
<td>default</td>
</tr>
<tr>
<td>32.</td>
<td>unicode-width v0.1.8</td>
<td>0.2s</td>
<td>0.0s (8%)</td>
<td>default</td>
</tr>
<tr>
<td>33.</td>
<td>indexmap v1.5.0 custom-build (run)</td>
<td>0.1s</td>
<td>0.0s (0%)</td>
<td></td>
</tr>
<tr>
<td>34.</td>
<td>atty v0.2.14</td>
<td>0.1s</td>
<td>0.0s (17%)</td>
<td></td>
</tr>
<tr>
<td>35.</td>
<td>lazy_static v1.4.0</td>
<td>0.1s</td>
<td>0.0s (11%)</td>
<td></td>
</tr>
<tr>
<td>36.</td>
<td>proc-macro-error v1.0.3 custom-build (run)</td>
<td>0.1s</td>
<td>0.0s (0%)</td>
<td></td>
</tr>
<tr>
<td>37.</td>
<td>hashbrown v0.8.1 custom-build (run)</td>
<td>0.1s</td>
<td>0.0s (0%)</td>
<td>raw</td>
</tr>
<tr>
<td>38.</td>
<td>bitflags v1.2.1</td>
<td>0.1s</td>
<td>0.0s (13%)</td>
<td>default</td>
</tr>
<tr>
<td>39.</td>
<td>syn v1.0.34 custom-build (run)</td>
<td>0.0s</td>
<td>0.0s (0%)</td>
<td>clone-impls, default, derive, full, parsing, printing, proc-macro, quote, visit</td>
</tr>
<tr>
<td>40.</td>
<td>proc-macro-error-attr v1.0.3 custom-build (run)</td>
<td>0.0s</td>
<td>0.0s (0%)</td>
<td></td>
</tr>
<tr>
<td>41.</td>
<td>bitflags v1.2.1 custom-build (run)</td>
<td>0.0s</td>
<td>0.0s (0%)</td>
<td>default</td>
</tr>
<tr>
<td>42.</td>
<td>libc v0.2.72 custom-build (run)</td>
<td>0.0s</td>
<td>0.0s (0%)</td>
<td>default, std</td>
</tr>
<tr>
<td>43.</td>
<td>proc-macro2 v1.0.18 custom-build (run)</td>
<td>0.0s</td>
<td>0.0s (0%)</td>
<td>default, proc-macro</td>
</tr>
</tbody>
</table>
<script>
DURATION = 45;
const UNIT_DATA = [
{
"i": 0,
"name": "proc-macro2",
"version": "1.0.18",
"mode": "todo",
"target": " custom-build",
"start": 0.15,
"duration": 0.9,
"rmeta_time": 0.9,
"unlocked_units": [
15
],
"unlocked_rmeta_units": []
},
{
"i": 1,
"name": "version_check",
"version": "0.9.2",
"mode": "todo",
"target": "",
"start": 0.16,
"duration": 1.14,
"rmeta_time": 0.33,
"unlocked_units": [
17,
16
],
"unlocked_rmeta_units": []
},
{
"i": 2,
"name": "unicode-xid",
"version": "0.2.1",
"mode": "todo",
"target": "",
"start": 1.05,
"duration": 0.17,
"rmeta_time": 0.13,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 3,
"name": "syn",
"version": "1.0.34",
"mode": "todo",
"target": " custom-build",
"start": 1.23,
"duration": 0.76,
"rmeta_time": 0.76,
"unlocked_units": [
18
],
"unlocked_rmeta_units": []
},
{
"i": 4,
"name": "autocfg",
"version": "1.0.0",
"mode": "todo",
"target": "",
"start": 1.3,
"duration": 1.45,
"rmeta_time": 0.49,
"unlocked_units": [
20,
19
],
"unlocked_rmeta_units": []
},
{
"i": 5,
"name": "libc",
"version": "0.2.72",
"mode": "todo",
"target": " custom-build",
"start": 1.98,
"duration": 0.86,
"rmeta_time": 0.86,
"unlocked_units": [
21
],
"unlocked_rmeta_units": []
},
{
"i": 6,
"name": "unicode-segmentation",
"version": "1.6.0",
"mode": "todo",
"target": "",
"start": 2.75,
"duration": 1.22,
"rmeta_time": 0.93,
"unlocked_units": [],
"unlocked_rmeta_units": [
23
]
},
{
"i": 7,
"name": "bitflags",
"version": "1.2.1",
"mode": "todo",
"target": " custom-build",
"start": 2.85,
"duration": 0.8,
"rmeta_time": 0.8,
"unlocked_units": [
22
],
"unlocked_rmeta_units": []
},
{
"i": 8,
"name": "linked-hash-map",
"version": "0.5.3",
"mode": "todo",
"target": "",
"start": 3.65,
"duration": 0.33,
"rmeta_time": 0.32,
"unlocked_units": [],
"unlocked_rmeta_units": [
24
]
},
{
"i": 9,
"name": "unicode-width",
"version": "0.1.8",
"mode": "todo",
"target": "",
"start": 3.97,
"duration": 0.15,
"rmeta_time": 0.14,
"unlocked_units": [],
"unlocked_rmeta_units": [
25
]
},
{
"i": 10,
"name": "vec_map",
"version": "0.8.2",
"mode": "todo",
"target": "",
"start": 3.98,
"duration": 0.27,
"rmeta_time": 0.26,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 11,
"name": "termcolor",
"version": "1.1.0",
"mode": "todo",
"target": "",
"start": 4.12,
"duration": 1.02,
"rmeta_time": 0.47,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 12,
"name": "os_str_bytes",
"version": "2.3.1",
"mode": "todo",
"target": "",
"start": 4.25,
"duration": 0.25,
"rmeta_time": 0.15,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 13,
"name": "strsim",
"version": "0.10.0",
"mode": "todo",
"target": "",
"start": 4.5,
"duration": 1.1,
"rmeta_time": 0.32,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 14,
"name": "lazy_static",
"version": "1.4.0",
"mode": "todo",
"target": "",
"start": 5.14,
"duration": 0.1,
"rmeta_time": 0.09,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 15,
"name": "proc-macro2",
"version": "1.0.18",
"mode": "run-custom-build",
"target": " custom-build (run)",
"start": 5.24,
"duration": 0.03,
"rmeta_time": 0.03,
"unlocked_units": [
26
],
"unlocked_rmeta_units": []
},
{
"i": 16,
"name": "proc-macro-error-attr",
"version": "1.0.3",
"mode": "todo",
"target": " custom-build",
"start": 5.27,
"duration": 0.38,
"rmeta_time": 0.38,
"unlocked_units": [
27
],
"unlocked_rmeta_units": []
},
{
"i": 17,
"name": "proc-macro-error",
"version": "1.0.3",
"mode": "todo",
"target": " custom-build",
"start": 5.6,
"duration": 0.3,
"rmeta_time": 0.3,
"unlocked_units": [
28
],
"unlocked_rmeta_units": []
},
{
"i": 18,
"name": "syn",
"version": "1.0.34",
"mode": "run-custom-build",
"target": " custom-build (run)",
"start": 5.64,
"duration": 0.04,
"rmeta_time": 0.04,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 19,
"name": "hashbrown",
"version": "0.8.1",
"mode": "todo",
"target": " custom-build",
"start": 5.68,
"duration": 0.32,
"rmeta_time": 0.32,
"unlocked_units": [
29
],
"unlocked_rmeta_units": []
},
{
"i": 20,
"name": "indexmap",
"version": "1.5.0",
"mode": "todo",
"target": " custom-build",
"start": 5.9,
"duration": 0.28,
"rmeta_time": 0.28,
"unlocked_units": [
32
],
"unlocked_rmeta_units": []
},
{
"i": 21,
"name": "libc",
"version": "0.2.72",
"mode": "run-custom-build",
"target": " custom-build (run)",
"start": 6.0,
"duration": 0.03,
"rmeta_time": 0.03,
"unlocked_units": [
30
],
"unlocked_rmeta_units": []
},
{
"i": 22,
"name": "bitflags",
"version": "1.2.1",
"mode": "run-custom-build",
"target": " custom-build (run)",
"start": 6.03,
"duration": 0.03,
"rmeta_time": 0.03,
"unlocked_units": [
31
],
"unlocked_rmeta_units": []
},
{
"i": 23,
"name": "heck",
"version": "0.3.1",
"mode": "todo",
"target": "",
"start": 6.06,
"duration": 0.5,
"rmeta_time": 0.17,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 24,
"name": "yaml-rust",
"version": "0.4.4",
"mode": "todo",
"target": "",
"start": 6.18,
"duration": 3.19,
"rmeta_time": 1.16,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 25,
"name": "textwrap",
"version": "0.12.1",
"mode": "todo",
"target": "",
"start": 6.57,
"duration": 0.74,
"rmeta_time": 0.29,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 26,
"name": "proc-macro2",
"version": "1.0.18",
"mode": "todo",
"target": "",
"start": 7.31,
"duration": 2.16,
"rmeta_time": 0.98,
"unlocked_units": [],
"unlocked_rmeta_units": [
33
]
},
{
"i": 27,
"name": "proc-macro-error-attr",
"version": "1.0.3",
"mode": "run-custom-build",
"target": " custom-build (run)",
"start": 9.37,
"duration": 0.03,
"rmeta_time": 0.03,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 28,
"name": "proc-macro-error",
"version": "1.0.3",
"mode": "run-custom-build",
"target": " custom-build (run)",
"start": 9.41,
"duration": 0.09,
"rmeta_time": 0.09,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 29,
"name": "hashbrown",
"version": "0.8.1",
"mode": "run-custom-build",
"target": " custom-build (run)",
"start": 9.47,
"duration": 0.09,
"rmeta_time": 0.09,
"unlocked_units": [
34
],
"unlocked_rmeta_units": []
},
{
"i": 30,
"name": "libc",
"version": "0.2.72",
"mode": "todo",
"target": "",
"start": 9.5,
"duration": 1.48,
"rmeta_time": 1.37,
"unlocked_units": [],
"unlocked_rmeta_units": [
36
]
},
{
"i": 31,
"name": "bitflags",
"version": "1.2.1",
"mode": "todo",
"target": "",
"start": 9.56,
"duration": 0.05,
"rmeta_time": 0.05,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 32,
"name": "indexmap",
"version": "1.5.0",
"mode": "run-custom-build",
"target": " custom-build (run)",
"start": 9.62,
"duration": 0.12,
"rmeta_time": 0.12,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 33,
"name": "quote",
"version": "1.0.7",
"mode": "todo",
"target": "",
"start": 9.74,
"duration": 0.8,
"rmeta_time": 0.42,
"unlocked_units": [],
"unlocked_rmeta_units": [
35
]
},
{
"i": 34,
"name": "hashbrown",
"version": "0.8.1",
"mode": "todo",
"target": "",
"start": 10.54,
"duration": 1.01,
"rmeta_time": 0.97,
"unlocked_units": [],
"unlocked_rmeta_units": [
37
]
},
{
"i": 35,
"name": "syn",
"version": "1.0.34",
"mode": "todo",
"target": "",
"start": 10.98,
"duration": 12.46,
"rmeta_time": 7.16,
"unlocked_units": [
39
],
"unlocked_rmeta_units": [
38
]
},
{
"i": 36,
"name": "atty",
"version": "0.2.14",
"mode": "todo",
"target": "",
"start": 11.55,
"duration": 0.1,
"rmeta_time": 0.08,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 37,
"name": "indexmap",
"version": "1.5.0",
"mode": "todo",
"target": "",
"start": 11.65,
"duration": 0.81,
"rmeta_time": 0.72,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 38,
"name": "syn-mid",
"version": "0.5.0",
"mode": "todo",
"target": "",
"start": 18.15,
"duration": 1.3,
"rmeta_time": 0.37,
"unlocked_units": [],
"unlocked_rmeta_units": []
},
{
"i": 39,
"name": "proc-macro-error-attr",
"version": "1.0.3",
"mode": "todo",
"target": "",
"start": 23.44,
"duration": 1.72,
"rmeta_time": 1.72,
"unlocked_units": [
40
],
"unlocked_rmeta_units": []
},
{
"i": 40,
"name": "proc-macro-error",
"version": "1.0.3",
"mode": "todo",
"target": "",
"start": 25.16,
"duration": 0.76,
"rmeta_time": 0.37,
"unlocked_units": [
41
],
"unlocked_rmeta_units": []
},
{
"i": 41,
"name": "clap_derive",
"version": "3.0.0-beta.1",
"mode": "todo",
"target": "",
"start": 25.92,
"duration": 6.96,
"rmeta_time": 6.96,
"unlocked_units": [
42
],
"unlocked_rmeta_units": []
},
{
"i": 42,
"name": "clap",
"version": "3.0.0-beta.1",
"mode": "todo",
"target": "",
"start": 32.88,
"duration": 11.48,
"rmeta_time": 5.91,
"unlocked_units": [],
"unlocked_rmeta_units": []
}
];
const CONCURRENCY_DATA = [
{
"t": 0.154785455,
"active": 2,
"waiting": 13,
"inactive": 28,
"rustc_parallelism": 0
},
{
"t": 0.155307039,
"active": 2,
"waiting": 13,
"inactive": 28,
"rustc_parallelism": 0
},
{
"t": 0.482854866,
"active": 2,
"waiting": 13,
"inactive": 28,
"rustc_parallelism": 0
},
{
"t": 0.983075934,
"active": 2,
"waiting": 13,
"inactive": 28,
"rustc_parallelism": 0
},
{
"t": 1.0526043330000001,
"active": 2,
"waiting": 13,
"inactive": 27,
"rustc_parallelism": 0
},
{
"t": 1.053464504,
"active": 2,
"waiting": 13,
"inactive": 27,
"rustc_parallelism": 0
},
{
"t": 1.18206931,
"active": 2,
"waiting": 13,
"inactive": 27,
"rustc_parallelism": 0
},
{
"t": 1.225250589,
"active": 2,
"waiting": 12,
"inactive": 27,
"rustc_parallelism": 0
},
{
"t": 1.225524949,
"active": 2,
"waiting": 12,
"inactive": 27,
"rustc_parallelism": 0
},
{
"t": 1.295222068,
"active": 2,
"waiting": 13,
"inactive": 25,
"rustc_parallelism": 0
},
{
"t": 1.295874685,
"active": 2,
"waiting": 13,
"inactive": 25,
"rustc_parallelism": 0
},
{
"t": 1.790069776,
"active": 2,
"waiting": 13,
"inactive": 25,
"rustc_parallelism": 0
},
{
"t": 1.983372207,
"active": 2,
"waiting": 13,
"inactive": 24,
"rustc_parallelism": 0
},
{
"t": 1.984017346,
"active": 2,
"waiting": 13,
"inactive": 24,
"rustc_parallelism": 0
},
{
"t": 2.484142039,
"active": 2,
"waiting": 13,
"inactive": 24,
"rustc_parallelism": 0
},
{
"t": 2.750404782,
"active": 2,
"waiting": 14,
"inactive": 22,
"rustc_parallelism": 0
},
{
"t": 2.751099071,
"active": 2,
"waiting": 14,
"inactive": 22,
"rustc_parallelism": 0
},
{
"t": 2.848687536,
"active": 2,
"waiting": 14,
"inactive": 21,
"rustc_parallelism": 0
},
{
"t": 2.849147911,
"active": 2,
"waiting": 14,
"inactive": 21,
"rustc_parallelism": 0
},
{
"t": 3.349275425,
"active": 2,
"waiting": 14,
"inactive": 21,
"rustc_parallelism": 0
},
{
"t": 3.645086777,
"active": 2,
"waiting": 14,
"inactive": 20,
"rustc_parallelism": 0
},
{
"t": 3.6456158419999998,
"active": 2,
"waiting": 14,
"inactive": 20,
"rustc_parallelism": 0
},
{
"t": 3.683433793,
"active": 2,
"waiting": 15,
"inactive": 19,
"rustc_parallelism": 0
},
{
"t": 3.965743964,
"active": 2,
"waiting": 16,
"inactive": 18,
"rustc_parallelism": 0
},
{
"t": 3.967177467,
"active": 2,
"waiting": 15,
"inactive": 18,
"rustc_parallelism": 0
},
{
"t": 3.967418837,
"active": 2,
"waiting": 15,
"inactive": 18,
"rustc_parallelism": 0
},
{
"t": 3.98027882,
"active": 2,
"waiting": 14,
"inactive": 18,
"rustc_parallelism": 0
},
{
"t": 3.98100536,
"active": 2,
"waiting": 14,
"inactive": 18,
"rustc_parallelism": 0
},
{
"t": 4.109281896,
"active": 2,
"waiting": 15,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 4.121565641,
"active": 2,
"waiting": 14,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 4.121949403,
"active": 2,
"waiting": 14,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 4.23691921,
"active": 2,
"waiting": 14,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 4.251181156,
"active": 2,
"waiting": 13,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 4.251398463,
"active": 2,
"waiting": 13,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 4.404315399,
"active": 2,
"waiting": 13,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 4.504016613,
"active": 2,
"waiting": 12,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 4.504196928,
"active": 2,
"waiting": 12,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 4.59264516,
"active": 2,
"waiting": 12,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 4.822513087,
"active": 2,
"waiting": 12,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 5.13978165,
"active": 2,
"waiting": 11,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 5.140395211,
"active": 2,
"waiting": 11,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 5.2283925589999996,
"active": 2,
"waiting": 11,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 5.2394194370000005,
"active": 2,
"waiting": 10,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 5.23977175,
"active": 2,
"waiting": 10,
"inactive": 17,
"rustc_parallelism": 0
},
{
"t": 5.267057853,
"active": 2,
"waiting": 10,
"inactive": 16,
"rustc_parallelism": 0
},
{
"t": 5.267714287,
"active": 2,
"waiting": 10,
"inactive": 16,
"rustc_parallelism": 0
},
{
"t": 5.603626881,
"active": 2,
"waiting": 9,
"inactive": 16,
"rustc_parallelism": 0
},
{
"t": 5.604829817,
"active": 2,
"waiting": 9,
"inactive": 16,
"rustc_parallelism": 0
},
{
"t": 5.644055904,
"active": 2,
"waiting": 9,
"inactive": 15,
"rustc_parallelism": 0
},
{
"t": 5.644425954,
"active": 2,
"waiting": 9,
"inactive": 15,
"rustc_parallelism": 0
},
{
"t": 5.6800949670000005,
"active": 2,
"waiting": 8,
"inactive": 15,
"rustc_parallelism": 0
},
{
"t": 5.680917142,
"active": 2,
"waiting": 8,
"inactive": 15,
"rustc_parallelism": 0
},
{
"t": 5.900957808,
"active": 2,
"waiting": 8,
"inactive": 14,
"rustc_parallelism": 0
},
{
"t": 5.901947092,
"active": 2,
"waiting": 8,
"inactive": 14,
"rustc_parallelism": 0
},
{
"t": 6.000372565,
"active": 2,
"waiting": 8,
"inactive": 13,
"rustc_parallelism": 0
},
{
"t": 6.000673355,
"active": 2,
"waiting": 8,
"inactive": 13,
"rustc_parallelism": 0
},
{
"t": 6.030772312,
"active": 2,
"waiting": 8,
"inactive": 12,
"rustc_parallelism": 0
},
{
"t": 6.032082127,
"active": 2,
"waiting": 8,
"inactive": 12,
"rustc_parallelism": 0
},
{
"t": 6.062594723,
"active": 2,
"waiting": 8,
"inactive": 11,
"rustc_parallelism": 0
},
{
"t": 6.063479612,
"active": 2,
"waiting": 8,
"inactive": 11,
"rustc_parallelism": 0
},
{
"t": 6.183129001,
"active": 2,
"waiting": 8,
"inactive": 10,
"rustc_parallelism": 0
},
{
"t": 6.184234669,
"active": 2,
"waiting": 8,
"inactive": 10,
"rustc_parallelism": 0
},
{
"t": 6.235046827,
"active": 2,
"waiting": 8,
"inactive": 10,
"rustc_parallelism": 0
},
{
"t": 6.563864872,
"active": 2,
"waiting": 7,
"inactive": 10,
"rustc_parallelism": 0
},
{
"t": 6.5650499369999995,
"active": 2,
"waiting": 7,
"inactive": 10,
"rustc_parallelism": 0
},
{
"t": 6.854226998,
"active": 2,
"waiting": 7,
"inactive": 10,
"rustc_parallelism": 0
},
{
"t": 7.310507555,
"active": 2,
"waiting": 6,
"inactive": 10,
"rustc_parallelism": 0
},
{
"t": 7.3126282830000005,
"active": 2,
"waiting": 6,
"inactive": 10,
"rustc_parallelism": 0
},
{
"t": 7.344412847,
"active": 2,
"waiting": 6,
"inactive": 10,
"rustc_parallelism": 0
},
{
"t": 7.844562562,
"active": 2,
"waiting": 6,
"inactive": 10,
"rustc_parallelism": 0
},
{
"t": 8.297291113,
"active": 2,
"waiting": 7,
"inactive": 9,
"rustc_parallelism": 0
},
{
"t": 8.797479813,
"active": 2,
"waiting": 7,
"inactive": 9,
"rustc_parallelism": 0
},
{
"t": 9.297722446,
"active": 2,
"waiting": 7,
"inactive": 9,
"rustc_parallelism": 0
},
{
"t": 9.373411175,
"active": 2,
"waiting": 6,
"inactive": 9,
"rustc_parallelism": 0
},
{
"t": 9.373829319,
"active": 2,
"waiting": 6,
"inactive": 9,
"rustc_parallelism": 0
},
{
"t": 9.408405987,
"active": 2,
"waiting": 5,
"inactive": 9,
"rustc_parallelism": 0
},
{
"t": 9.409186698,
"active": 2,
"waiting": 5,
"inactive": 9,
"rustc_parallelism": 0
},
{
"t": 9.469353488,
"active": 2,
"waiting": 4,
"inactive": 9,
"rustc_parallelism": 0
},
{
"t": 9.469761307,
"active": 2,
"waiting": 4,
"inactive": 9,
"rustc_parallelism": 0
},
{
"t": 9.503625559,
"active": 2,
"waiting": 3,
"inactive": 9,
"rustc_parallelism": 0
},
{
"t": 9.503911754,
"active": 2,
"waiting": 3,
"inactive": 9,
"rustc_parallelism": 0
},
{
"t": 9.561032614,
"active": 2,
"waiting": 3,
"inactive": 8,
"rustc_parallelism": 0
},
{
"t": 9.561700215,
"active": 2,
"waiting": 3,
"inactive": 8,
"rustc_parallelism": 0
},
{
"t": 9.609235786,
"active": 2,
"waiting": 3,
"inactive": 8,
"rustc_parallelism": 0
},
{
"t": 9.616861777,
"active": 2,
"waiting": 2,
"inactive": 8,
"rustc_parallelism": 0
},
{
"t": 9.617160408,
"active": 2,
"waiting": 2,
"inactive": 8,
"rustc_parallelism": 0
},
{
"t": 9.737071825,
"active": 2,
"waiting": 1,
"inactive": 8,
"rustc_parallelism": 0
},
{
"t": 9.737993535,
"active": 2,
"waiting": 1,
"inactive": 8,
"rustc_parallelism": 0
},
{
"t": 10.158382362,
"active": 2,
"waiting": 2,
"inactive": 7,
"rustc_parallelism": 0
},
{
"t": 10.539120354,
"active": 2,
"waiting": 1,
"inactive": 7,
"rustc_parallelism": 0
},
{
"t": 10.539610468,
"active": 2,
"waiting": 1,
"inactive": 7,
"rustc_parallelism": 0
},
{
"t": 10.874938379,
"active": 2,
"waiting": 2,
"inactive": 6,
"rustc_parallelism": 0
},
{
"t": 10.98055049,
"active": 2,
"waiting": 1,
"inactive": 6,
"rustc_parallelism": 0
},
{
"t": 10.98169952,
"active": 2,
"waiting": 1,
"inactive": 6,
"rustc_parallelism": 0
},
{
"t": 11.481849681,
"active": 2,
"waiting": 1,
"inactive": 6,
"rustc_parallelism": 0
},
{
"t": 11.508932914,
"active": 2,
"waiting": 2,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 11.551862556,
"active": 2,
"waiting": 1,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 11.552247152,
"active": 2,
"waiting": 1,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 11.634311124,
"active": 2,
"waiting": 1,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 11.651876293,
"active": 2,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 11.652192549,
"active": 2,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.152316469,
"active": 2,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.373008078,
"active": 2,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462221141,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462369672,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.46238686,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.46240065,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462412067,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462423734,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462439143,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462450305,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462461644,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462472844,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462484281,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462495445,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462506886,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462517914,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462529075,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462540203,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462551392,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462562366,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462573395,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462584394,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462595576,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.46260657,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462617752,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462628645,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462639488,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462661965,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462697793,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462709261,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462721808,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462732686,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462744113,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462755103,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462765999,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462777086,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462787953,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.46279896,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.462811039,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 12.962936908,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 13.463221213,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 13.963503192,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 14.463742034,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 14.964039984,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 15.464315998,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 15.964850724,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 16.465169378,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 16.965422588,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 17.465710427,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 17.965970418,
"active": 1,
"waiting": 0,
"inactive": 5,
"rustc_parallelism": 0
},
{
"t": 18.146301544,
"active": 2,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 18.146942526,
"active": 2,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 18.52132692,
"active": 2,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 19.021558421,
"active": 2,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 19.451211992,
"active": 1,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 19.95169218,
"active": 1,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 20.451939379,
"active": 1,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 20.952239296,
"active": 1,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 21.452503388,
"active": 1,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 21.952756022,
"active": 1,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 22.453019397,
"active": 1,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 22.953285768,
"active": 1,
"waiting": 0,
"inactive": 4,
"rustc_parallelism": 0
},
{
"t": 23.439265628,
"active": 1,
"waiting": 0,
"inactive": 3,
"rustc_parallelism": 0
},
{
"t": 23.440004303,
"active": 1,
"waiting": 0,
"inactive": 3,
"rustc_parallelism": 0
},
{
"t": 23.940128649000002,
"active": 1,
"waiting": 0,
"inactive": 3,
"rustc_parallelism": 0
},
{
"t": 24.44043611,
"active": 1,
"waiting": 0,
"inactive": 3,
"rustc_parallelism": 0
},
{
"t": 24.940761282,
"active": 1,
"waiting": 0,
"inactive": 3,
"rustc_parallelism": 0
},
{
"t": 25.159216573,
"active": 1,
"waiting": 0,
"inactive": 2,
"rustc_parallelism": 0
},
{
"t": 25.159792615,
"active": 1,
"waiting": 0,
"inactive": 2,
"rustc_parallelism": 0
},
{
"t": 25.534052875,
"active": 1,
"waiting": 0,
"inactive": 2,
"rustc_parallelism": 0
},
{
"t": 25.917001739,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 25.918548894,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 26.418726984,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 26.919055001,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 27.41942124,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 27.91972289,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 28.420004632,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 28.920281145,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 29.420578495,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 29.920818623,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 30.421035166,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 30.921323316,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 31.421662343,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 31.921883848,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 32.422149859,
"active": 1,
"waiting": 0,
"inactive": 1,
"rustc_parallelism": 0
},
{
"t": 32.881544943,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 32.882952364,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 33.38313345,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 33.883403478,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 34.383676479,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 34.883940478,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 35.384269972,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 35.884548372,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 36.384814589,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 36.885088636,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 37.385336853,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 37.885611232,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 38.38589335,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 38.793797383,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 39.29400773,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 39.794264513,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 40.294516522,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 40.794784171,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 41.295053553,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 41.795303137,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 42.295561671,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 42.795873527,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 43.296242544,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 43.79661289,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 44.29687192,
"active": 1,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
},
{
"t": 44.365706993,
"active": 0,
"waiting": 0,
"inactive": 0,
"rustc_parallelism": 0
}
];
const CPU_USAGE = [
[
0.482857015,
98.50746268656717
],
[
0.983077344,
89.8989898989899
],
[
1.18207006,
100.0
],
[
1.295222554,
91.30434782608695
],
[
1.7900725419999999,
100.0
],
[
1.9833729249999998,
100.0
],
[
2.48414442,
99.0
],
[
2.750405319,
100.0
],
[
3.349278316,
100.0
],
[
3.6450871769999997,
100.0
],
[
3.965744575,
98.46153846153847
],
[
4.109282589,
100.0
],
[
4.236920697,
100.0
],
[
4.404317028,
100.0
],
[
4.5926470550000005,
100.0
],
[
4.822513584,
100.0
],
[
5.139782053,
100.0
],
[
5.267059583,
100.0
],
[
5.60362907,
98.52941176470588
],
[
5.900958215,
100.0
],
[
6.030774559,
100.0
],
[
6.183129822,
96.7741935483871
],
[
6.563865367,
100.0
],
[
6.854227467,
100.0
],
[
7.310507984,
100.0
],
[
7.8445634250000005,
100.0
],
[
8.2972916,
100.0
],
[
8.797480723,
100.0
],
[
9.29772325,
100.0
],
[
9.40840778,
95.23809523809524
],
[
9.561034165,
93.54838709677419
],
[
9.737073985,
100.0
],
[
10.158384009,
100.0
],
[
10.539120661,
100.0
],
[
10.87494,
100.0
],
[
10.98055094,
95.45454545454545
],
[
11.481850632,
100.0
],
[
11.634312647,
100.0
],
[
12.152320687,
100.0
],
[
12.37300858,
100.0
],
[
12.962937759999999,
57.758620689655174
],
[
13.463222337,
50.495049504950494
],
[
13.963504109,
49.494949494949495
],
[
14.463743138,
50.495049504950494
],
[
14.964041035,
49.494949494949495
],
[
15.464317083,
50.495049504950494
],
[
15.964851828,
50.495049504950494
],
[
16.465170494,
50.0
],
[
16.965423752,
50.0
],
[
17.465711285,
50.0
],
[
17.965971598,
50.0
],
[
18.146302212,
48.57142857142858
],
[
18.521328669,
100.0
],
[
19.021559774,
100.0
],
[
19.451212355,
100.0
],
[
19.951693627,
99.0
],
[
20.451940324,
100.0
],
[
20.952240107,
100.0
],
[
21.452504402,
100.0
],
[
21.952757265,
99.0
],
[
22.453020419,
100.0
],
[
22.953286939,
100.0
],
[
23.43926598,
82.47422680412372
],
[
23.940130619,
66.0
],
[
24.440437131,
66.0
],
[
24.940762797,
50.0
],
[
25.159216939,
51.162790697674424
],
[
25.534054618,
49.33333333333333
],
[
25.917002603,
89.33333333333333
],
[
26.418728248,
50.0
],
[
26.919056094,
50.495049504950494
],
[
27.419422416,
50.0
],
[
27.919724384,
50.0
],
[
28.420005902,
51.0
],
[
28.920282038,
90.9090909090909
],
[
29.420579439,
100.0
],
[
29.920819447,
100.0
],
[
30.421036165,
94.0
],
[
30.92132376,
94.94949494949495
],
[
31.421663551,
95.87628865979381
],
[
31.921884705,
59.0
],
[
32.422151291,
50.0
],
[
32.881545319,
50.53763440860215
],
[
33.383134413,
50.0
],
[
33.883404378,
54.0
],
[
34.383677679,
50.495049504950494
],
[
34.883941691,
50.0
],
[
35.384270959,
50.0
],
[
35.884549501,
50.495049504950494
],
[
36.384815698,
50.0
],
[
36.885089506,
49.494949494949495
],
[
37.385337781,
50.505050505050505
],
[
37.885612154,
50.0
],
[
38.385894394,
50.0
],
[
38.793797845,
55.55555555555556
],
[
39.294009038,
78.0
],
[
39.794265541,
100.0
],
[
40.294517406,
100.0
],
[
40.794785199,
99.0
],
[
41.29505449,
100.0
],
[
41.795304131,
100.0
],
[
42.295562169,
97.02970297029702
],
[
42.79587454,
100.0
],
[
43.296243532,
96.96969696969697
],
[
43.796613857,
92.63157894736842
],
[
44.29687289,
76.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, graph_width, canvas_width, canvas_height, px_per_sec} = draw_graph_axes('pipeline-graph', graph_height);
const container = document.getElementById('pipeline-container');
container.style.width = canvas_width;
container.style.height = canvas_height;
// Canvas for hover highlights. This is a separate layer to improve performance.
const linectx = setup_canvas('pipeline-graph-lines', canvas_width, canvas_height);
linectx.clearRect(0, 0, canvas_width, canvas_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';
const label = `${unit.name}${unit.target} ${unit.duration}s`;
const text_info = ctx.measureText(label);
const label_x = Math.min(x + 5.0, canvas_width - text_info.width - X_LINE);
ctx.fillText(label, label_x, 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 {canvas_width, 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);
}
const px_per_v = GRAPH_HEIGHT / max_v;
const {step, tick_dist, num_ticks} = split_ticks(max_v, px_per_v, GRAPH_HEIGHT);
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))
};
}
const cpuFillStyle = 'rgba(250, 119, 0, 0.2)';
if (CPU_USAGE.length > 1) {
ctx.beginPath();
ctx.fillStyle = cpuFillStyle;
let bottomLeft = coord(CPU_USAGE[0][0], 0);
ctx.moveTo(bottomLeft.x, bottomLeft.y);
for (let i=0; i < CPU_USAGE.length; i++) {
let [time, usage] = CPU_USAGE[i];
let {x, y} = coord(time, usage / 100.0 * max_v);
ctx.lineTo(x, y);
}
let bottomRight = coord(CPU_USAGE[CPU_USAGE.length - 1][0], 0);
ctx.lineTo(bottomRight.x, bottomRight.y);
ctx.fill();
}
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(canvas_width-200, MARGIN);
// background
ctx.fillStyle = '#fff';
ctx.strokeStyle = '#000';
ctx.lineWidth = 1;
ctx.textBaseline = 'middle'
ctx.textAlign = 'start';
ctx.beginPath();
ctx.rect(0, 0, 150, 82);
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.beginPath();
ctx.fillStyle = cpuFillStyle
ctx.fillRect(15, 60, 30, 15);
ctx.fill();
ctx.fillStyle = 'black';
ctx.fillText('CPU Usage', 54, 71);
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 scale = document.getElementById('scale').valueAsNumber;
// Cap the size of the graph. It is hard to view if it is too large, and
// browsers may not render a large graph because it takes too much memory.
// 4096 is still ridiculously large, and probably won't render on mobile
// browsers, but should be ok for many desktop environments.
const graph_width = Math.min(scale * DURATION, 4096);
const px_per_sec = graph_width / DURATION;
const canvas_width = Math.max(graph_width + X_LINE + 30, X_LINE + 250);
const canvas_height = graph_height + MARGIN + Y_LINE;
let ctx = setup_canvas(id, canvas_width, canvas_height);
ctx.fillStyle = '#f7f7f7';
ctx.fillRect(0, 0, canvas_width, canvas_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 {step, tick_dist, num_ticks} = split_ticks(DURATION, px_per_sec, graph_width);
ctx.fillStyle = '#303030';
for (let n=0; n<num_ticks; n++) {
const x = X_LINE + ((n + 1) * tick_dist);
ctx.beginPath();
ctx.moveTo(x, canvas_height-Y_LINE);
ctx.lineTo(x, canvas_height-Y_LINE+5);
ctx.stroke();
ctx.fillText(`${(n+1) * step}s`, x, canvas_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 {canvas_width, canvas_height, graph_width, graph_height, ctx, px_per_sec};
}
// Determine the spacing and number of ticks along an axis.
function split_ticks(max_value, px_per_v, max_px) {
const max_ticks = Math.floor(max_px / MIN_TICK_DIST);
if (max_ticks <= 1) {
// Graph is too small for even 1 tick.
return {step: max_value, tick_dist: max_px, num_ticks: 1};
}
let step;
if (max_value <= max_ticks) {
step = 1;
} else if (max_value <= max_ticks * 2) {
step = 2;
} else if (max_value <= max_ticks * 4) {
step = 4;
} else if (max_value <= max_ticks * 5) {
step = 5;
} else {
step = 10;
let count = 0;
while (true) {
if (count > 100) {
throw Error("tick loop too long");
}
count += 1;
if (max_value <= max_ticks * step) {
break;
}
step += 10;
}
}
const tick_dist = px_per_v * step;
const num_ticks = Math.floor(max_value / step);
return {step, tick_dist, num_ticks};
}
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