Mapbox Standard 3Dベースマップの登場により、マップのレンダリングは新たな次元へと到達します。Mapboxは、一貫して業界をリードするレンダリングパフォーマンスを維持しながら、これまで以上に多くの2Dおよび3Dベースマップを提供します。これを実現するため、Mapboxは典型的なマップレンダリングシナリオとそのリソース使用量をよりよく分析するための開発ツールを強化・拡張しました。これらの内部開発者ツールは、Mobile Maps SDKs v11ですべてのお客様にご利用いただけます。様々な場面で、これらのツールがパフォーマンスの測定と最適化に役立つでしょう。
機能のパフォーマンス効果を個別に分析することは不可欠ですが、現実世界のシナリオに基づく、機能の併用について検討することも重要です。例えばMapbox Standardでは、3Dモデル、動的なライティング、影、地形、空、様々なレイヤータイプを同時にレンダリングするコストを考慮する必要があります。表示されるコンテンツ量も動的に変化し、ロケーション、ズーム、ピッチ、地図の表示サイズなどの要因に影響されます。
レンダリングのパフォーマンスは、つきつめるとハードウェアの能力と、その時点でのマップのリソース使用量に依存します。視覚体験の範囲を広げると、必然的にレンダリング・エンジンの組み合わせの複雑さが増します。
静的パフォーマンスと動的パフォーマンスの違い
実際には、パフォーマンスに対する最も大きな影響は、セッションの動的な性質に起因します。動的な性質とは、時間間隔毎のマップ設定の変化を意味します。特定の時間における正確なリソース使用量を予測することは、変数が多いためほぼ不可能です。しかし、上限と下限を観測し、一貫したパフォーマンスを維持するための目標範囲を設定することは可能です。
▲Globe Viewからヘルシンキの市街地にズームイン
ダイナミックなカメラの移動は、コンテンツのロード、シンボルの位置合わせ、プロパティの評価、画面上のレンダリングなどの要因により、フレームレートの変動を引き起こします。これらの処理は、CPUやGPUの負荷だけでなく、ネットワークやディスクアクセスの待ち時間の影響を受け、応答時間を遅らせる可能性があります。
一方、静的なシーンでは、ほぼ一定のリソース使用でレンダリングすることができます。設定が固定されたシーンは、マップ評価において重要なベンチマークとして機能しますが、すべての実用的なユースケースを網羅するとは限りません。
再現性のある動的テストシナリオの作成
MapRecorder APIは、動的マップレンダリングシナリオの再現可能なインスタンスを提供するために開発されました。(例:Android / iOS)主な焦点は、ナビゲーションセッションに似た、都市環境での連続的なカメラの動きを伴うマップです。MapRecorderはNavigation SDKからの入力をキャプチャして再生することができ、その特定のインスタンスでの使用パフォーマンスの詳細な分析を可能にします。これらのシナリオは主に、使用するプラットフォームやハードウェアの特定の制限内でリソース使用量を維持するのに役立ちます。
以前は、座標のリストと固定ズームレベルに基づいて動作するカスタムアニメーターを使用して、同様のテスト手順を行っていました。しかし、路上でのナビゲーション中に記録された実際のAPIコールを使ってシステムをテストする方がより効果的です。このアプローチは、実際のナビゲーション・シナリオと比較したときに、プレイバック内の不一致がないことを保証します。さらに、同じセッション内でさまざまなAPIコールを実行することで、結合テストとしての役割も果たし、さらなるメリットがもたらされます。
▲地図上でズームアニメーション中にフレームタイムが頻繁に変化するのを観察できる
ナビゲーションアプリでルート概要を表示するための高速ズームなどのシナリオでは、MapRecorderのプレイバックを使用してパフォーマンスへの影響をテストしています。ズームレベルの変化が引き起こす処理は、まずネットワークやディスクから新しいコンテンツを読み込み、次にレンダリングの準備をし、GPUにデータを読み込み、最後に画面に表示します。これは、様々な街路、建物、国を表示しながら1秒もかからずに行われます。安定したフレームレートを維持することは、良好なユーザー体験のために不可欠です。APIプレイバックを使えば、マップに新しい機能が追加された際にそれがフレームレートに影響を及ぼさないことを保証するために、同じシナリオを繰り返しテストすることができます。
コンテキストに基づくパフォーマンス評価
パフォーマンス解析ツールも拡張されました。通常、マップのグラフィカルパフォーマンスを評価する場合、フレームごとのレンダリング時間、GPUおよびCPUの使用率、各種メモリ使用量などの主要なメトリクスが重視されます。SDKやスタイルの変更後にこれらの値が急上昇した場合、リグレッションの検出は比較的簡単です。しかし、既存のセットアップの強化を目指す場合は、これらの値にさらにコンテキストを追加することが重要になります。
Performance StatisticsとTracing APIは、より高いレベルの論理単位に基づいて、マップリソースの利用状況を分析するためのより良いツールをユーザーに提供するようになりました。(ドキュメント参照:Android / iOS)Mapbox styleで、最も重要な単位はレイヤーです。そのため、Statistics APIは個々のレンダリング時間でソートされた最も重いレイヤーのリストを返すことができます。
▲レイヤーごとのPerformance Statisticsの表示は、ピッチングの効果を示します。シンボルレイヤーは一般的に、可視コンテンツの量が増えるにつれて重くなります。
結果として得られる統計は、レイヤープロパティの変更がパフォーマンスに与える影響を追跡するための知見を提供します。スタイル仕様の要素のパフォーマンスコストについては、コンテキストやSDKのバージョンによって異なるため、Mapboxでは意図的に開示していません。
例えば、多数の機能を持つシンボルレイヤーはレンダリングに時間がかかる場合があり、text-halo-colorプロパティを適用すると、レイヤーのレンダリング時間が顕著に長くなります。Mapbox SDKのv10シリーズでは、テキストとハロカラーの重なりを防ぐために追加のレイヤーを導入しています。
MapboxはMapbox Standardスタイル内でこのプロパティのパフォーマンス効果を分析し、統計情報により、ハロプロパティが適用されると、描画呼び出し回数が増加することが明らかになりました。これに対処するため、Mapboxはv11で的を絞った最適化を実装し、テキストとハローを1回の描画呼び出しでレンダリングできるようにしました。これにより、レンダリング時間が顕著に改善されました。スタイルの変更前と変更後のパフォーマンスを測定し、特定のレイヤーに追加のフィルタリングや特定のプロパティの条件付き使用が必要かどうかを検討することをお勧めします。
また、プラットフォーム固有のトレーサーのコンテキストを拡張しました。トレーシングはパフォーマンスの問題、特にユーザーとのインタラクションに関連するパフォーマンスの問題を特定するための最良のアプローチの一つであることが証明されました。新しいTracing APIは、複数のスレッドにまたがるマップレンダリング中のリソース使用量の急増の原因を突き止めるのに役立つコンテキストマーカーで記録を改善します。レイヤーのレンダリングは、タイルの取り込みや解析間隔とともに、個別に追跡できます。一般に、タイルの読み込みが遅い場合は、ネットワーク接続に問題があるか、コンテンツサイズが大きすぎる可能性があります。レンダリングスレッドでの遅延は、スタイルの頻繁な変更(特にレンダーツリーの作成中)、またはレイヤーの複雑さ(他のレイヤーよりもレンダリングに著しく時間がかかる場合)が原因で発生する可能性があります。
Performance Statistics APIとTracing APIにはリソース使用量を追跡調査するためにデザインされたという共通の目的があります。Tracing APIは、時間の経過に伴うリソース使用量の増加をピンポイントで特定することに優れており、一方、Statistics APIは、これらの増加を分類的に特定することができます。
さらに、統計情報の収集はプラットフォームのツールから独立して設定できるため、より幅広いシナリオに適用できます。スタイル編集中に統計を確認することが推奨されるため、マップデザイナーとプログラマーの両方にとって有用なツールとなります。これとは対照的に、より大幅な変更の影響を分析したり、コンテキストによるパフォーマンスの低下を調査したりするには、トレーサーを使用することをお勧めします。
また、カメラの移動頻度や表示される主な場所など、マップの典型的なユーザーシナリオを考慮することも価値があります。これらのシナリオは、MapRecorder APIを使用してキャプチャすること、そしてソフトウェア修正前後においてPerformance StatisticsまたはTracing APIを使用して分析することが可能です。このようなワークフローを採用することで、複雑な動的シナリオであっても、パフォーマンスを目標範囲内に維持することができます。
早速テストしてみましょう
このツールは現在、Mobile Maps SDKのv11.2リリースに統合されており、すぐにダウンロード可能です。MapRecorder、Performance Statistics、およびTracingの活用方法に関する詳細なガイダンスについては、AndroidおよびiOSプラットフォーム向けのユーザーガイドを参照してください。v11への移行については、iOSおよびAndroid向けの移行ガイドをご覧ください。
*本記事は、Mapbox Inc. Blogの翻訳記事です。