| |
| |
| |
| |
| |
|
|
| import { readFileSync, writeFileSync, existsSync } from 'node:fs'; |
|
|
| |
| |
| |
| export interface MemoryBaseline { |
| heapUsedMB: number; |
| heapTotalMB: number; |
| rssMB: number; |
| externalMB: number; |
| timestamp: string; |
| } |
|
|
| |
| |
| |
| export interface MemoryBaselineFile { |
| version: number; |
| updatedAt: string; |
| scenarios: Record<string, MemoryBaseline>; |
| } |
|
|
| |
| |
| |
| |
| export function loadBaselines(path: string): MemoryBaselineFile { |
| if (!existsSync(path)) { |
| return { |
| version: 1, |
| updatedAt: new Date().toISOString(), |
| scenarios: {}, |
| }; |
| } |
|
|
| const content = readFileSync(path, 'utf-8'); |
| return JSON.parse(content) as MemoryBaselineFile; |
| } |
|
|
| |
| |
| |
| export function saveBaselines( |
| path: string, |
| baselines: MemoryBaselineFile, |
| ): void { |
| baselines.updatedAt = new Date().toISOString(); |
| writeFileSync(path, JSON.stringify(baselines, null, 2) + '\n'); |
| } |
|
|
| |
| |
| |
| export function updateBaseline( |
| path: string, |
| scenarioName: string, |
| measured: { |
| heapUsedMB: number; |
| heapTotalMB: number; |
| rssMB: number; |
| externalMB: number; |
| }, |
| ): void { |
| const baselines = loadBaselines(path); |
| baselines.scenarios[scenarioName] = { |
| heapUsedMB: measured.heapUsedMB, |
| heapTotalMB: measured.heapTotalMB, |
| rssMB: measured.rssMB, |
| externalMB: measured.externalMB, |
| timestamp: new Date().toISOString(), |
| }; |
| saveBaselines(path, baselines); |
| } |
|
|