History

Harden desktop perf env threshold parsing

Cursor Agent committed 9 months ago

Commit 87aa2d61 parent 5d9bade1 file · +68 −4Browse files

Showing the changes to scripts (1 of 1 file). Show all

Unified · Split

scripts/desktop-perf-trace.mjs+68−4
@@ -70,6 +70,54 @@ function mb(bytes) { · 69 unmodified lines
7070 return bytes / (1024 * 1024);
7171 }
7272
73+function resolveNonNegativeNumberEnv({ name, value, fallback }) {
74+ if (typeof value !== "string") {
75+ return fallback;
76+ }
77+ const parsed = Number(value);
78+ if (Number.isFinite(parsed) && parsed >= 0) {
79+ return parsed;
80+ }
81+ console.warn(
82+ `[desktop-perf] invalid ${name}="${value}" (expected non-negative number); using ${fallback}`,
83+ );
84+ return fallback;
85+}
86+
87+function resolveNonNegativeIntegerEnv({ name, value, fallback }) {
88+ const parsed = resolveNonNegativeNumberEnv({ name, value, fallback });
89+ if (parsed === fallback) {
90+ return fallback;
91+ }
92+ const normalized = Math.trunc(parsed);
93+ if (normalized !== parsed) {
94+ console.warn(
95+ `[desktop-perf] non-integer ${name}="${value}" truncated to ${normalized} for consistency`,
96+ );
97+ }
98+ return normalized;
99+}
100+
101+function resolvePositiveIntegerEnv({ name, value, fallback }) {
102+ if (typeof value !== "string") {
103+ return fallback;
104+ }
105+ const parsed = Number(value);
106+ if (Number.isFinite(parsed) && parsed > 0) {
107+ const normalized = Math.trunc(parsed);
108+ if (normalized !== parsed) {
109+ console.warn(
110+ `[desktop-perf] non-integer ${name}="${value}" truncated to ${normalized} for consistency`,
111+ );
112+ }
113+ return normalized;
114+ }
115+ console.warn(
116+ `[desktop-perf] invalid ${name}="${value}" (expected positive number); using ${fallback}`,
117+ );
118+ return fallback;
119+}
120+
73121 function summarizeTrace(tracePath) {
74122 const payload = JSON.parse(fs.readFileSync(tracePath, "utf8"));
75123 const events = payload.traceEvents;
@@ -616,10 +664,26 @@ async function main() { · 540 unmodified lines
616664 }
617665 prepareDesktopPerfState(stateDir, seedProjects ?? defaultPerfProjects);
618666
619− const maxKeypressAvgMs = Number(process.env.T3CODE_PERF_MAX_KEYPRESS_AVG_MS ?? "12");
620− const maxKeypressMaxMs = Number(process.env.T3CODE_PERF_MAX_KEYPRESS_MAX_MS ?? "24");
621− const maxLongDispatchCount = Number(process.env.T3CODE_PERF_MAX_LONG_DISPATCH_COUNT ?? "0");
622− const timeoutMs = Number(process.env.T3CODE_PERF_TIMEOUT_MS ?? "420000");
667+ const maxKeypressAvgMs = resolveNonNegativeNumberEnv({
668+ name: "T3CODE_PERF_MAX_KEYPRESS_AVG_MS",
669+ value: process.env.T3CODE_PERF_MAX_KEYPRESS_AVG_MS,
670+ fallback: 12,
671+ });
672+ const maxKeypressMaxMs = resolveNonNegativeNumberEnv({
673+ name: "T3CODE_PERF_MAX_KEYPRESS_MAX_MS",
674+ value: process.env.T3CODE_PERF_MAX_KEYPRESS_MAX_MS,
675+ fallback: 24,
676+ });
677+ const maxLongDispatchCount = resolveNonNegativeIntegerEnv({
678+ name: "T3CODE_PERF_MAX_LONG_DISPATCH_COUNT",
679+ value: process.env.T3CODE_PERF_MAX_LONG_DISPATCH_COUNT,
680+ fallback: 0,
681+ });
682+ const timeoutMs = resolvePositiveIntegerEnv({
683+ name: "T3CODE_PERF_TIMEOUT_MS",
684+ value: process.env.T3CODE_PERF_TIMEOUT_MS,
685+ fallback: 420000,
686+ });
623687
624688 const child = spawn("bun", ["dev:desktop"], {
625689 cwd: repoRoot,