fc2ブログ

Androidアプリ開発::drawBitmap考察

 前回のエントリの最後に追記として、ePadはPortraitよりもLandscapeの方が動作が速い、と書きました。より正確には、画面描画が速い、ということだと思います。そこで、描画速度を計測する簡単なアプリを作ってみました。
land_1port_1
 SurfaceViewを構築し、そこに100回画像を貼り付けて表示する時間を計測し、フレームレートを計算します。SurfaceViewはダブルバッファリングをシステムがやってくれるそうで、二枚のプレーンに交互に描いて表示する関係でちらつきますが、今回の趣旨とは関係ないのでそれは放置します。何を言ってるのか分からない人は、最後に今回のアプリのURLを貼っておきますので、自分で試してみてください。
 上の写真の左がLandscapeでの結果、右がPortraitでの結果です。余談ですが、IS03はメモリ液晶に表示されたアイコンの向きで、今端末がLandscape状態なのかPortrait状態なのか分かります。それだけではナンですので、端末はLandscapeなのに画像を反時計回りに90度回転させて貼り付けることでPortraitに見せかけるもの(Portrait Fake)と、その反対にPortraitでLandscapeに見せかけるもの(Landscape Fake)も作ってみました。まずはIS03の結果から。それぞれ2回計測しました。

Landscape
land_1land_2
一回目:28.91 fps 二回目:29.73 fps

Portrait
port_1port_2
一回目:31.97 fps 二回目:33.15 fps

Portrait Fake
portfake_1portfake_2
一回目:29.07 fps 二回目:29.43 fps

Landscape Fake
landfake_1landfake_2
一回目:28.69 fps 二回目:33.03 fps

 IS03はLandscapeよりもPortraitの方が、ほんの僅かに速いようですが、ほぼ誤差の範囲です。回転させることによる速度低下も、誤差程度しか見受けられません。

 これを踏まえた上で、ePadを試してみましょう。こちらは3回ずつ計測しています。

Landscape
land1land2land3
一回目:32.08 fps 二回目:32.89 fps 三回目:31.87 fps
 意外なことに、IS03のPortraitとほぼ同じ値を出しています。と言いたいところですが、明らかにIS03よりもドロイドの密度が低い。どうやら画面サイズに対して、ドロイドが小さく表示されているようです。IS03の方が解像度は高いのに。うすうすは気が付いていたのですが、どうもAndroidはそのまま画像を貼ったつもりでも、dpiに合せて適当なサイズに変えられてしまうようですね。まあその辺は後々ということで、今回はIS03とePadの直接比較は参考程度にしておいてください。

Portrait
port1port2port3
一回目:7.59 fps 二回目:7.72 fps 三回目:7.51 fps
 さて問題のPortraitですが…想像以上にヒドいですね。これでUIをスクロールしようとか、カクカクもいいとこです。想像ですがこの遅さは、ビデオチップだかDACだかが本来ピボットに対応してないところを、OS側が無理やりソフトウェア側でVRAMを横にして描画してるんじゃないかと。この端末はPortraitで使っちゃいけないというのがよく分かります。
 そこで、縦長の画面として使いたい場合でも、Landscapeのまま回転させて描いてみればいいじゃんってのが次なんですが…

Portrait Fake
portfake1portfake2portfake3
一回目:27.20 fps 二回目:31.93 fps 三回目:30.94 fps
 Portraitよりも圧倒的に速く、Landscapeと比べても回転による速度低下はほんの僅かで描画できました。一度にたくさん描画したり、もっと大きな画像を描画した場合は多少変わってくるでしょうが、それでもPortraitよりも、Landscapeで回転させた方が速くなるという状況は少なくないのが分かると思います。

Landscape Fake
landfake1landfake2landfake3
一回目:6.86 fps 二回目:6.90 fps 三回目:7.19 fps
 こうなってしまっては意味はありませんが一応。なまじ回転による速度低下が僅かなところがますます切なくなります。

 まっとうなメーカーが作った製品ならここまでヒドいことはないとは思いますし、あるいはファームによっても違うのかもしれませんが、ここまでLandscapeとPortraitで描画速度の違いがある端末が世にあるってのは事実なワケで。たまたまePadはLandscapeがPortraitよりも圧倒的に速かったけれど、反対の製品もひょっとしたらあるかもしれないんです。現にIS03は誤差程度ですがPortraitの方が速いし。なのでアプリ側としては、初回起動時にLandscapeとPortraitで描画速度を計測して、あまりにも速度差が大きい場合はそれを考慮して速い方の向きと回転で対処させるのが親切かもしれません。面倒だけど。

 尚、ePadの激遅状態を除いてフレームレートが30 fps前後に集中しているのは、ダブルバッファリングの切り替えタイミングと液晶のリフレッシュレートの関係じゃないかと思います。なので、あまり細かい数値の違いは参考にならないかもしれません。

ダウンロード
DrawBitmapOrientationTest apk(PCからのダウンロードは拡張子がzipになる場合がありますので、apkに直してください)
DrawBitmapOrientationTest ソース(Eclipseプロジェクト)
スポンサーサイト



コメントの投稿

非公開コメント

プロフィール

きくちいさを

Author:きくちいさを
赤メガネー!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

カレンダー
04 | 2023/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
QRコード
QR
楽天で探す
楽天市場