fix(coding-agent): preserve extension timing measurements
This commit is contained in:
@@ -4,28 +4,47 @@
|
||||
*/
|
||||
|
||||
const ENABLED = process.env.PI_TIMING === "1";
|
||||
const timings: Array<{ label: string; ms: number }> = [];
|
||||
let lastTime = Date.now();
|
||||
|
||||
export function resetTimings(): void {
|
||||
if (!ENABLED) return;
|
||||
timings.length = 0;
|
||||
lastTime = Date.now();
|
||||
interface TimingNamespace {
|
||||
timings: Array<{ label: string; ms: number }>;
|
||||
lastTime: number;
|
||||
}
|
||||
|
||||
export function time(label: string): void {
|
||||
type TimingLabel = "main" | "extensions";
|
||||
|
||||
const timingNamespaces = new Map<TimingLabel, TimingNamespace>();
|
||||
|
||||
export function resetTimings(namespace: TimingLabel = "main"): void {
|
||||
if (!ENABLED) return;
|
||||
timingNamespaces.set(namespace, { timings: [], lastTime: Date.now() });
|
||||
}
|
||||
|
||||
export function time(label: string, namespace: TimingLabel = "main"): void {
|
||||
if (!ENABLED) return;
|
||||
const now = Date.now();
|
||||
timings.push({ label, ms: now - lastTime });
|
||||
lastTime = now;
|
||||
|
||||
if (!timingNamespaces.has(namespace)) {
|
||||
resetTimings(namespace);
|
||||
}
|
||||
|
||||
const timingNamespace = timingNamespaces.get(namespace)!;
|
||||
timingNamespace.timings.push({ label, ms: now - timingNamespace.lastTime });
|
||||
timingNamespace.lastTime = now;
|
||||
}
|
||||
|
||||
function printTimingGroup(title: string, timings: TimingNamespace["timings"]): void {
|
||||
const printableTimings = timings.filter((timing) => timing.ms >= 0);
|
||||
if (printableTimings.length === 0) return;
|
||||
console.error(`\n--- ${title} ---`);
|
||||
for (const t of printableTimings) {
|
||||
console.error(` ${t.label}: ${t.ms}ms`);
|
||||
}
|
||||
console.error(` TOTAL: ${printableTimings.reduce((a, b) => a + b.ms, 0)}ms`);
|
||||
console.error(`${"-".repeat(title.length + 8)}\n`);
|
||||
}
|
||||
|
||||
export function printTimings(): void {
|
||||
if (!ENABLED || timings.length === 0) return;
|
||||
console.error("\n--- Startup Timings ---");
|
||||
for (const t of timings) {
|
||||
console.error(` ${t.label}: ${t.ms}ms`);
|
||||
if (!ENABLED) return;
|
||||
for (const [namespace, timingNamespace] of timingNamespaces) {
|
||||
printTimingGroup(`Startup Timings: ${namespace}`, timingNamespace.timings);
|
||||
}
|
||||
console.error(` TOTAL: ${timings.reduce((a, b) => a + b.ms, 0)}ms`);
|
||||
console.error("------------------------\n");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user