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
70 return bytes / (1024 * 1024);70 return bytes / (1024 * 1024);
71}71}
72 72
73function 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
87function 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
101function 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
73function summarizeTrace(tracePath) {121function summarizeTrace(tracePath) {
74 const payload = JSON.parse(fs.readFileSync(tracePath, "utf8"));122 const payload = JSON.parse(fs.readFileSync(tracePath, "utf8"));
75 const events = payload.traceEvents;123 const events = payload.traceEvents;
@@ -616,10 +664,26 @@ async function main() { · 540 unmodified lines
616 }664 }
617 prepareDesktopPerfState(stateDir, seedProjects ?? defaultPerfProjects);665 prepareDesktopPerfState(stateDir, seedProjects ?? defaultPerfProjects);
618 666
619 const maxKeypressAvgMs = Number(process.env.T3CODE_PERF_MAX_KEYPRESS_AVG_MS ?? "12");667 const maxKeypressAvgMs = resolveNonNegativeNumberEnv({
620 const maxKeypressMaxMs = Number(process.env.T3CODE_PERF_MAX_KEYPRESS_MAX_MS ?? "24");668 name: "T3CODE_PERF_MAX_KEYPRESS_AVG_MS",
621 const maxLongDispatchCount = Number(process.env.T3CODE_PERF_MAX_LONG_DISPATCH_COUNT ?? "0");669 value: process.env.T3CODE_PERF_MAX_KEYPRESS_AVG_MS,
622 const timeoutMs = Number(process.env.T3CODE_PERF_TIMEOUT_MS ?? "420000");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 });
623 687
624 const child = spawn("bun", ["dev:desktop"], {688 const child = spawn("bun", ["dev:desktop"], {
625 cwd: repoRoot,689 cwd: repoRoot,