2017年12月16日土曜日

Re: Surface View Problem

おもしろアクションアプリ「スーパーへーげんフレーンズ」のリリースも近づき、 様々なデバイスでテストプレイを行っています。 NEXUS 5X さんが Andorid 8.0 "OREO" にパワーアップしたということもあり、 Android 4~8 という幅広いバージョンで実機テストが行えます。
OREO のスピード、見せてもらうぜ!



うわぁ、この現象、すごい既視感(デジャブ)があると思ったら、以前にも似たようなことやってました。
多様性ゆえの混沌~発見!バグランド

エクスペリアさん(4.4.2):速いぞ、優秀
アクオスさん(5.1):ぎりぎり許す
ネクサスさん(8.0):ちがうだろー、遅いわ!
と、いう感じでいつも通りの、エクスペリアさんが速くて他がイマイチという結果です。 解像度の違いも影響していると思うので、(エクスペリアは720x1280、他は1080x1920)単純に比べられないのですけどね。 もちろん低解像度の方が描画するドット数が少なくなるので負荷は小さく、処理は速くなります。

AndroidのSurfaceViewの基礎
こちらの記事によると

SurfaceViewの上に普通のUI要素(ボタンとか)を重ねてもOKだけど、パフォーマンスは悪化するよ。
らしいです。 たしかに、SurfaceViewの上に普通のボタンとか重ねてるんだよなあ…。

ハードウェアアクセラレーションを使用する(1)
こちらの記事を参照して、アクセラレーションを任意にオンオフしてみました。

false:
NEXUS 5X で、問題のシーン、おおむね7.2以上、最低値6.8。
true:
NEXUS 5X で、問題のシーン、おおむね5.0付近、最低値4.4。

この結果からデフォルトだとオンになっているようです。 何でオンだと逆に遅くなるんだ? っていうことですが、SurfaceView の仕様とかみ合っていないから? なのかもしれません。 SurfaceView は昔からあるクラスで多分、2.2くらいの初期から存在するのではないでしょうか? なので、 イマドキな仕様とは相性が悪いのかもしれません。

↑マル秘データの類はずっと表示していた。 見えるからこそ気になるもの。 そして、それ…。気になるというのが癌…。 ユーザーは案外、気にしない、そんなこと。 数字、データ値…そのようなものに振り回されていては、見誤る、大局を。 大事なのは体感(速度)である。

最近のやり方として、canvas を使わない描画方法が本流であり、 多分、それをすれば NEXUS 5X(Android 8.0) が最速になるのだと思います。 しかし、それをやったら Android 4.x系が遅くなる可能性もあります。 絶対に、そんなことはない! Android 4.x系でも速いよ。っていう保証があるのなら、最先端を勉強して取り入れようという 気に(ちょっとだけ)なるのですが…。 だけど、世界で売る(無料だから売らないけど)ことを考えると、Android 4.x系はまだまだ多いので非常に大事なお客様なわけです。

古い方と新しい方、どっちに合わせるのが正解? これはもう、もう開発者の労力が小さくて済む方に合わせるのが正解、 でいいんじゃないかな。

タッチ(操作)の反応と、音の発生、パラメーターの増減などはメインスレッドで管理しているので、 見かけ上の描写にかかわらず一定速度です。 見かけ上は1秒間に7~12回程度しか、絵が更新されませんが、内部処理は毎秒25回行っています(こちらはデバイスによらず速度が一定)。 この部分が、ギリギリでゲーム性を保証しているように思えます。 結果的に、使用する端末によって描画速度が異なるのですが…。 もっとも遅い NEXUS 5X(Android 8.0)であっても、若干もっさりするけどプレイは楽しめます。 逆に Android 4.x系だと速すぎて、ブレーキ処理が作動する前の一瞬はビュンビュンしすぎなくらいです。

今回はメインのデバッグ機が 5.x の Lollipop 、シャープ国産機を使用しています。 メインマシーンを中心にすえてチューニングを行ってきたわけです。 他のデバイスだと、チューニングがずれることがあってもおかしくないのです。

Android 特有のこの「ごった煮」「チャンポン」感は、カオス(混沌)そのものです。 そういった意味では、デバイスの反応をはるかに制御・管理しやすい iPhone の方が気持ちよく開発できるはず。 大手企業のゲーム開発などでは、Android で各機種整合性を取ることに悩み、苦しんだはずです。 あらゆる機種で不備なく動くことを求めたら、労力は青天井に上がっていく…、そんなこと、営利企業にできるわけがない。 そこで、入念なマーケティングを行い、ターゲットを絞り、そこを中心にして開発する。 今であれば、Android 4.x 以下をざっくり切り捨てても、日本や北米がメインターゲットなら問題ないでしょう。 そう、企業が拾いきれないユーザーという者がいるのだ、確かに。そこを拾わずして、私共のような弱小に勝利はあるのでしょうか?

0 件のコメント:

コメントを投稿