Microsoftは2026年9月30日(現地時間)、DirectX関連のETWイベントを自作ツールで扱うためのオープンソースC++ライブラリ「DxTimingCaptureLibrary」を公開しました。
ゲームエンジンのプロファイラーや性能解析ツールに、GPUのタイミング情報やビデオメモリのページング状況などを取り込めます。
ライブラリはMITライセンスで公開されており、Windows 10およびWindows 11で利用できます。
DxTimingCaptureLibraryとは
「DxTimingCaptureLibrary」は、DirectXに関するETW(Event Tracing for Windows)イベントを解析し、アプリケーションから扱いやすい形でイベント情報を提供するC++ライブラリです。
ソースコードとドキュメント、サンプルはGitHubのプロジェクトページで確認できます。
ETWはWindowsに組み込まれたイベント記録機能で、OSやアプリケーションの動作を比較的低いオーバーヘッドで収集できます。
一方、イベントの種類や記録内容を理解して生のログを解析するには、ETWやDirectXに関する知識が必要です。
本ライブラリはその解析処理を支援し、開発者が既存のツールやゲームエンジンの計測機能へDirectXの診断情報を組み込みやすくします。
PIXのTiming Captureに関連する機能を提供
Microsoftによると、ライブラリはDirectX向けのデバッグ・性能解析ツール「PIX」にある「Timing Capture」関連のコードを独立させたものです。
PIXのTiming Captureで確認できるDirectX関連のデータを、独自の解析環境でも取得できるようにすることが主な狙いです。
PIXそのものを置き換えるというより、同種のデータを外部ツールやゲームエンジンの内部で利用するための選択肢と考えられます。
取得できる主なイベント情報
ライブラリが扱うのはGPUの処理時間だけではなく、リソースの作成やメモリ移動、ランタイムのエラーなど、DirectXアプリケーションの動作を幅広く捉える情報です。
| イベントの種類 | 把握できる内容 |
|---|---|
| GPUのタイミング | コマンドリストの処理に関連するパイプライン開始・終了時点のタイムスタンプ |
| APIオブジェクト | オブジェクトの作成・破棄時刻、サイズ、パラメーター、デバッグ名など |
| 常駐・ページング | リソースがビデオメモリとシステムメモリの間を移動した時点や、移行の失敗 |
| DirectStorage | 読み取りや状態に関する要求のイベント |
| ランタイム・コンパイル | D3Dランタイムのエラーや、パイプラインステートのコンパイルイベント |
| 表示・マーカー | モニターのVSync、WinPixEventRuntimeのCPU・GPUタイムラインやカスタムカウンター |
GPUのタイミングデータを利用すれば、コマンドリスト単位で処理の流れを調べ、負荷が集中している箇所を特定する手掛かりになります。
ただし、タイムスタンプは計測の材料であり、それだけで処理の遅さの原因を確定できるものではありません。
CPU側の処理や同期、描画内容、ドライバーの挙動などと照らし合わせて分析することで、より適切な判断につながります。
VRAMの使用状況やリソース移動を追跡
常駐・ページングイベントは、DirectXのカーネルがリソースをビデオメモリとシステムメモリの間で移動させたタイミングを調べるのに役立ちます。
たとえば、VRAMの容量が逼迫した際にリソースの退避や再配置が起きていないかを確認し、フレーム時間の変動やメモリ使用量と関連付けて調査できます。
資料で紹介されているサンプルには、常駐・ページングイベントのコンソール出力や、システムメモリとビデオメモリの使用状況をツリーマップで表示するものがあります。
ツリーマップのサンプルは開発中とされているため、実際に利用する際はGitHub上の最新の説明やコードを確認してください。
自作ツールへ組み込む手順
利用にあたっては、ETWセッションの構成とイベントハンドラーの接続、必要なコールバックの実装が基本的な流れになります。
- DirectX関連のETWイベントを有効にしたETWセッションを作成・設定します。
- セッションのイベントハンドラーから、DxTimingCaptureLibraryのイベントハンドラーを呼び出します。
- 取得したいイベントに対応するコールバックインターフェイスを実装します。
- コールバックで受け取った情報を、ログやプロファイラーの表示、独自の解析処理に渡します。
イベントが発生すると、ライブラリが対応するコールバックを呼び出す仕組みです。
実装の詳細や利用できるインターフェイスは、更新される可能性があるため、サンプルとドキュメントを確認しながら進めるのが確実です。
導入時に意識したい点
ETWセッションの有効化やイベントの選択は、計測したい現象に合わせて設計する必要があります。
対象を絞らずに大量のイベントを取得すると、ログの保存量や解析負荷が増えるため、必要なデータを明確にしてから計測することが重要です。
また、イベントの解釈にはDirectX、GPUメモリ、ETWの知識が引き続き必要です。
本ライブラリはログ解析を扱いやすくするものであり、性能問題を自動で診断したり、すべての原因を説明したりする機能として紹介されているわけではありません。
ゲーム開発で期待できる活用例
ゲームエンジンに組み込めば、開発中のビルドからDirectXのイベントを収集し、エンジン独自のフレーム解析情報と並べて確認できます。
GPUの処理区間、リソースの生成・破棄、メモリ移動、パイプラインステートのコンパイルなどを同じ計測環境で扱えるため、問題の再現から原因調査までの流れを整えやすくなります。
ツール開発者にとっては、DirectX固有の情報を既存のプロファイラーや可視化ツールへ追加する際の基盤として活用できます。
GitHubのサンプルでは、GPUタイミングデータを「Perfetto」で表示する例も示されており、取得したデータを外部の可視化環境につなぐ方法を検討する際の参考になります。
まとめ
DxTimingCaptureLibraryは、DirectX関連のETWイベントをゲームエンジンや自作プロファイラーで活用するためのC++ライブラリです。
GPUのタイミングだけでなく、リソースの作成・破棄、VRAMとシステムメモリ間の移動、DirectStorage、エラーやVSyncなども扱える点が特徴です。
MITライセンスで公開されているため、導入を検討する開発者は、まずGitHubのドキュメントとサンプルを確認し、必要なイベントを絞ったうえで既存の計測環境との連携を試すとよいでしょう。
