ScreenTest.Proスコアの仕組み
このページでは、スコアの測定方法と計算式を説明します。対象のベンチマークバージョンは2.1.0です。説明と実際の動作が異なる場合は、不具合の可能性がありますのでお知らせください。
このベンチマークで測るもの
多くのグラフィックスベンチマークは負荷を固定してフレームレートを測ります。本テストは逆に、目標フレーム時間を固定し、端末がその時間内で維持できる最も重い負荷を探します。各シーンの「最大安定負荷」、たとえば星雲粒子840,000個を取得し、そこからスコアを作ります。
この方式にしたのは、ブラウザのフレームレートが画面の更新レートで頭打ちになりやすいためです。固定した軽い負荷だけでは、速い端末にどれほど余裕があるか分かりません。処理できる負荷を探すことで、5年前のスマートフォンからデスクトップGPUまで、同じシーンと判定基準で比較できます。
実行内容
標準プロファイルは5つのシグネチャーシーンと1つの対照からなり、それぞれ異なる要素へ負荷をかけます。
| シーン | 負荷単位 | 主な負荷 |
|---|---|---|
| 星雲ドリフト | GPU粒子 | シェーダー粒子更新+フィルレート |
| ネオン都市 | インスタンス | インスタンス描画ジオメトリのスループット |
| リキッドクローム | 内部解像度 | レイマーチング/フラグメント負荷 |
| 星屑カスケード | CPU粒子 | JavaScript物理演算+バッファ転送 |
| ハイパーノヴァ | 爆発粒子 | 複合的な最終シーン |
| Canvas 2D 基本的な円 | 2D円 | WebGLを使わないCPU依存の対照 |
描画はピクセル比を1.5×に制限し、内部サイズにも上限を設けます。5Kモニターと1080pノートPCが同程度のピクセル数を処理するためです。乱数にはシードを使い、シミュレーションの時間刻みも固定しているので、同一バージョンは毎回同じ処理を行います。
安定性の判定
エンジンはFPSカウンターを読みません。ブラウザのアニメーション時計からフレーム時間を約0.7〜1.6秒のウィンドウへ集め、各ウィンドウに2つの条件を課します。
- 平均フレーム時間 ≤ 16.67 ms × 1.08
- 95パーセンタイルフレーム時間 ≤ 16.67 ms × 1.28
p95を使うのは、遅いフレームを平均値に埋もれさせないためです。100フレームが速くても6フレームが大きく遅れれば、操作時には引っかかりを感じることがあります。ただしp95もすべての遅延を表すわけではなく、平均値と合わせて判定します。
16.67 msの予算は画面のリフレッシュレートにかかわらず固定です。120 Hz画面は軽い負荷なら8.3 ms間隔で表示しますが、合格には毎秒60回相当の予算内に留まれば十分です。高リフレッシュレートの端末にも、同じ合否基準を適用します。
探索手順
各シーンはpreflight → baseline → warmup → ramp → bracket → confirm → anchorという状態機械を進みます。
- Baselineで既知の軽い負荷を測り、熱状態の基準にします。
- Rampで、合格ウィンドウごとに負荷を約1.5倍へ増やし、初めて失敗するまで進みます。
- Bracketで最後の合格と最初の不合格の間を二分探索し、範囲を約6%まで狭めます。
- Confirmでは候補負荷で3ウィンドウ連続の合格を要求し、機会は4回です。早い段階の1回の失敗は回復できます。2回連続で失敗するか、3連続に届かず機会を使い切ると候補を下げます。
- Anchorでもう一度baseline負荷を実行します。開始時より15%以上遅ければ、実行中に端末状態が変わりました。熱による性能制限や他のシステム負荷が考えられるため、変化を結果に記録し、そのシーンを性能変動ありとします。
すべての段階に時間制限を設けています。1シーンは30秒、全体はプロファイルのシーン数から算出し、標準6シーンでは約197秒(およそ200秒)です。タブをバックグラウンドにすると現在の測定区間を無効にして一時停止します。サイズ変更時はシーンを再構築し、再度ウォームアップします。例外や応答停止にも終了経路を用意しています。
負荷からスコアへ
採点は記録結果だけで決まる純粋関数で、手計算もできます。
- 各シーンの最大安定負荷を、そのシーンの基準負荷で割ります。基準負荷はバージョンごとに固定した調整用の定数で、おおむね2025年の堅実なデスクトップが1.0付近になります。
- 1シーンが結果を支配したりゼロにしたりしないよう、比率を[0.05, 20]に制限します。
- 制限後の比率を加重幾何平均で組み合わせます。5つのシグネチャーシーンが大部分、Canvas 2D対照が10%です。幾何平均はバランスを評価します。1項目だけ突出し他が弱い機種より、全項目で優れた機種が高くなります。
- 1000倍し、安定性の減点を適用して丸めます。性能変動が検出されたシーン1つにつき3%、合計最大10%です。すべてのシーンで有効な測定値が得られなければ、スコアは0です。
性能ランクはスコア帯の名前です。入門は1000未満、標準は1000~2999、高性能は3000~8999、最高性能は9000以上です。基準スコア1000に対して1×、3×、9×が境界になります。端末全体の評価ではないので、シーン別負荷と結果の状態も合わせて確認してください。
比較を無効にする条件
- 異なるベンチマークバージョンは比較しません。 シェーダーを1つ変えれば負荷も変わります。結果表のバージョン文字列はスコアの一部です。
- 互換モード実行(WebGL2なし)はクラシックシーンだけを使い、明確な表示の下、独立したスコア空間で採点します。
- 性能変動のあった実行は、その状態を結果と匿名サンプルに記録します。公開トップスコアには正常に完了した実行だけが掲載されます。
実行間のばらつきと目安
電源を接続して他の作業を止めても、結果には多少のばらつきがあります。バッテリー駆動、省電力設定、本体の温度によっては差が大きくなります。一度の小さな差より、同じ条件で繰り返した結果を見てください。数値の活用範囲はブラウザベンチマークで測れることで説明しています。