地図

地図レンダリングのパフォーマンス評価のための新しい高度なツール

見出し

これはレイアウト確認用のダミーテキストです。

Mapbox Standard 3D basemapの登場により、地図レンダリング体験が新たな次元へと向上しました。Mapboxは、一貫した業界トップクラスのレンダリングパフォーマンスを維持しながら、これまで以上に多くの2Dおよび3Dベースマップオプションを提供しています。これを実現するために、Mapboxは開発ツールを強化および拡張し、一般的な地図レンダリングのシナリオとそのリソース使用量をより詳細に分析できるようにしました。地図スタイルの設計とメンテナンスをサポートするこれらの社内開発ツールは、Mobile Maps SDKs v11でMapboxのお客様が外部から利用できるようになりました。これらのツールがパフォーマンスの測定と最適化にどのように役立つかについては、多くの検討事項があります。 

すべての機能のパフォーマンスへの影響を個別に観察することが重要ですが、実際のシナリオに基づいたそれらの複合的な使用状況を考慮することも重要です。たとえば、Mapbox Standardでは、3Dモデル、ダイナミックライト、シャドウ、地形、大気、およびさまざまなレイヤータイプを同時にレンダリングするコストを考慮する必要があります。表示されるコンテンツの量も動的に変化し、場所、ズーム、ピッチ、地図の表示サイズなどの要因に影響されます。レンダリングパフォーマンスは最終的に、ハードウェアの機能と、特定の時点での地図のリソース使用量によって決まります。視覚体験の範囲を広げることは、必然的にレンダリングエンジンの組み合わせの複雑さを増大させます。

大気効果、3Dモデル、ダイナミックライトを追加してシーンを構築する。

静的パフォーマンスと動的パフォーマンスの違い

実際には、パフォーマンスに最も大きな影響を与えるのは、セッションの動的な性質です。動的とは、一定の間隔での地図の構成の変化を指します。多数の変数があるため、特定の時点での正確なリソース使用量を予測することはほぼ不可能です。ただし、上限と下限を観察し、一貫したパフォーマンスを維持するための目標範囲を確立することは可能です。

地球全体図からヘルシンキのダウンタウンへのズームイン

動的なカメラの動きは、コンテンツのロード、シンボルの配置、プロパティの評価、画面上でのレンダリングなどの要因により、フレームレートの変動を引き起こします。これらのプロセスは、ネットワークおよびディスクアクセスレイテンシ、CPUおよびGPUの負荷の影響を受け、応答時間を遅らせる可能性があります。対照的に、静的なシーンは、ほぼ固定されたリソース使用量でレンダリングできます。固定構成のシーンは、地図の評価において重要なベンチマークとして機能しますが、実際のユースケースを完全に網羅しているわけではありません。

perf_static.jpg
静的シーンを継続的にレンダリングしても、リソース使用量にスパイクは発生せず、レンダリング時間は安定しています。

再現可能な動的テストシナリオの作成

MapRecorder APIは、動的な地図レンダリングシナリオの再現可能なインスタンスを提供するために直感的に開発されました。(例:Android /iOS)主な焦点は、ナビゲーションセッションと同様に、都市環境での継続的なカメラの動きを伴う地図です。MapRecorderは、Navigation SDKからの入力をキャプチャして再生し、その特定のインスタンスでのパフォーマンス使用状況の詳細な分析を可能にします。これらのシナリオは、主に、特定のプラットフォームおよびハードウェアの指定された制限内でリソース使用量を維持するのに役立ちます。

以前は、座標のリストと固定ズームレベルに基づいて動作するカスタムアニメーターを使用して、同様のテスト手順を実行していました。ただし、道路でのナビゲーション中に記録された実際のAPI呼び出しを使用してシステムをテストする方が効果的です。このアプローチにより、実際のナビゲーションシナリオと比較して、再生に差異が生じないことが保証されます。さらに、同じセッション内でさまざまなAPI呼び出しを実行することにより、統合テストとして機能し、追加のメリットが得られます。

地図上のズームアニメーション中に、フレーム時間の頻繁な変動を観察することができます。

ナビゲーションアプリでルートの概要を表示するために急速にズームするようなシナリオでは、MapRecorderの再生を使用してパフォーマンスへの影響をテストします。ズームレベルの変化は、最初に、ネットワークまたはディスクからの新しいコンテンツのロード、次にレンダリングの準備、次にGPUへのデータのロード、そして最後に画面への表示をトリガーします。これは1秒以内に発生する可能性があり、異なる通り、建物、国が表示されます。安定したフレームレートを維持することは、肯定的なユーザーエクスペリエンスにとって不可欠です。API再生を使用すると、新しい機能が地図に追加されたときにフレームレートが損なわれないように、シナリオを繰り返しテストできます。

コンテキストに応じたパフォーマンス評価

パフォーマンス分析ツールも拡張されました。通常、地図のグラフィカルなパフォーマンスを評価する場合、フレームごとのレンダリング時間、GPUおよびCPUの使用率、およびさまざまなメモリ使用量の値などの主要なメトリックに焦点が当てられます。SDKまたはスタイルコンテンツの変更後にこれらの値が急上昇した場合、リグレッションの検出は比較的簡単です。ただし、既存のセットアップを強化することを目的とする場合は、これらの値にコンテキストを追加することが重要になります。

Performance StatisticsおよびTracing APIは、より高度な論理ユニットに基づいて地図リソースの使用率を分析するためのより優れたツールをユーザーに提供するようになりました。(ドキュメントを参照:Android /iOS)Mapboxスタイルでは、最も重要なユニットはレイヤーです。したがって、Statistics APIは、個々のレンダリング時間でソートされた、最も負荷の高いレイヤーのリストを返すことができます。

レイヤーごとのパフォーマンス統計の表示は、ピッチングの効果を示しています。シンボルレイヤーは通常、表示されるコンテンツの量が増えるにつれて重くなります。

結果として得られる統計は、レイヤープロパティの変更のパフォーマンスへの影響を追跡するための貴重な洞察を提供します。Mapboxは、スタイルSpecification要素のパフォーマンスコストを開示することを意図的に控えています。これは通常、コンテキストとSDKのバージョンによって異なるためです。 

たとえば、多数のフィーチャを持つシンボルレイヤーはレンダリングに時間がかかる場合があり、text-halo-colorプロパティを適用すると、レイヤーのレンダリング時間が著しく増加します。SDKのv10シリーズでは、このプロパティはテキストとハローの色が重ならないように追加のレイヤーを導入します。Mapboxは、Mapbox Standardスタイル内でこのプロパティのパフォーマンスへの影響を分析し、統計により、ハロープロパティが適用されたときにドローコールの数が増加することが明らかになりました。これに対処するために、Mapboxはv11でターゲットを絞った最適化を実装し、テキストとハローを1回のドローコールでレンダリングできるようにしました。これにより、レンダリング時間が著しく改善されました。スタイルを変更する前後にパフォーマンスを測定し、特定のレイヤーが追加のフィルタリングまたは特定のプロパティの条件付きの使用を必要とするかどうかを検討することをお勧めします。

Mapboxは、プラットフォーム固有のトレーサーのコンテキストも拡張しました。トレーシングは、特にユーザーインタラクションに関連するパフォーマンスの問題が発生した場合に、パフォーマンスのボトルネックを特定するための最良のアプローチの1つであることが証明されています。新しいTracing APIは、複数のスレッドにわたって、地図レンダリング中のリソース使用量のスパイクのソースを特定するのに役立つコンテキストマーカーで記録を強化します。レイヤーのレンダリングは、タイルフェッチング、および解析間隔とともに個別に追跡できます。一般に、タイルロードセクションが遅い場合は、ネットワーク接続の問題またはコンテンツサイズが過度に大きいことが考えられます。レンダリングスレッドの遅延は、(特にレンダリングツリーの作成中に)頻繁なスタイルの変更、または他のレイヤーよりもレンダリングに著しく時間がかかる場合のレイヤーの複雑さが原因で発生する可能性があります。

Xcode Instrumentsで記録されたセッション。

Performance Statistics APIとTracing APIはどちらも、リソースの使用状況を追跡することを目的としています。Tracingは、時間経過に伴うリソース使用量の増加を特定することに優れており、Statistics APIは、これらの増加をカテゴリ別に識別できます。さらに、統計収集はプラットフォームのツールとは独立して構成できるため、より広範なシナリオに適用できます。スタイルの編集中に統計を監視することをお勧めします。これは、地図デザイナーとプログラマーの両方にとって役立つツールです。対照的に、トレーサーは、より大幅な変更の影響を分析したり、コンテキストに応じたパフォーマンスの低下を調査したりする場合に使用することをお勧めします。

カメラの動きの頻度や表示される主な場所など、地図の典型的なユーザーシナリオを検討することも重要です。これらのシナリオは、MapRecorder APIを使用してキャプチャし、ソフトウェアの変更前後にPerformance Statistics APIまたはTracing APIを使用して分析できます。このようなワークフローを採用することで、複雑な動的シナリオでも、パフォーマンスを目標範囲内に維持できます。

テストを開始

これらのツールは、Mobile Maps SDKのv11.2リリースに統合されており、すぐにダウンロードできます。MapRecorder、Performance Statistics、Tracingを最大限に活用する方法の詳細なガイダンスについては、AndroidおよびiOSプラットフォームのユーザーガイドを参照してください。v11への移行については、iOSおよびAndroidの移行ガイドを参照してください。

これはレイアウト確認用のダミーテキストです。

これはレイアウト確認用のダミーテキストです。

関連記事