スマホメーカーを含む多くの人が指標として使っているベンチマークアプリですが、実はPlayストア配布版だと本当の端末性能を計測できていない可能性があります。
目次
ベンチマーク時のみ熱制御を緩めるメーカーが続出
新しいスマホやSoCが登場したとき、スマホオタクやメーカーはこぞってAnTuTu Benchmarkや3DMark、Geekbenchなどでスコアを計測しようとします。
しかし、残念なことにベンチマークアプリ起動時のみスコアが良くなるよう調整するメーカーが後を絶たず、もはや公平な比較はできない状態となっています。
さらに厄介なことに、メーカーが不正操作していることを知らないレビュアーが多いため、実際の使用環境とは異なる条件の結果からその端末の性能や発熱特性を分析してしまい、誤った結論に至ってしまっていることもあります。
ベンチマークアプリ自体はおかしな挙動をしていないというのに、メーカーを非難するでもなく「ベンチマークで比較する時代は終わった」などと吹聴する人まで現れる始末です。
ベンチマーク計測が単なる数字遊びにならないようにするにはどうすれば良いか、この記事で紹介します。
公式配布版とは異なるパッケージ名にすることで回避できる
過去70台以上で実際にベンチマークした結果をみてきた中で、AnTuTu Benchmarkや3DMark、Geekbench、PCMarkといったベンチマーク時のみCPU/GPUクロックや熱制御を変更していると判明しているメーカーは下記の通りです。
日本国内を主要市場としているメーカーやGalaxy・HUAWEIスマホは個人的に興味が湧かないので購入しておらず、計測結果は出ていません。
ベンチマーク時のみ制御変更しているメーカー:
- Black Shark
- Infinix
- Meizu
- realme (Snapdragon)
- realme / OnePlus (MediaTek)
- REDMAGIC
- vivo
- Xiaomi
…もう中国系はほぼ全滅ですね。
ASUS ROG Phone 6ではベンチマークアプリ起動時に自動でXモード (パフォーマンスモード) がオンになり通知が出てきます。
Xモードではサーマルスロットリングの挙動などが変更され通常アプリでの挙動とは異なりますが、ちゃんと事前通知していますし手動でオフにすることも可能です。
realmeについてはrealme GT Neo 3でCPUクロックを上限に固定するブーストをしていましたが、私がULに通報すると途端にブーストを止めました。…realmeの他の端末ではブーストを継続しているらしいので反省はしていないようですが。
上記メーカーのOSでは、「実行中のアプリのパッケージ名がベンチマークアプリである」ことを検出することで、CPUクロックを上限に固定したり、サーマルスロットリングが起きないように調整したりしています。
逆に言えば、「パッケージ名がベンチマークアプリと違っていれば、普通のアプリと同じ扱いになる」ということです。
パッケージ名は決め打ちされているため、最近5とは別にリリースされたGeekbench 6は今のところはブースト対象外であることが多いです。
AndroidではAPKをデコンパイルすることで簡単にパッケージ名を変更できるため、パッケージ名のみ違うAPKを用意すればメーカーの不正操作がされていない本当のベンチマーク結果を手に入れられます。
パッケージ名を変更した
- Geekbench
- 3DMark
- PCMark
をこちらにアップロードしています。
AnTuTuは非正規版を制限する機能があるためか、偽装すると起動できなくなったためアップしていません。
- Playストアで配布されているバージョンをインストールする
- 上記のパッケージ名変更版をインストールする
- まずパッケージ名変更版でスコアを計測する
- バッテリー温度を同じぐらいに冷ましてPlayストア配布版でもスコアを計測する
という手順で計測し、Playストア配布版のほうがスコアが明らかに大きければベンチマークブースト・スロットリングをしている可能性が高いです。
Cpu FloatなどCPUクロックをオーバーレイでリアルタイム表示できるアプリを使ってCPUクロックを確認し、Playストア配布版を開いた時に最大値に張り付いたまま・最大値になりやすい状態であれば、スロットリングではなくブーストを行っているということになります。
オーバーレイ表示が消える場合は、開発者向けオプションで「設定での画面オーバーレイを許可する」をオンにしてください。ブースト機能が立ち上がることでオーバーレイが消えるので、設定が必要な時点でブーストしていることはほぼ確実です。
また、3DMark Wild Life Extreme Stress Testがパッケージ名変更版だと完走できるのにPlayストア配布版だと途中で終わる、かなり発熱が大きいという場合も、熱制御を緩めるタイプのベンチマークブーストをしていることになります。
ベンチマークブースト有無での結果の違い
それでは実際に、ベンチマークブーストをしている端末でPlayストア配布版とパッケージ名変更版でどんな違いが出るか見てみましょう。
まずはSnapdragon 8 Gen 2搭載のvivo X90 Pro+から。
画像左側のパッケージ名を偽装した3DMarkでのWild Life Extreme Stress Testではスコア3741→2436で、温度上昇は23℃→37℃ (14℃上昇)でバッテリー消費は11%でした。
画像右側のPlayストア版では安定度95.4%で温度は最大49℃、16%の消費と、偽装版 (=通常アプリと同じ扱い) とは大きくかけ離れた結果になっています。
Playストア版だけの結果を見ると、「vivoは高い3D性能を持続的に発揮するが、発熱やバッテリー消費が大きくなる」という誤った結論に達してしまいかねません。
実際、最高画質の原神を30分間プレイした結果だと平均60.0FPSで1FPSあたり77.61mWの消費電力、バッテリー温度も最高33℃ほどとなっており、「ゲームプレイに十分な性能を維持しつつも、発熱を抑えている」というパッケージ名変更版の3DMarkと同じような結果です。
Playストア配布版で端末の3D性能や発熱特性を分析することは無意味だということが分かります。
なんとXiaomiの場合、熱制御を緩めた結果50℃近くまで発熱してしまい、オーバーヒート判定されてベンチマークが途中で終わってしまうという本末転倒な結果になっています。
ベンチマークスコアを水増しするつもりが何も記録を残せなくなる、実に馬鹿げたブースト手法です。
パッケージ名変更版では問題なくベンチマークを終えられており、温度は最大42℃でした。
なぜベンチマーク時のみ調整することが悪いのか
3DMarkやPCMarkを提供しているUL Solutionsはベンチマーク時の禁止事項を明確にまとめており、
- 他のアプリと同様の扱いで実行する必要がある
- ベンチマークアプリかどうか区別してCPUクロックなどのパラメータを変更することは禁止
- ベンチマーク内容の改変や品質レベルの変更などは禁止
- オーバークロックはしても良いが、ベンチマークアプリ以外でも同じ挙動をする場合に限る
- マルチGPUなど特殊環境の場合は、ベンチマークアプリを検出すること自体は認める
とされています。
「ゲーミングスマホだから最大性能の結果を出さないと」「他のメーカーもやっている」と言い訳するメーカーもいるものの、そもそもが規約違反なので反論にもなっていません。
ベンチマークアプリに最適化した、といえば聞こえは良いですが、やっていることは単なるチート行為です。
ベンチマークはスマホの理論上の最大性能を計測するためにあるものではなく、他のアプリを使っているときと同じ条件での性能を比較するためにあります。
数値をよく見せかける、いわゆる「ベンチマークブースト」とは別に、ベンチマーク結果は一見すると普通なものの、パッケージ名で識別してゲームアプリ等のCPU/GPU動作を制限する「スロットリング」という挙動もあります。
性能向上に伴って発熱が増えることは当たり前なので「スロットリング」については回避手段があるなら大きな問題ではないと考えていますが、「ベンチマークブースト」は他端末との公平な比較ができなくなる、ベンチマークを無意味にする悪質な行為です。
「ブーストされていることを前提として比較すればいい」という人もいるものの、基準が無茶苦茶な比較に何の意味があるというのでしょうか…。
馬鹿馬鹿しいベンチマークブーストをメーカーが止めてくれると嬉しいですが、AnTuTu Benchmarkの数字で一喜一憂している人達がいる限りブーストする方針が変わることはないでしょう。
一般人が騙されるのは仕方がないとしても、SNSやブログ、商業メディアなどでレビューをしている方には「取ったベンチマーク結果が不正操作されていないか」「本当にそれは役立つデータなのか」に気を配り、正確なデータに基づく分析・批評をしていただきたいものです。
「数字は嘘をつかないが、嘘つきは数字を使う」と言われるように、見せかけの数値に騙されないよう心がけないといけません。
実用的な性能を把握するには、原神のような重たいゲームでの平均FPSと消費電力のバランスを見ることも良いと思います。
ただし同じゲームでも初期エリアと後から追加されたエリアでは負荷が全く違うことがあるため、原神の場合スメールでプレイしないと負荷が足りずやたらと良い結果になってしまいます。
おまけ:パッケージ名を変更する方法
ベンチマークアプリのパッケージ名を変更する方法を簡単に紹介しておきます。
変更には
- Apktool
- signapk.jar
- 署名用のキー
が必要です。検索すれば準備方法を紹介している記事がいくつも出るので割愛します。
パッケージ名を変更する手順は以下の通りです。
- ベンチマークアプリのAPKを手に入れる
apktool d [ファイル名].apk
でデコンパイルする- apktool.ymlの中にある
renameManifestPackage: null
をrenameManifestPackage: com.haturamark.damedroid.application
のように適当なものにする - 以下ような4パターンの記号で区切られたパッケージ名を、3.のパッケージ名と同じように置き換える
「.」… com.futuremark.dmandroid
「/」… com/futuremark/dmandroid
「$」… com$futuremark$dmandroid
「-」… com-futuremark-dmandroid - smali、unknownフォルダの中のフォルダ名も3. のパッケージ名と同じように変更する
- (任意) 区別が付きやすいよう、strings.xmlの中にあるアプリ名も変えておく
apktool b [ファイル名]
でコンパイルする- distフォルダにapkが生成されるので、他のフォルダへコピーする
zipalign 4 [ファイル名].apk aligned.apk
を実行するLD_LIBRARY_PATH=./signapk/ java -jar signapk/signapk.jar keys/platform.x509.pem keys/platform.pk8 aligned.apk mod.apk
を実行する (WSLなどLinuxの場合)
これでパッケージ名が変更されたmod.apkが出来上がります。