スクフェスと相性の悪いAndroid端末について

ラブライブスクールアイドルフェスティバル(スクフェス)とAndroidはミョーに相性が悪いという不満を家族からぶつけられていた。スクフェス自体はそこまで重たいゲームではないのだがAndroid端末によってはガタついたりタップの反応が良くなくてまともにゲームができないらしい。ということで僕も余らせてたSH-02Fという当時ハイエンドの性能を誇っていた端末に入れて試してみた。


結果はひどいものだった。まずフレームレートが安定しない。正しいタイミングでタップしているはずなのにBADやMISSになる、挙句に曲の途中で0.3秒くらいフリーズするというような現象が発生しどれだけ設定を弄っても改善しない。比較対象としてアイドルマスターシンデレラガールズスターライトステージ(デレステ)を入れてみたが、こちらも似たような現象は発生するもののスクフェスよりはましである。


設定変更の一環で
・描画負荷を減らすためにレンダリング解像度を落とす(adb am display-size 720x1280などをやる)
・サーマルスロットリングをさせないように冷え冷えの場所でやる
などをやってみたが現象はあまり改善しなかった。


2週間ぐらい断続的に考えた結果、そもそも処理が重すぎてガタついているわけではなく、処理が軽いせいで変なことになっているという可能性に思い当たった。デレステでは2D軽量より3D軽量にしたほうが安定しているような気がしたのだ。スクフェスは処理が軽すぎるせいで、スマホのCPUが「あ、さぼっていいや」と判断してしまった結果、直後に来た処理にリアルタイムに反応できない状況になっているのだ。多分、直近のCPU使用率が下がっていたらCPUのクロックと電圧を下げる、みたいな制御が行われている。ゲームの譜面は緩急がついており、その緩の部分で下がったCPUパワーのまま急のゾーンに突入する、そうするとフレームレートは下がるしタップの反応も遅れ、ゲームとしてむちゃくちゃになる。


これを改善するために裏で無駄にCPUパワーを消費する処理を動かしてみた。下記のようなスクリプトをadb shellで動かした。

while true
do
echo "!!"
sleep 0.01
done

結果として上記スクリプト実行中はゲームの滑らかさが大幅に改善されかなり安定して60fpsが維持されるようになった。タップの不安定さはまだちょっと残っているが。で、結局こういうことしないとゲームがまともに遊べないんならちょっとつらいよね。端末によって違うし表面上のスペックでは全くわからないよね。悩ましいなあ、