Skip to content

Commit c901052

Browse files
authored
Add warmup and step delay to developer UI (#323)
Drive-by-fix: - Move the more frequently used iteration count to the top - Move warmupSuite and warmup-delay closer together
1 parent 899c113 commit c901052

File tree

2 files changed

+88
-39
lines changed

2 files changed

+88
-39
lines changed

resources/developer-mode.mjs

Lines changed: 71 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,19 @@ export function createDeveloperModeContainer() {
1212

1313
const content = document.createElement("div");
1414
content.className = "developer-mode-content";
15+
1516
content.append(createUIForSuites());
1617

18+
const settings = document.createElement("div");
19+
settings.className = "settings";
20+
settings.append(createUIForIterationCount());
21+
settings.append(createUIForMeasurementMethod());
22+
settings.append(createUIForWarmupSuite());
23+
settings.append(createUIForWarmupBeforeSync());
24+
settings.append(createUIForSyncStepDelay());
25+
1726
content.append(document.createElement("hr"));
18-
content.append(createUIForMeasurementMethod());
19-
content.append(document.createElement("br"));
20-
content.append(createUIForWarmupSuite());
21-
content.append(document.createElement("br"));
22-
content.append(createUIForIterationCount());
27+
content.append(settings);
2328

2429
content.append(document.createElement("hr"));
2530
content.append(createUIForRun());
@@ -29,7 +34,13 @@ export function createDeveloperModeContainer() {
2934
return container;
3035
}
3136

32-
export function createUIForMeasurementMethod() {
37+
function span(text) {
38+
const span = document.createElement("span");
39+
span.textContent = text;
40+
return span;
41+
}
42+
43+
function createUIForMeasurementMethod() {
3344
let check = document.createElement("input");
3445
check.type = "checkbox";
3546
check.id = "measurement-method";
@@ -41,12 +52,12 @@ export function createUIForMeasurementMethod() {
4152
};
4253

4354
let label = document.createElement("label");
44-
label.append(check, " ", "rAF timing");
55+
label.append(check, " ", span("rAF timing"));
4556

4657
return label;
4758
}
4859

49-
export function createUIForWarmupSuite() {
60+
function createUIForWarmupSuite() {
5061
let check = document.createElement("input");
5162
check.type = "checkbox";
5263
check.id = "warmup-suite";
@@ -58,38 +69,65 @@ export function createUIForWarmupSuite() {
5869
};
5970

6071
let label = document.createElement("label");
61-
label.append(check, " ", "warmup suite");
72+
label.append(check, " ", span("Use Warmup Suite"));
6273

6374
return label;
6475
}
6576

66-
export function createUIForIterationCount() {
67-
let range = document.createElement("input");
68-
range.type = "range";
69-
range.id = "iteration-count";
70-
range.min = 1;
71-
range.max = 20;
72-
range.value = params.iterationCount;
73-
74-
let label = document.createElement("label");
75-
let countLabel = document.createElement("span");
76-
countLabel.textContent = params.iterationCount;
77-
label.append("iterations: ", countLabel, document.createElement("br"), range);
78-
79-
range.oninput = () => {
80-
countLabel.textContent = range.value;
77+
function createUIForIterationCount() {
78+
const { range, label } = createTimeRangeUI("Iterations: ", params.iterationCount, "#", 1, 200);
79+
range.onchange = () => {
80+
params.iterationCount = parseInt(range.value);
81+
updateURL();
8182
};
83+
return label;
84+
}
8285

86+
function createUIForWarmupBeforeSync() {
87+
const { range, label } = createTimeRangeUI("Warmup time: ", params.warmupBeforeSync);
8388
range.onchange = () => {
84-
params.iterationCount = parseInt(range.value);
89+
params.warmupBeforeSync = parseInt(range.value);
8590
updateURL();
8691
};
92+
return label;
93+
}
8794

95+
function createUIForSyncStepDelay() {
96+
const { range, label } = createTimeRangeUI("Sync step delay: ", params.waitBeforeSync);
97+
range.onchange = () => {
98+
params.waitBeforeSync = parseInt(range.value);
99+
updateURL();
100+
};
88101
return label;
89102
}
90103

91-
export function createUIForSuites() {
104+
function createTimeRangeUI(labelText, initialValue, unit = "ms", min = 0, max = 1000) {
105+
const range = document.createElement("input");
106+
range.type = "range";
107+
range.min = min;
108+
range.max = max;
109+
range.value = initialValue;
110+
111+
const rangeValueAndUnit = document.createElement("span");
112+
rangeValueAndUnit.className = "range-label-data";
113+
114+
const rangeValue = document.createElement("span");
115+
rangeValue.textContent = initialValue;
116+
rangeValueAndUnit.append(rangeValue, " ", unit);
117+
118+
const label = document.createElement("label");
119+
label.append(span(labelText), range, rangeValueAndUnit);
120+
121+
range.oninput = () => {
122+
rangeValue.textContent = range.value;
123+
};
124+
125+
return { range, label };
126+
}
127+
128+
function createUIForSuites() {
92129
const control = document.createElement("nav");
130+
control.className = "suites";
93131
const ol = document.createElement("ol");
94132
const checkboxes = [];
95133
const setSuiteEnabled = (suiteIndex, enabled) => {
@@ -235,15 +273,13 @@ function updateURL() {
235273
else
236274
url.searchParams.delete("measurementMethod");
237275

238-
if (params.iterationCount !== defaultParams.iterationCount)
239-
url.searchParams.set("iterationCount", params.iterationCount);
240-
else
241-
url.searchParams.delete("iterationCount");
242-
243-
if (params.useWarmupSuite !== defaultParams.useWarmupSuite)
244-
url.searchParams.set("useWarmupSuite", params.useWarmupSuite);
245-
else
246-
url.searchParams.delete("useWarmupSuite");
276+
const boolParamKeys = ["iterationCount", "useWarmupSuite", "warmupBeforeSync", "waitBeforeSync"];
277+
for (const paramKey of boolParamKeys) {
278+
if (params[paramKey] !== defaultParams[paramKey])
279+
url.searchParams.set(paramKey, params[paramKey]);
280+
else
281+
url.searchParams.delete(paramKey);
282+
}
247283

248284
// Only push state if changed
249285
url.search = decodeURIComponent(url.search);

resources/main.css

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,23 @@ button,
249249
gap: 3px;
250250
}
251251

252+
.developer-mode-content .settings label {
253+
width: 100%;
254+
display: flex;
255+
}
256+
.developer-mode-content .settings label * {
257+
flex: 1;
258+
}
259+
.developer-mode-content .settings input[type="checkbox"] {
260+
flex: 0;
261+
margin-left: 0px;
262+
}
263+
.developer-mode-content .settings .range-label-data {
264+
flex: 0;
265+
min-width: 5em;
266+
text-align: right;
267+
}
268+
252269
.developer-mode-content li + li {
253270
margin-top: 0px;
254271
}
@@ -266,10 +283,6 @@ button,
266283
color: white;
267284
background: rgba(255, 255, 255, 0.1);
268285
}
269-
.developer-mode-content label {
270-
width: 100%;
271-
display: inline-block;
272-
}
273286
.developer-mode-content hr {
274287
width: initial;
275288
margin: 10px 0;

0 commit comments

Comments
 (0)