Skip to content

perf-baseline.json の取り扱い

perf-baseline.json.spec-workflow/specs/app-performance-optimization/ の改善目標を判定するための数値置き場です。CI / pre-push で参照する thresholds も同居します。

spec: app-performance-optimization

スキーマ

jsonc
{
  "version": 1,                      // 互換性が壊れたら +1
  "measuredAt": "ISO 8601 string",   // 最後に更新した日時
  "build": "control@<sha>",          // 計測時の commit / build 名
  "bundle": {
    "controlMainKb": 0,              // Control 主バンドル size (KB)
    "controlTotalKb": 0,             // Control 全体 (KB)
    "overlayKb": 0                   // Overlay singlefile (KB)
  },
  "startup": {
    "mainBootstrapMs": 0,            // electron/utils/perf.ts の main.bootstrap 中央値
    "controlFirstPaintMs": 0         // renderer first paint 中央値(手動 or perf util)
  },
  "tabSwitch": {
    "settings": 0,
    "realtime": 0,
    "db": 0,
    "player": 0,
    "browserAutomation": 0,
    "logAnalysis": 0
  },
  "thresholds": {
    "controlMainKb": 0,              // これを超えたらバンドル size チェッカが fail
    "mainBootstrapMs": 0,            // これを超えたら起動退化と判定
    "tabSwitchMaxMs": 0              // タブごとの上限
  }
}

再生成手順

一括計測(推奨)

sh
yarn perf:all

これは内部で:

  1. yarn build:electron-ts — main プロセスのトランスパイル
  2. yarn build — control / overlay / bp-opponent のレンダラビルド
  3. npx tsx scripts/perf/measure-bundle.tsdist/ のサイズを集計し bundle.controlMainKb / bundle.overlayKb / bundle.bpOpponentKb を更新
  4. npx tsx scripts/perf/measure-startup.ts — Electron を 5 回 cold-start し、 main の [perf] main.bootstrap=<ms> と renderer の [perf] control.firstPaint=<ms> の中央値を startup.mainBootstrapMs / startup.controlFirstPaintMs に書き込む

個別計測

sh
yarn perf:startup       # 起動時間のみ
yarn perf:bundle        # バンドルサイズのみ(事前に build 必要)
npx tsx scripts/perf/measure-startup.ts --runs 3
npx tsx scripts/perf/measure-startup.ts --labels main.bootstrap,control.firstPaint

タブ切替 TTI(現状は手動)

Control を yarn dev:electron で起動し React DevTools Profiler で 5 サンプル 取り、中央値を tabSwitch.<tab> へ手動で記入する。Playwright Electron による 自動化は別 spec(e2e-automation-tests)の範囲で行う想定。

値の意味

  • 計測時点で 0 のままのフィールドは「未計測」。Phase 0 完了後は全フィールドに非ゼロを入れる。
  • thresholds.* は spec の KPI(起動 -30% / バンドル -20% / TTI -30%)に従って Phase 0 終了時に確定する。
  • 値の更新は spec 内のタスク完了時のみ。原則として個別 PR で measuredAtbuild を必ず更新する。

関連ファイル

  • electron/utils/perf.ts / src/utils/perf.ts — 計測 API
  • scripts/perf/measure-startup.ts — 起動時間計測スクリプト
  • .spec-workflow/specs/app-performance-optimization/ — spec 本体