Skip to main content

Module perf

Module perf 

Source
Expand description

ページ読み込み経路の軽量プロファイラ。

§なぜ作ったか

【2026-08-05】1 箇所ずつ計装しては実機で確かめ、外しては確かめ……を 繰り返していた。実機 1 回が数分かかるので、これでは終わらない。 関連する関数に一斉に計測点を置き、1 回の実行で全部見るための道具。

§使い方

let t = perf::start();
...測りたい処理...
perf::add(perf::Slot::TlsHandshake, t);

集計は perf::dump() が 1 行で出す。

§設計

  • 固定スロット(enum Slot)と固定長配列。確保しない
  • 加算は AtomicU32 1 回。ただし get_ticks()2 回呼ぶ (startadd)。熱経路では効く (実測: 1 パケットごとに置いたら受信待ちが 2 倍になった)。 1 パケット・1 フレーム・1 要素ごとの計測は調査中だけにして、 目的を果たしたら外し、外した状態で測り直すこと
  • tick 単位(10ms)。それより細かい対象には使わない

計測点を増やすときは Slot に足して NAMES にも足す。 両方を 1 箇所で持つので、名前と実体がずれない。

Structs§

Guard
スコープを抜けるときに自動で加算するガード。

Enums§

Slot
計測点。増やすときは NAMES にも同じ順で足すこと。

Constants§

NAMES 🔒
表示名。Slot と同じ順。
SLOT_COUNT
スロット数。Slot の要素数と一致させる。
ZERO 🔒

Statics§

CALLS 🔒
TICKS 🔒

Functions§

add
start() からの経過を加算する。
dump
全スロットを 1 行で出す。
snapshot
集計値を (名前, tick, 回数) で取り出す(試験用にも使う)。
start
計測開始。戻り値をそのまま add へ渡す。