エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 用 Direct3D アプリのプロファイリング

2014/06/18

Visual Studio で Direct3D アプリを操作中に Windows Phone アプリケーション分析を起動すると、マネージ アプリのプロファイリングを行っているときとは異なるオプションとレポートが表示されます。ネイティブ コード プロファイラーは、Visual Studio 2012 に組み込まれたプロファイリング テクノロジを使用し、結果を標準の .vspx ファイルに保存します。

C# または Visual Basic プロジェクトから参照されている Windows Phone ランタイム コンポーネント プロジェクトも、ネイティブ コード プロファイラーでプロファイリングできます。

マネージ アプリのプロファイラーを基にした Windows Phone のプロファイリングの詳細については、「Windows Phone 8 のアプリのプロファイリング」を参照してください。Direct3D アプリの開発の詳細については、「Windows Phone 8 用の Direct3D アプリ開発」を参照してください。

このトピックは、次のセクションで構成されています。

Direct3D アプリのアプリ プロファイリングの開始するには

  1. アプリのプロファイリングは、次のいずれかの方法で実行できます。これらの方法は、Direct3D プロジェクトが Visual Studio で開かれていることを前提としています。

    • [デバッグ] メニューの [Windows Phone アプリケーションの分析の開始] をクリックします。

    • Alt キーを押しながら F1 キーを押します。

  2. Direct3D アプリでは [実行] オプションのみを使用できます。

  3. [セッションの開始] をクリックします。

    選択したエミュレーターまたはデバイスでアプリが実行を開始します。

次の図は、Direct3D アプリのプロファイリングを開始する画面を示しています。

Start screen for native profiler

十分な数のアクティビティのサンプルをプロファイルした後で、[セッションの終了] をクリックします。

プロファイリング セッションを停止した後で、収集したデータがツールによってコピー、解析、および分析されます。その後で、次の図に示すように結果の [概要] ビューが表示されます。

Summary view of profiling results

電話でアプリをプロファイリングしているときは、エミュレーターでアプリをプロファイリングしているときより、プロファイリング データの解析とレポートの準備に時間がかかります。

使用可能なプロファイリング結果のレポートの詳細については、「Windows アプリの Visual C++、Visual C#、および Visual Basic コードのパフォーマンスの分析」を参照してください。リンク先のトピックでは、Windows アプリケーションでのプロファイリングについて説明していますが、Windows Phone SDK 8.0 の Direct3D アプリのプロファイラーも同じレポートを生成します。

カスタム イベントを収集するように、ネイティブ プロファイラーを構成できます。その後、これらのイベントを Windows パフォーマンス アナライザーで確認できます。

カスタム イベントを収集して分析するには

  1. Windows 8 用 Windows ソフトウェア開発キット (SDK)Windows Performance Toolkit があることを確認します。

  2. Message Compiler (MC.exe) ツールを使用すると、カスタム イベントのマニフェスト ファイルを基にして、コードで使用するヘッダー ファイル (.h ファイル) およびリソース ファイル (.resx) を生成できます。

  3. 生成されたヘッダー ファイル (.h ファイル) およびリソース ファイル (.resx) をプロジェクトに追加します。それをコードで使用して、カスタム イベントを登録または登録解除します。

  4. Wevtutil.exe ツールを使用して、マニフェストをイベント ロガーに登録します。標準的なコマンド ラインは次のようになります。

    wevtutil im <manifest file> /rf:<full path to dll/exe which includes the resources> /mf:<same path as rf>

    マニフェストを更新する場合は、最初にアンインストールする必要があります。マニフェストをアンインストールするには、wevtutil rm <manifest> コマンドを実行します。

  5. 次のフォルダーにある ProfilerTasks.XML ファイルにカスタム GUID を追加します。

    %ProgramFiles(x86)%\Common Files\Microsoft Shared\Phone Tools\11.0\Profiler\target

    標準的なエントリは次のようになります。

    <EtwProvider Name="CustomEventProducer" GUID="{708BA62D-5B10-4309-AA23-ADC794E60F6C}" />

    このファイルを編集するには、管理特権が必要です。

  6. Visual Studio に戻り、Alt + F1 キーを押すか、[デバッグ] メニューの [Windows Phone アプリケーションの分析の開始] を選択して、アプリのプロファイリングを開始します。

    プロファイリング後、ログは .vspx ファイルの内部にプロファイリング セッション用に格納されます。このファイルはプロジェクト ディレクトリにあります。

  7. .vspx ファイルのファイル拡張子を .zip に変更し、.vspx ファイルを解凍して .etl ログを抽出します。ログはファイル内の次のパスにあります。

    VSProfilingData\VSPerfLog*.etl

  8. 抽出した .etl ファイルを、Windows パフォーマンス アナライザーなどのお気に入りの Windows 8 用 ETW ファイル ビューアーで開きます。詳細については、「Windows パフォーマンス アナライザー (WPA)」を参照してください。

  9. Generic Events グラフをインスタンス化して、カスタム イベント データを確認します。

Qualcomm グラフィックス ドライバーによって生成されたイベントをネイティブ プロファイラーで収集できます。その後、これらのイベントを Windows パフォーマンス アナライザーで確認できます。

Qualcomm グラフィックス ドライバーによるイベントの生成は、既定で有効になります。

Qualcomm イベントを収集して分析するには

  1. Windows 8 用 Windows ソフトウェア開発キット (SDK)Windows Performance Toolkit があることを確認します。

  2. Visual Studio でアプリを開き、Alt + F1 キーを押すか、[デバッグ] メニューの [Windows Phone アプリケーションの分析の開始] を選択して、アプリのプロファイリングを開始します。

    プロファイリング後、ログは .vspx ファイルの内部にプロファイリング セッション用に格納されます。このファイルはプロジェクト ディレクトリにあります。

  3. .vspx ファイルのファイル拡張子を .zip に変更し、.vspx ファイルを解凍して .etl ログを抽出します。ログはファイル内の次のパスにあります。

    VSProfilingData\VSPerfLog*.etl

  4. 抽出した .etl ファイルを、Windows パフォーマンス アナライザーなどのお気に入りの Windows 8 用 ETW ファイル ビューアーで開きます。詳細については、「Windows パフォーマンス アナライザー (WPA)」を参照してください。

  5. グラフ エクスプローラーで、[システム アクティビティ] を展開し、Generic Events を表示します。Generic Events を [分析] ウィンドウにドラッグします。

  6. [分析] ウィンドウで、QCOM DX9 UMD プロバイダーを展開し、Qualcomm イベントを表示します。

    表示されるタスク名は、ログに記録されたイベントを表します。Windows パフォーマンス アナライザーを使用して、表示の範囲を特定のフレームなどに変更できます。

Qualcomm イベント

以下のイベントは、Qualcomm グラフィックス ドライバーによって実行された内部操作に関する情報を提供します。これらを使用すると、コードが GPU を効率よく駆動しているかどうか、またはドライバーが負担の大きなハウスキーピング作業を行う原因になっているかどうかを、より正確に理解できます。

タスク名

タスクの説明

GMemStore

レンダリング結果が GPU キャッシュからシステム メモリに書き戻されるときを示します。レンダリング データをシステム メモリにプッシュします。

GMemLoad

以前にレンダリングされたビットをシステム メモリから取得し、GPU キャッシュに読み込みます。

CmdBufferFlush

CPU によって (D3D API 呼び出しに呼応して) 生成されたレンダリング コマンドが実行のために GPU ハードウェアに送られるコマンド バッファー フラッシュを表します。多数のフラッシュは、低い並列化を示します。

ResourceDiscardWarning

特定の割り当てに対する名前変更の制限に達したこと、および既存のすべての名前変更がまだ使用されていることを示します。これらの条件下ではドライバーは停止ロックを実行するので、このイベントはパフォーマンスの警告です。通常、これは CPU から GPU に転送される動的データが多すぎることを示します。

QueryNotSignaled

API クエリに適用されます。このイベントは、クエリが行われる前に GetData が呼び出されたことを警告します。このイベントが繰り返し発生する場合は、クエリを発効してから結果の取得を試みるまでの間にアプリが十分な処理を行っていないことを示します。

OutOfMemory

グラフィックス ドライバーが操作を完了するのに十分なメモリがありませんでした。割り当てられたシステム メモリまたはビデオ メモリが不十分です。

MismatchedConfig

アプリケーションが指定した深度バッファーとレンダリング ターゲットのサイズまたは形式に互換性がないことを示します。ランタイムはこの状況を防止しません。予期しないビジュアル アイテムが生成される可能性があります。

Qualcomm フラッシュの理由

この列挙体は、CmdBufferFlush イベントの原因に関する追加情報を提供します。

メッセージ

説明

Explicit

フラッシュは明示的に要求されました (たとえば、シーンの最後で Present を呼び出すことにより)。

OutOfSpace

GPU ハードウェアのコマンド バッファーに使用できる領域がありません。

OutOfHandles

コマンド バッファー内で参照されているすべてのメモリを記述している割り当てハンドルを参照します。通常、このイベントは多数のレンダリングがバッチ処理されたことを示します。バッチ処理は推奨される方法ですが、このイベントはハンドルの枯渇によるフラッシュが大量に発生していることを示します。バッチ処理が特定のアプリケーションに対して多すぎる可能性があります。

ExternalDependency

エンジン間に存在する依存関係によるフラッシュであることを示します (たとえば、サーフェスへの 3D レンダリングの後のビデオ処理 (DXVA) 操作)。この操作シーケンスでは、スケジューラが必要な信号と待機を認識するので、ビデオ処理操作の前に 3D レンダリングをフラッシュする必要があります。これはビデオ UMD によって開始されるフラッシュです。

AllocationReferenced

このフラッシュは、GPU によって書き込まれたリソース割り当てが他のハードウェア ユニットまたは CPU によって参照されると、トリガーされます。前の GPU レンダリングがフラッシュされてからでないと、割り当てに対する他の参照を続行できません。

Video (ビデオ)

レンダリング処理を実行するため、ビデオ ドライバーが GPU を要求したことを示します。

表示:
© 2014 Microsoft