📊

ChromebookのAndroidランタイムでゲームが遅かった理由を探ってみる

2024/10/16に公開

私の技術以外のことを書いているブログでは、ASUS Chromebook CM30 DetachableというChromebookでAndroid向けのゲームを動かしてみたところ、遅くてまともにプレイできる状況ではなかった、という話を書きました。この記事ではその原因を推測するため、いくつかベンチマークを取ってみます。Chrome OS上のAndroidランタイム(ARCVM)と、比較用の安価なAndroid端末で計測したり、Chrome OSのネイティブなChromeや、Android上のブラウザーで計測したりしてみます。

使用した端末の情報

  • Chrome OSの端末:
    • ASUS Chromebook CM30 Detachable (CM3001)
  • Androidの端末:

冒頭で紹介した記事で触れた通り、上記のChromebookではグルミクという音ゲーがとてもプレイしづらかった一方、より安価なAndroid端末であるAQUOS wish4では(演出を抑えるなどの設定はしたものの)問題なくプレイできました。改めてスペックを比較してみるに、数字の上ではCPU・GPU共にAndroidのほうがやや勝っているように見えます[1]。とはいえ、それだけでプレイ体験の差を説明できるほどのものとは思えませんでした。やはりChrome OSのAndroidランタイムによるオーバーヘッドが大きいのでしょうか?

詳細なスコアはリポジトリーに載せておきます(スクショのものが大半ですみません)。

ベンチマーク1: Androidランタイム上でのベンチマーク

まずは、Geekbenchというツールを使ってCPUとGPUの性能を比較してみましょう。

OS CPU/Single-Core CPU/Multi-Core GPU
Chrome OS (ARCVM) 642 1659 NA(データ取れず)
Android 689 1822 1218

Chrome OSでは直接Geekbenchを実行できないため、ここでいう「Chrome OS」はChrome OSのARCVM上で実行した結果を表しています。CPUの結果はAndroidの方が少し高いようです。これは前述の通りクロック周波数が少し高いCPUなので、予想通りの結果でしょう。

一方、GPUについては残念ながらChrome OSでベンチマークを実行すると、全く進行しないまま開始数分後にクラッシュ💥してしまい、結果が取れませんでした。今回気になっているのはゲームの性能なので、差が出やすそうなのはGPUの方でしょうし、残念です。

ベンチマーク2: ブラウザー上でのベンチマーク

今回はChrome OSのネイティブなアプリケーション(すなわちChrome)と、同じマシンのARCVM上で動くアプリケーションを比較することで、ARCVMにかかるオーバーヘッドも調べてみます。御存知の通りChrome OSではChromeしかネイティブに動くアプリケーションがないので、ブラウザー上でベンチマークを取ることにしました。

利用したブラウザーは次のとおりです:

  • Chrome OSの端末:
    • ネイティブのブラウザー
      • Chrome OS: 129.0.6668.99 (Official Build)
        • (上記と同じ)
    • ARCVM上のブラウザー
      • WebView Test: 1.3.9
        • ARCVMでは紛らわしくなるのを避けるためか、Android版のChromeをインストールできなかったので、代わりにこちらのアプリケーションを使いました
      • WebViewのバージョン: 不明(もしかしてネイティブのChromeを使っている?)
  • Androidの端末:
    • ネイティブのブラウザー
      • Chrome: 129.0.6668.100
        • 本当はAndroidもWebView Testで揃えたかったのですが、結果の取得がうまくできなかったので止むなくChromeにしました

Speedometerの結果

Speedometerは、Webアプリケーションのパフォーマンスを測定するツールです。TODOアプリなどのような、実際に使われるであろうアプリケーションを自動で実行して、JavaScriptやDOM操作のパフォーマンスを測定します。

計測結果は次のとおりでした:

OS (ブラウザー) スコア 誤差[2]
Chrome OS (ネイティブ) 3.32 ±13.28%
Chrome OS (ARCVM) 3.41 ±4.05%
Android (Chrome) 4.83 ±7.42%

意外や意外、ARCVM上のブラウザーの方がネイティブよりも若干高いスコアを出しました。Android端末の方はさらに高いスコアを出しています。ブラウザーについては、ARCVMによるオーバーヘッドは特に大きくないようです。

MotionMarkの結果

Speedometerは、JavaScriptとDOM操作のパフォーマンスを測定する一方、ゲームのパフォーマンスに大きく関わるであろう、グラフィック処理の測定は行いません。そこで、MotionMarkというもう一つのブラウザーベンチマークを実行することで、グラフィック処理の性能を調べてみます。

結果は次の通りでした:

OS (ブラウザー) スコア fps 誤差
Chrome OS (ネイティブ) 521.25 45 ±19.28%
Chrome OS (ARCVM) 5.01 60 ±65.07%
Android (Chrome) 14.00 90 ±154.21%

ご覧の通り、随分バラバラな結果になってしまいました。いくつもツッコミどころがありますね🧐:

  • fpsが揃っていないせいで、公平な比較になっていないのではないかと懸念されます
    • 同じ端末のChrome OS (ネイティブ)とChrome OS (ARCVM)とでさえfpsが異なります。恐らく、ネイティブのChromeでは端末の処理性能に合わせて敢えて抑えているのでしょう
      • 先程のSpeedometerでの結果でAndroid版の方がスコアが高かったのも、同様の理由なんでしょうかね
  • そもそもそれ以前に、画面のサイズや解像度が異なるので、純粋にGPUの性能という観点では比較になっていないかもしれません
    • 本当は同じディスプレイに繋いで比較すべきなのでしょうが、Android端末がDisplayPort Alt Modeにも対応していないので諦めました
  • 一番大きな問題として、誤差が総じて大きな結果となってしまいました。これについては原因がよく分かりません...

総評

上記の通り、特にGPUについてのベンチマークにおいて、信頼性がとても低い結果しか得られませんでした。結局肝心の、Chromebookがゲームプレイ時に性能が低かった原因はよく分かりませんでした😩。とはいえ今回の結果から、Android端末のほうがゲームをしやすかったのは、単純にChromebookより(少なくともCPUにおいて)性能が高いという点と、描画するディスプレイの解像度が低いという点が影響したのではないかと推測しました。ざっとググってみた限り、Chrome OSのARCVMによるオーバーヘッドは特に大きくなかったのではないかと思います。

脚注
  1. GPUの性能についてはArmが提供するGPUのデータシートを参考にしました。 ↩︎

  2. ここでいう「誤差」は、各種ベンチマーク項目のうち最も高いスコアと平均スコアとの差の、平均スコアに対するパーセンテージのようです。 ↩︎

GitHubで編集を提案

Discussion