アプリケーションのパフォーマンスのトラブルシューティング

Kanzi は、アプリケーションのパフォーマンスを測定するためのさまざまな手段を提供し、さまざまなパフォーマンスパラメータを表示します。これらの手段とパラメータを使用して、アプリケーションのパフォーマンスを向上させてください。

Kanzi Studio でのアプリケーションパフォーマンスの表示

../../_images/select-performance-hud.png

Kanzi Studio でアプリケーションのパフォーマンスと内部構造を分析するには、Preview で 解析オフ をクリックして Analyze モードに入り、アナライズオン を右クリックし、次を選択します:

  • Performance HUD には、最新 500 フレームにおける Kanzi アプリケーションの全体的なパフォーマンスインジケータが表示されます。以下が含まれます。

    • Frame Duration (ms) には、最終フレームのレンダリングにかかった時間がミリ秒単位で表示され、平均時間、最長時間、最短時間も表示されます。

      Frame Duration (ms) グラフの一番上の値は、最新 500 フレーム中のフレームのレンダリングにかかった最長時間、一番下の値は平均時間を示します。

      この情報を使用して、Kanzi アプリケーションのパフォーマンスボトルネックを特定します。たとえば、レンダリングを複数のフレームに分散させることで、アプリケーションのパフォーマンスを向上させる方法を見つけることができます。レンダリングを複数のフレームに分散する を参照してください。

    • API は、Kanzi が使用するレンダリング API (OpenGL ES や Vulkan など) を示します。また、ビデオカードの識別子とドライバーのバージョンも表示します。

      ../../_images/frame-duration-graph.png
    • Frames Per Second には、1 秒間にレンダリングされるフレーム数が示されます。

    • Animation Duration (μs) は、アプリケーション内のすべてのアニメーションを最後のフレームで実行するのにかかる時間をマイクロ秒単位で示し、平均、最高、最低の時間も表示します。

    • Draw Count には、実行された個別の描画呼び出しの回数が表示されます。

      Draw Count グラフの一番上の値は最新 500 フレーム中の最大バッチ数、一番下の値は最新 1 フレームのバッチ数を示します。

      ../../_images/draw-count-graph.png
    • Triangle Count には、1 フレーム中に描画された個別の三角形の推定合計数が表示されます。

    • Pipeline Count には、最新フレームで新しいレンダーパイプラインがバインドされた回数が表示されます。シェーダースイッチの削減 を参照してください。

    • Pass Count には、最新フレームで使用されたレンダーパスの数が表示されます。レンダリングのベストプラクティス を参照してください。

    • Memory Upload には、最新フレームで使用されたローリングステージングメモリのバイト数と、バッファの合計サイズが表示されます。ステージングメモリには、ユニフォームデータと、頂点バッファやテクスチャなどの GPU リソースの更新に使用される一時ストレージが含まれます。プラットフォームによっては、データのタイプごとに個別のバッファが使用されます。

    • Dispatch Count には、最新フレームで使用されたコンピュートディスパッチの数が表示されます。

    • Kanzi Graphics Objects には、作成された Kanzi Graphics オブジェクトの概要が表示されます。括弧内は、最新フレームで作成および削除されたオブジェクトの数です。

    • View Camera は、アプリケーション内でシーンを表示するために使用される Camera ノードの名前を示します。

    • Resource Memory Use は、Kanzi アプリケーションが使用するローカルGPUメモリ(VRAM)と非ローカルGPUメモリ(RAM)の推定量を表示します。

      Performance HUD が Kanzi Studio Preview に表示する値と、ターゲットデバイスで Kanzi アプリケーションを実行したときに表示される値が異なるのは、Kanzi Studio がアプリケーション内のすべてのリソースをロードしてメモリに保持するためです。

    • Timers は MainLoopScheduler に登録されているタイマーハンドラーの数を示します。タイマーハンドラーが多すぎると、アプリケーションのパフォーマンスが低下する可能性があります。タイマーの追加 を参照してください。

      Kanzi Engine APIで MainLoopScheduler::getTimersCount を呼び出すことにより、タイマーサブスクリプションの数にアクセスできます。

    • Recurring Tasks は、メインループスケジューラーのステージに追加されたタスクの総数を示します。Kanzi Engine はデフォルトでいくつかのタスクを追加します。反復タスクの追加 を参照してください。

      Kanzi Engine APIで MainLoopScheduler::getTasksTotalCount を呼び出すことにより、反復タスクの数にアクセスできます。

    • Animations には、Kanzi アプリケーション内のアクティブなアニメーションの数とアニメーションの総数が示されます。

      Kanzi Engine APIでアニメーションの数にアクセスできます。

  • Framebuffer objects は、テクスチャにレンダリングされ、フレームバッファオブジェクトの切り替えを引き起こすノードを半透明の黄色の動くストライプでマークします。

  • Transparency は透明なノードを半透明の青い動くストライプでマークします。効率的なレンダリングのためのノードの設定 を参照してください。

  • Overdraw のビジュアライゼーションは、Kanzi が同じピクセルに複数回レンダリングされる領域を示します。より明るい緑色は、オーバードローの量が多いことを示しています。

Sorting Filter でオーバードローを防ぐ を参照してください。

全体的なパフォーマンスの表示

Kanzi アプリケーションの全体的なパフォーマンスを確認するには:

  • Kanzi Studio Preview で、解析オフ をクリックし、コンテキストメニューで Performance HUD を有効にします。

  • application.cfg で、完全な Performance HUD の表示を有効にします。

    PerformanceInfoLevel = 2
    

    PerformanceInfoLevel を参照してください。

  • Performance HUD の表示をアプリケーションコードで有効にし、Application::onConfigure 関数で使用します。

    configuration.performanceInfoLevel = ApplicationProperties::PerformanceInfoLevelFull;
    

    PerformanceInfoLevel を参照してください。

  • application.hpp で、Performance HUD の表示を有効にするには、Application::getPerformanceInfoLevel および Application::setPerformanceInfoLevel 関数を呼び出します。

    ApplicationProperties::PerformanceInfoLevel getPerformanceInfoLevel() const
    {
        return m_applicationProperties.performanceInfoLevel;
    }
    void setPerformanceInfoLevel(ApplicationProperties::PerformanceInfoLevel level)
    {
        m_applicationProperties.performanceInfoLevel = level;
    }
    
  • 現在のフレームレートの値は、application.hpp の Application::getFramesPerSecond 関数を呼び出して取得できます。

  • フレームをレンダリングするのにかかる時間を取得するには、MainLoopScheduler タイミングインターフェース MainLoopScheduler::getLastFrameDuration を使用します。

アプリケーション構成リファレンス を参照してください。

リソースのロード時間を表示する

application.cfg ファイルまたは Application::onConfigure 関数内のアプリケーションコードで、Kanzi を設定して、アプリケーションが使用するリソース kzb ファイルの読み込みにかかる時間をデバッグコンソールに出力することができます。リソースの読み込みとデプロイ時間の測定 を参照してください。

グラフィックスパフォーマンスの表示

application.cfg ファイルまたは Application::onConfigure 関数内のアプリケーションコードで、Kanzi を設定してデバッグコンソールに出力することができます。

  • アプリケーション起動時のグラフィックス関連情報 (グラフィックス API、デバイス、シェーディング言語のバージョンなど)。LogOpenGLInformation を参照してください。

  • アプリケーション起動時のグラフィックス関連プロパティ (スワップ動作、ディスプレイサイズ、アプリケーションのウィンドウサイズなど) のリスト。LogSurfaceInformation を参照してください。

ノードのオーバードローの表示

Overdraw のビジュアライゼーションは、Kanzi が同じピクセルに複数回レンダリングされる領域を示します。より明るい緑色は、オーバードローの量が多いことを示しています。

Kanzi は、ステンシルバッファを使用して、同じピクセルに何回描画するかを計算します。ステンシルバッファを使用してコンテンツをレンダリングしている場合、Overdraw のビジュアライゼーションは予期しない結果を返すことがあります。

オーバードローのビジュアライゼーションは表示されません:

  • 3Dノードをコンポジションにレンダリングし、その後テクスチャにレンダリングする場合のオーバードロー。この場合、Overdraw のビジュアライゼーションは、テクスチャにレンダリングされたコンポジションのコンテンツを単一のクアッドとして表示します。

  • ノードの一部は、先祖ノードで Clip Children プロパティを有効に設定したときにクリップされます。

  • 完全に透明なノードや、子孫ノードを含む表示されていないノード。

アプリケーションでオーバードローを表示するには、Kanzi Studio Preview で image0 をクリックして Analyze モードに入り、image1 を右クリックし、Overdraw を選択します。

../../_images/overdraw-enabled.png

テクスチャにレンダリングされるノードの表示

フレームバッファオブジェクトの切り替えは、一部のプラットフォームでパフォーマンスの大幅な低下を引き起こす可能性があります。Kanzi がノードをテクスチャにレンダリングする条件は複雑になることがあります。例えば、回転、スケール、または不透明度が原因でテクスチャへのレンダリングが発生することがあります。

ノードがテクスチャにレンダリングされ、フレームバッファオブジェクトの切り替えを引き起こしているかどうかを確認するには、Preview で analyze-off-1 をクリックして Analyze モードに入り、analyze-on-1 を右クリックして Framebuffer objects を選択します。Preview は、透明なオレンジ色のストライプでテクスチャにレンダリングされているレイヤーをハイライトします。

コンポジションレンダーターゲットにレンダリングされるノードの表示

Kanzi Studio では、アプリケーション内のどの2Dノードが Kanzi によってコンポジションレンダーターゲットにレンダリングされるかを確認できます。

Preview でアルファブレンディングを使用する2Dノードを表示するには、Preview で プレビュー分析オフ をクリックして Analyze モードに入り、プレビュー分析オン を右クリックして Transparency を選択します。

Preview は、Kanzi が半透明の青いストライプで合成レンダーターゲットにレンダリングするノードを強調表示します。

関連項目

リソースの読み込みとデプロイ時間の測定

アプリケーション構成リファレンス

シェーダースイッチの削減

効率的なレンダリングのためのノードの設定

レンダリングのベストプラクティス

アニメーションのベストプラクティス

ロギング

無効なプロジェクトアイテムを見つける