高度なAndroidのスレッドパフォーマンス
Snapdragon SpacesのUnityパッケージで作成したプロジェクトは、Snapdragon Spaces Servicesにスレッドを登録し、Androidでのスケジューリングの優先度を向上できます。
スレッドの適切な優先順位を特定することで、フレームを迅速かつ一貫して配信し、XR体験を向上させることができます。
デフォルトでは、Snapdragon SpacesのUnityプラグインは、開発者が何もしなくても、UnityのメインスレッドとレンダリングスレッドをSnapdragon Spaces Servicesに識別します。
SpacesThreadUtility
クラスは、public static void SetThreadHint(SpacesThreadType threadType)
という1つのメソッドを開発者に公開しています。これは、他の開発者が作成したスレッドを識別するために使用できます。
このメソッドは、登録するスレッドから呼び出す必要があります。最良の結果を得るためには、そのスレッドの寿命のできるだけ早い段階で呼び出す必要があります。
以下の4つのスレッドタイプが定義されています。
SPACES_THREAD_TYPE_APPLICATION_MAIN
SPACES_THREAD_TYPE_APPLICATION_WORKER
SPACES_THREAD_TYPE_RENDERER_MAIN
SPACES_THREAD_TYPE_RENDERER_WORKER
最初の3つのスレッドタイプSPACES_THREAD_TYPE_APPLICATION_MAIN
、SPACES_THREAD_TYPE_APPLICATION_WORKER
、SPACES_THREAD_TYPE_RENDER_MAIN
のいずれかを割り当てても、現在のところスケジューリングの優先順位には影響しません。
SPACES_THREAD_TYPE_RENDER_WORKER
を割り当てられたスレッドは、他のスレッドよりも高い優先度でスケジューリングされます。
実際には、これらのスレッドは降伏する頻度が少なくなり、コードの実行に多くの時間を費やすことになります。
開発者はこれを控えめに使うべきです。開発者自身が、この方法でスレッドを特定した場合の性能変化をベンチマークすることを推奨します。
Snapdragon Spaces Servicesにスレッドを登録する際にわずかなオーバーヘッドが発生するため、極端に寿命の短いスレッドには適していない場合があります。
非レンダリングスレッドをSPACES_THREAD_TYPE_RENDERER_WORKER
として識別すると、レンダリングスレッドから優先度が奪われ、FPSの低下、待ち時間の増加、安定性の低下など、XR体験に 悪影響を及ぼす可能性があります。