前提条件
先に進む前に、滑らかさとフォアグラウンドメモリの測定の設定を完了してください。UIレンダリングのアーティファクトの特定
Vega App KPI Visualizerで滑らかさのKPIテストを実行すると、システムにより、UIラグの原因を特定するために役立つアーティファクトが生成されます。これらのアーティファクトには、滑らかさグラフ、CPUプロファイルグラフ、Perfettoトレースが含まれます。滑らかさグラフの理解
滑らかさグラフは、時間の経過に伴うアプリのレンダリングパフォーマンスを視覚的に表します。グラフを調べるときは、パフォーマンス上の問題が発生している可能性を示す滑らかさの低下がないか確認してください。このような低下は、UIの遅延の原因となる特定のイベントやコードの実行に関連していることがよくあります。
滑らかさの低下の原因を特定する方法
Perfettoトレースの調査CPUプロファイルグラフの分析
CPUプロファイルグラフには、アプリ内のさまざまな関数に費やされた時間が表示されます。滑らかさグラフにパフォーマンスの問題が表示されたら、タイムスタンプのCPUプロファイルグラフを展開します。展開表示はフレームグラフと呼ばれ、CPUプロファイルを視覚化して、どの関数が最も処理時間を消費しているかを示します。
フレームグラフを折りたたむ方法
- ルートバーを選択します。
- ビューが展開されたままの場合は、
Developer: Reload Webviewsコマンドパレットを使用してください。
Perfettoトレースを使用した作業
Perfettoは、パフォーマンスへの影響を最小限に抑えながらシステムトレースを記録するオープンソースツールです。滑らかさテストを開始すると、Perfettoにより、テスト対象のVegaデバイスでトレースが自動的に収集されます。テストが完了すると、トレースファイルがワークステーションにダウンロードされます。 トレースファイルはテスト出力ディレクトリにあります。各ファイルの形式は以下のとおりです。iter_3_vs_trace.protobuf
テスト中のシステムの動作を分析する方法
- Perfetto UIでトレースファイルを開きます。
- UIレンダリングの問題を特定するには、
Toolkit/Render threadのトレースを調査します。 - パフォーマンスの低下を引き起こす可能性のある長期または繰り返しのイベントを探します。
アーティファクトの一般的な原因と解決方法
フレームサイズの不一致
フレームをレンダリングする際、システムはビットマップをOpenGLテクスチャとしてGPU(グラフィックス処理装置)に読み込みます。OpenGLテクスチャはグラフィックのレンダリングに使用される画像で、通常はGPUのメモリに保存されます。 フレームサイズとディスプレイ解像度が一致しない場合、次のことが起こります。- GPUはフレームピクセルをディスプレイにマップする必要があります。
- フレームがディスプレイよりも大きい場合は、必要以上のピクセルがGPUに読み込まれます。
フレームサイズの不一致を調査する方法
-
Perfetto(システムトレース)で、遅延が見つかった時点付近の
Tools/Renderスレッドを探します。 -
レンダリングプロセスに遅延がないかどうかを確認します。
- フレームの幅と高さがターゲットデバイスのディスプレイサイズと一致していることを確認します。
フレームのオーバードロー
フレームのオーバードローは、アプリが1つのフレーム内で同じピクセルを複数回レンダリングするときに発生し、計算リソースを浪費します。これは、アプリが最初に画面をクリアせず、以前に描画したオブジェクトの上に新しいオブジェクトを描画したことが原因で発生します。アプリのオーバードローを検出する方法
オーバードローの検出の手順に従ってください。React Native Systraceによるカスタムトレースの追加
Vega SDKではReact Native Systrace API(英語のみ)がサポートされています。これにより、トレースマーカーを追加したり、アプリのソースコード内で行われる関数呼び出し間の経過時間を測定したりできます。カスタムトレースを使用すると、コードの特定の部分におけるパフォーマンスの問題を見つけやすくなります。 次のコードブロックは、トレースマーカーの追加方法を示しています。ベストプラクティス
不要なアーティファクトの発生やレンダリングの遅延を避けるには、アプリのパフォーマンスに関するベストプラクティスのVegaアプリのガイドラインに従ってください。関連トピック
- ▶️ Perfettoのトレース機能を使ってパフォーマンスの問題をデバッグする方法
- 💬 コミュニティ:UIの滑らかさを向上させる方法
- アプリのパフォーマンスに関するベストプラクティス
- アプリのKPIを測定

