Unified · Split
| @@ -4,7 +4,7 @@ import os from "node:os"; · 3 unmodified lines | |||
| 4 | import path from "node:path"; | 4 | import path from "node:path"; |
| 5 | 5 | ||
| 6 | import { BrowserWindow, contentTracing, type WebContents } from "electron"; | 6 | import { BrowserWindow, contentTracing, type WebContents } from "electron"; |
| 7 | import { shouldRunTerminalPerfInteractions } from "./perfConfig"; | 7 | import { resolveBenchmarkFollowUpPassCount, shouldRunTerminalPerfInteractions } from "./perfConfig"; |
| 8 | 8 | ||
| 9 | const PERF_AUTOMATION_ENABLED = process.env.T3CODE_DESKTOP_PERF_AUTOMATION === "1"; | 9 | const PERF_AUTOMATION_ENABLED = process.env.T3CODE_DESKTOP_PERF_AUTOMATION === "1"; |
| 10 | const PERF_TRACE_OUT_PATH = process.env.T3CODE_DESKTOP_PERF_TRACE_OUT?.trim() ?? ""; | 10 | const PERF_TRACE_OUT_PATH = process.env.T3CODE_DESKTOP_PERF_TRACE_OUT?.trim() ?? ""; |
| @@ -14,16 +14,11 @@ const RUN_TERMINAL_INTERACTIONS = shouldRunTerminalPerfInteractions({ · 3 unmodified lines | |||
| 14 | T3CODE_DESKTOP_PERF_RUN_TERMINAL: process.env.T3CODE_DESKTOP_PERF_RUN_TERMINAL, | 14 | T3CODE_DESKTOP_PERF_RUN_TERMINAL: process.env.T3CODE_DESKTOP_PERF_RUN_TERMINAL, |
| 15 | CI: process.env.CI, | 15 | CI: process.env.CI, |
| 16 | }); | 16 | }); |
| 17 | const BENCHMARK_FOLLOW_UP_PASS_COUNT = (() => { | 17 | const BENCHMARK_FOLLOW_UP_PASS_COUNT = resolveBenchmarkFollowUpPassCount({ |
| 18 | const raw = process.env.T3CODE_DESKTOP_PERF_BENCHMARK_FOLLOW_UP_PASSES?.trim(); | 18 | T3CODE_DESKTOP_PERF_BENCHMARK_FOLLOW_UP_PASSES: |
| 19 | if (raw && raw.length > 0) { | 19 | process.env.T3CODE_DESKTOP_PERF_BENCHMARK_FOLLOW_UP_PASSES, |
| 20 | const parsed = Number.parseInt(raw, 10); | 20 | CI: process.env.CI, |
| 21 | if (Number.isFinite(parsed) && parsed >= 0) { | 21 | }); |
| 22 | return parsed; | ||
| 23 | } | ||
| 24 | } | ||
| 25 | return process.env.CI === "true" ? 0 : 1; | ||
| 26 | })(); | ||
| 27 | 22 | ||
| 28 | function delay(ms: number): Promise<void> { | 23 | function delay(ms: number): Promise<void> { |
| 29 | return new Promise((resolve) => setTimeout(resolve, ms)); | 24 | return new Promise((resolve) => setTimeout(resolve, ms)); |
| @@ -1,6 +1,6 @@ | |||
| 1 | import { describe, expect, it } from "vitest"; | 1 | import { describe, expect, it } from "vitest"; |
| 2 | 2 | ||
| 3 | import { shouldRunTerminalPerfInteractions } from "./perfConfig"; | 3 | import { resolveBenchmarkFollowUpPassCount, shouldRunTerminalPerfInteractions } from "./perfConfig"; |
| 4 | 4 | ||
| 5 | describe("shouldRunTerminalPerfInteractions", () => { | 5 | describe("shouldRunTerminalPerfInteractions", () => { |
| 6 | it("defaults to enabled outside CI when env is unset", () => { | 6 | it("defaults to enabled outside CI when env is unset", () => { |
| @@ -130,3 +130,45 @@ describe("shouldRunTerminalPerfInteractions", () => { · 123 unmodified lines | |||
| 130 | ).toBe(true); | 130 | ).toBe(true); |
| 131 | }); | 131 | }); |
| 132 | }); | 132 | }); |
| 133 | |||
| 134 | describe("resolveBenchmarkFollowUpPassCount", () => { | ||
| 135 | it("defaults to 1 outside CI", () => { | ||
| 136 | expect(resolveBenchmarkFollowUpPassCount({ CI: "false" })).toBe(1); | ||
| 137 | expect(resolveBenchmarkFollowUpPassCount({ CI: "0" })).toBe(1); | ||
| 138 | }); | ||
| 139 | |||
| 140 | it("defaults to 0 in CI", () => { | ||
| 141 | expect(resolveBenchmarkFollowUpPassCount({ CI: "true" })).toBe(0); | ||
| 142 | expect(resolveBenchmarkFollowUpPassCount({ CI: "on" })).toBe(0); | ||
| 143 | }); | ||
| 144 | |||
| 145 | it("accepts explicit non-negative integer overrides", () => { | ||
| 146 | expect( | ||
| 147 | resolveBenchmarkFollowUpPassCount({ | ||
| 148 | T3CODE_DESKTOP_PERF_BENCHMARK_FOLLOW_UP_PASSES: "2", | ||
| 149 | CI: "true", | ||
| 150 | }), | ||
| 151 | ).toBe(2); | ||
| 152 | expect( | ||
| 153 | resolveBenchmarkFollowUpPassCount({ | ||
| 154 | T3CODE_DESKTOP_PERF_BENCHMARK_FOLLOW_UP_PASSES: " 0 ", | ||
| 155 | CI: "false", | ||
| 156 | }), | ||
| 157 | ).toBe(0); | ||
| 158 | }); | ||
| 159 | |||
| 160 | it("ignores malformed overrides and falls back to CI default", () => { | ||
| 161 | expect( | ||
| 162 | resolveBenchmarkFollowUpPassCount({ | ||
| 163 | T3CODE_DESKTOP_PERF_BENCHMARK_FOLLOW_UP_PASSES: "1abc", | ||
| 164 | CI: "true", | ||
| 165 | }), | ||
| 166 | ).toBe(0); | ||
| 167 | expect( | ||
| 168 | resolveBenchmarkFollowUpPassCount({ | ||
| 169 | T3CODE_DESKTOP_PERF_BENCHMARK_FOLLOW_UP_PASSES: "-1", | ||
| 170 | CI: "false", | ||
| 171 | }), | ||
| 172 | ).toBe(1); | ||
| 173 | }); | ||
| 174 | }); | ||
| @@ -3,6 +3,11 @@ type PerfToggleEnv = { · 2 unmodified lines | |||
| 3 | CI?: string | undefined; | 3 | CI?: string | undefined; |
| 4 | }; | 4 | }; |
| 5 | 5 | ||
| 6 | type PerfBenchmarkEnv = { | ||
| 7 | T3CODE_DESKTOP_PERF_BENCHMARK_FOLLOW_UP_PASSES?: string | undefined; | ||
| 8 | CI?: string | undefined; | ||
| 9 | }; | ||
| 10 | |||
| 6 | const TRUE_VALUES = new Set(["1", "true", "yes", "on"]); | 11 | const TRUE_VALUES = new Set(["1", "true", "yes", "on"]); |
| 7 | const FALSE_VALUES = new Set(["0", "false", "no", "off"]); | 12 | const FALSE_VALUES = new Set(["0", "false", "no", "off"]); |
| 8 | 13 | ||
| @@ -34,3 +39,11 @@ export function shouldRunTerminalPerfInteractions(env: PerfToggleEnv): boolean { · 25 unmodified lines | |||
| 34 | if (toggleOverride !== null) return toggleOverride; | 39 | if (toggleOverride !== null) return toggleOverride; |
| 35 | return !isCiEnvironment(env.CI); | 40 | return !isCiEnvironment(env.CI); |
| 36 | } | 41 | } |
| 42 | |||
| 43 | export function resolveBenchmarkFollowUpPassCount(env: PerfBenchmarkEnv): number { | ||
| 44 | const raw = env.T3CODE_DESKTOP_PERF_BENCHMARK_FOLLOW_UP_PASSES?.trim(); | ||
| 45 | if (raw && /^\d+$/.test(raw)) { | ||
| 46 | return Number.parseInt(raw, 10); | ||
| 47 | } | ||
| 48 | return isCiEnvironment(env.CI) ? 0 : 1; | ||
| 49 | } | ||