FPS ログ解析(PresentMon CSV)|平均・1% Low・フレーム時間のグラフ
PresentMon の CSV を入れると、平均 FPS・1% Low・フレーム時間のグラフとヒストグラムが出ます。2 つのログの比較もできます。ログは端末の外に送りません。
ログは Windows の PC で記録します。CSV はどの端末でも開けますが、大きなファイルは PC のほうが向いています。
読み込み中…(JavaScript が必要です)
使い方
- PresentMon(公式リポジトリ)でログを記録します。記録を始め、同じ場面をしばらく(例: 60 秒)遊んでから止めると、CSV が書き出されます。コンソール版のほか、書き出せる画面つきのツールでも構いません。MsBetweenPresents の列がある CapFrameX の CSV も読めます。
- CSV を上の枠にドロップ(または選択)します。初版は PresentMon の CSV だけに対応し、1 行目に
FrameTime(PresentMon 2.x)かMsBetweenPresents(PresentMon 1.x)の列が必要です。ほかのファイルは理由つきで断ります。 - ログに複数のアプリが入っているときは、フレーム数の多いものが最初に選ばれます。リストで切り替えられます。
- 比べるときは、2 つめのログ(同じ場面・同じ長さ)を足します。表に B−A と割合が出て、グラフは重ねて表示されます。
- ゲーム・解像度・画質設定などのラベルを付けて「このPCに保存」もできます。保存するのは数字と小さなグラフだけで、CSV そのものは保存しません。
パーツぐらしでセンサーも記録したときは、その実行の ID と開始時刻を入れると、実行ビューアーでセンサーの時間軸に重ねられます。
計算例
例(数字はすべて例): 6,000 フレーム・60 秒のログは平均 100 FPS です。いちばん遅い 1% は 60 フレームで、その平均が 20 ms なら 1% Low は 1000 ÷ 20 = 50 FPS。フレーム時間の中央値が 9.8 ms なら、19.6 ms を超えるフレームがスタッターに数えられます。
数字の意味
- 平均 FPS = フレーム数 ÷ 合計時間。
- 1% Low / 0.1% Low = いちばん遅い 1%(0.1%)のフレーム時間の平均を FPS にした値。ツールによって「99 パーセンタイルのフレーム時間」を使うものもあり、定義が違うと数字が合いません。比べるときは定義をそろえてください。
- フレーム時間の中央値 = 真ん中の値。平均より、まれな長いフレームの影響を受けにくい。
- スタッター = 中央値の 2 倍より長いフレーム。「引っかかりに見えるフレーム」の単純な目安で、体感の判定ではありません。
判定の限界
- 読むのは「描画(Present)の間隔」です。入力の遅れや、モニターに実際に表示された内容は測りません。
- 場面・ドライバー・裏で動くソフト・記録の長さで数字は変わります。同じ場面のログどうしを比べ、1 回の記録だけで決めないでください。
- グラフは画面に収まるよう間引いています。数字はすべて全フレームから出しています。
- フレーム時間が空、または 0 以下の行は飛ばします(飛ばした数を表示)。CSV に実際の日時は入っていません。重ね合わせに使う開始時刻はファイルの更新日時からの推定で、数秒以上ずれることがあります。
- 非常に大きなファイル(数百 MB)も、裏の Worker で少しずつ読みます。ただしフレーム時間を持つ分のメモリ(1 フレーム約 16 バイト=時間と時刻の 2 列。配列を伸ばす間は最大で約 3 倍。上限の 2 千万フレームで約 0.6 GB)は要ります。
- ログは送りません。読み込みも計算も保存も、このブラウザの中だけです。サイトのデータを消すと保存した結果も消えるので、道具箱のバックアップを使ってください。
入力した値と結果は、この端末のブラウザの中だけで扱います。サーバーには送りません。