月別アーカイブ: 2014年7月

Android Wear の 3D 描画 と NDK r10

Android Wear で flatlib3 の Model data Viewer を起動しています。
OpenGL ES 3.0 を使用。

lgw100_flview1.jpg

lgw100_flview2.jpg

NDK r10 で 64bit と OpenGL ES 3.1 に対応しています。
コンパイルは通りましたがテスト環境がまだありません。
ABI は下記の通り。(こちらにまとめています)

Android
---------------------------------------------------
armeabi            ARMv5TE     32bit --
armeabi-v7a        ARMv7-A     32bit VFPv3-D16
armeabi-v7a-hard   ARMv7-A     32bit VFPv3-D16
arm64-v8a          ARMv8-A     64bit AArch64 NEON
x86                IA32/x86    32bit SSSE3
x86_64             AMD64/x64   64bit SSE4.2
mips               MIPS32 R1   32bit FPU
mips64             MIPS64 R6   64bit
iOS
---------------------------------------------------
armv6              ARMv6       32bit VFPv2
armv7              ARMv7-A     32bit VFPv3-D32 NEON
armv7s             ARMv7-A     32bit VFPv4-D32 NEON
armv64             ARMv8-A     64bit AArch64 NEON
i386               IA32/x86    32bit SSE
x86_64             AMD64/x64   64bit SSE

関連エントリ
Android Wear にゲームを移植
Android Wear LG G Watch (LG-W100) の速度(実測)
Android Wear LG G Watch (LG-W100)
Android Wear LG G Watch の GPU

Android Wear にゲームを移植

ゲームを Android Wear に移植してみました。

chiraksw_capture4.jpg

Google Play ChiRaKS Android Wear
解説ページ

● Install 方法

連動してる Smartphone/Tablet (Handheld 端末) の方から Google Play にアクセス
してインストールします。
Android Wear (Wearable 端末) にも自動的に転送&インストールが行われます。

● 起動手順

 1. 画面を2回タップして下からシステムメニューを引き上げ
 2. 一番下の 「開始…」 からアイコンを選択

● Uninstall 方法

Smartphone/Tablet (Handheld) 側でアンインストールすると
Android Wear (Wearable 端末) からも削除されます。

● アプリの中断&終了手順

画面全体を手で覆うと時計画面 (ロック画面) に戻ります。
完全に終了させるには Menu から “終了” を選んでください。

● Android Studio

SDK の Android Wear サンプルは全て Android Studio 向けです。
Eclipse+ADT ではプロジェクトの新規作成に失敗したので
サンプルを参考に Android Studio で作成しています。
もともと ZWatch で動いていたので修正は Project まわりと UI のみ。

● NDK

NDK のサンプルも Android Studio に変換できますがビルド環境も統合されます。
src 以下にあるファイルはすべてビルド対象となるようです。
C/C++ は独自の Build ツールを使用していたので分離しました。
最終的に build/intermediates/ndk/debug, release 以下にファイルが
存在していればパッケージに含まれるようです。
ただし Clean で消えます。

● 実行&デバッグ

デバッグは直接 Android Wear (Wearable 端末) 上で行えます。
adb で apk の install も可能。
アプリ管理メニューがないので削除は adb uninstall が必要です。

Round, Square 2種類あるので画面に合わせたレウアウトの調整が必要です。
サンプルにもある WatchViewStub では、それぞれ個別に layout ファイルを
持つことができます。

デフォルトでは画面のスライド(画面左から右フリック)で Back になります。
またサンプルに組み込まれている DismissOverlayView は画面長押しを判定しています。
ゲーム操作と相性が悪いので Activity の dispatchTouchEvent() で使い分けています。
画面全体を手で覆う操作 (ロック画面への復帰) はそのまま使えます。

● Handheld 側アプリの追加

アプリケーションパッケージは単体では配布できず Handheld 側のアプリが必要。
Android Studio の New Module… であとから追加することが可能。
内容は通常の Android アプリと同じです。
Wearable 側のアプリ名を wapp , Handheld 側のアプリを happ とすると、
下記のファイルを編集します。

happ/build.gradle

すでに dependencies block があるのでその最後に追加。

dependencies {
    ~
    wearApp project( ':wapp' )
}

↓ settings.gradle にも追加

include ':happ', ':wapp'

Handheld 側 happ を Release build すると assets に wapp の apk が入ります。

関連エントリ
Android SmartWatch ZWatch で 3Dゲーム (ChiRaKS)
Android SmartWatch SmartQ ZWatch (3) 腕に関数電卓
Android LiveView MN800 プラグインの作り方

OpenGL ES 3.1 対応 GPU

Khronos より 2014/07/11 現在、OpenGL ES 3.1 に対応している GPU。

Intel HD Graphics Atom Z3700/N/J
ARM Mali-T760
ARM Mali-T628
ARM Mali-T604
PowerVR Rogue G6230/6200
PowerVR Rogue G6430/6400
Vivante GC7000
NVIDIA Tegra K1
NVIDIA GeForce 600/700/800M
NVIDIA Quadro K

OpenGL ES 3.0 世代の GPU もそのまま 3.1 にも対応しているので、
今後増えていくと思われます。
Intel HD Graphics (BayTrail/IvyBridge 世代) は OpenGL 4.0/4.1 止まりで
ComputeShader に対応していませんでした。
OpenGL から ComputeShader を使えるようになるのは ES 3.1 の方が先かもしれません。

実際に利用するには OS/SDK/Driver 等の対応が必要になります。
Android L 以降で対応予定。
iOS の場合 ES 3.1 ではなく PowerVR G6430 向けに Metal が発表されています。

関連エントリ
CPU 負荷が低い 新しい 3D API
OpenGL ES 3.1 は OpenGL 4.x 相当で ComputeShader に対応

Android Wear LG G Watch (LG-W100) の速度(実測)

G Watch のスペックは Cortex-A7 1.2GHz Quad core ですが、
アプリケーションの実際のパフォーマンスは予想を大きく下回るものでした。
今回の計測結果から逆算すると 700MHz の Single core 相当となります。

VFP Benchmark による計測結果

SingleThread SP 最大  : 1.360 GFLOPS
MultiThread  SP 最大  : 1.360 GFLOPS

同じ Cortex-A7 1.2GHz Quad core (MT8125) の Tablet との比較は下記の通り。

単精度 Float        LG G Watch        Yoga Tablet
                    MSM8226           MT8125
----------------------------------------------------------
Single Thread       1.360 GFLOPS      2.374 GFLOPS  (x1.7)
Multi Thread        1.360 GFLOPS      9.474 GFLOPS  (x7.0)

・GFLOPS の数値が大きいほうが高速

MT8125 の計測結果は 1.2GHz ほぼ想定通りの速度が出ています。
1.2(GHz) * 4(core) / 0.7(GHz) = 6.9 倍

以下詳細データ

SingleSP  Single-Thread
命令                   時間(sec)       MFLOPS
---------------------------------------------
VFP    mul              6.331           631.8
VFP    add              6.011           665.5
VFP    fmacs            6.062          1319.7
VFP    vfma.f32 s       6.032          1326.4
NEONx2 vmla.f32 d      11.833          1352.1
NEONx2 vfma.f32 d      11.859          1349.2
NEONx4 vmla.f32 q      23.621          1354.8
NEONx4 vfma.f32 q      23.542          1359.3

・MFLOPS の数値が大きいほうが高速

SingleSP  Multi-Thread (4 Thread)
命令                   時間(sec)       MFLOPS
---------------------------------------------
VFP    mul             24.405           655.6
VFP    add             24.063           664.9
VFP    fmacs           24.109          1327.3
VFP    vfma.f32 s      24.049          1330.6
NEONx2 vmla.f32 d      47.458          1348.6
NEONx2 vfma.f32 d      47.653          1343.0
NEONx4 vmla.f32 q      94.490          1354.6
NEONx4 vfma.f32 q      98.163          1304.0

・MFLOPS の数値が大きいほうが高速

Cortex-A7 は NEON も 32bit 単位なので VFP と同じ速度になります。
(Cortex-A7 の浮動小数点演算速度)
Krait ではなく Cortex-A7 が使われていることが結果からもわかります。

やはり cpu0 だけが 787MHz で動いているようです。(cpu1-3 は idle 状態)

cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state

300000 0
384000 4
600000 73
787200 8799475
998400 174
1094400 109
1190400 2280

ポリゴンの表示は可能です。
gwatch_lgw100_02.jpg

関連エントリ
Android Wear LG G Watch (LG-W100)
Android Wear LG G Watch の GPU
MediaTek MT8125/8389 Cortex-A7 の浮動小数点演算速度

Android Wear LG G Watch (LG-W100)

Android Wear の利用には連携を行う Android 端末が別途必要です。
通信や設定管理など多くの部分を連携する Android 端末に依存しています。

しかしながら Android Wear のハードウエアは単独で動作する Android 端末と
違いはなく、OS も最新の Android 4.4W (API Level20) 。
専用アプリケーションのインストールも可能となっています。

LiveView 系 SmartWatch がホスト端末のリモートモニタとして機能していたのに対し、
Android Wear の場合は主従が逆です。
通信や操作上の都合など、足りないものを補うために連携した端末を利用している形です。

スマートウオッチには大きく分けて、単独で使用できるものと
自分ではアプリが動かないクライアントタイプの 2種類あります。

1. クライアントタイプ (ホスト端末が必要)
 ・通知だけ受けるタイプ
 ・アプリケーションはホスト側で動き、入出力だけ行うもの(SONY LiveView)

2. 単独で動作するタイプ
 ・機能固定 (スポーツなど特定用途向け)
 ・独立したコンピュータとして機能するもの

Android Wear は独立したコンピュータとして機能しますが、
連携した Android 端末が近くになければ活用できない仕組みになっています。
通知などのネット接続はもちろん、Android Wear の有効な入力手段は音声なので
ボイスコマンドやテキスト入力にもインターネットが必要になります。
逆に歩数計 (Fit) のように、ネット接続がなくても特に困らないアプリもあります。

● SmartQ Z Watch との比較

gwatch_lgw100_01.jpeg
↑左が LG G Watch LG-W100, 右が SmartQ Z Watch

見た目はほぼ同じ大きさで、数値上は G Watch の方が少し小さいようです。
実際に手にすると G Watch の方が表面積が大きくだいぶ薄く感じます。

スペック        LG G Watch LG-W100      SmartQ ZWatch
-------------------------------------------------------------
SoC             Snapdragon 400 MSM8226  JZ4775
CPU             Cortex-A7               XBurst
ISA             ARMv7A                  MIPS32-R2
Clock           1.2GHz                  1.0GHz
Core            4 core                  1 core
FPU             VFPv4+NEON              FPU
3D GPU          Adreno 305              --
OpenGL          ES 3.0                  --
OS              Android 4.4W            Android 4.4 (GApps無し)
RAM             512MB                   512MB DDR
ROM             4GB                     4GB
Display         280x280 (1.65inch)      240x240 (1.54inch)
Bluetooth       4.0                     4.0
Wi-Fi           --                      b/g/n
Size            46.5x37.9x9.95          49.9x38.5x12.2
Weight          63g                     42.5g
Battery         400mAh                  300mAh
Application     Wear専用                Android汎用
Sensor          Acc,Gyro,Compass,Mic    Acc,Mic
Button          --                      Power,Back
Connector       充電(USB)               3.5 Headphone(USB/充電兼)

Android Wear LG G Watch の GPU
SmartQ Z Watch Specifications

2014/07/11修正: G Watch は 4core のうち 1core しか使われてないものと考えられます(詳細はこちら)

◎時計として

Z Watch は腕の傾きで画面を表示させるオプションがありますが、
何かと誤動作が多く不安定です。
傾き以外のスリープ解除はボタン操作なので、
腕時計としては時刻を確認しづらいのが難点。

LG G Watch は常に画面を表示させておくことが可能です。
一定時間経つと背景が暗転して輝度が落ちますが時刻表示は残ります。
時計として活用するには十分でしょう。
バッテリーの持ちが心配なら完全に画面 OFF にすることもできます。
この場合も画面に触れるだけですぐ点灯するので面倒はありません。
Z Watch 同様に腕の傾きでも復帰します。
腕につけていると知らないうちに画面が光ってる場合あり。

待機状態への移行 (画面全体を手で覆う操作) は、輝度センサーではなく
画面の広範囲のタッチで判定しているようです。
3本指のタッチでも認識します。

◎ストレージ

Z Watch は USB 接続 (MTP) で直接データを送ることが可能。
音楽データを転送すればプレイヤーとして利用できます。

G Watch の内部ストレージには直接アクセスすることができません。
端末情報にストレージや空き容量の項目が無いのでもともと想定していないようです。
adb 接続では普通にアクセス可能で、/sdcard/Music や DCIM もありました。
3GB 近く空いていることを確認。

◎アプリケーション

Z Watch は通常の Android をスマートウオッチ向けにカスタマイズしてあります。
非常に小さい Android Tablet のようなもの。
普通のアプリも動きますが、画面が小さいため使い物になるかどうかはアプリ次第です。
特に操作面で難があります。

G Watch は Android 端末側でインストールすると自動的に同期が行われます。
専用の管理画面はないので、正しくインストールされているのかどうか
少々不安になることがあります。
デバッグ実行できるので adb を使った直接 install も可能。

一見そのままアプリが動く Z Watch の方が便利そうに見えますが、
使ってみると操作上の問題が非常に大きいことがわかります。
小さい画面にレイアウトを合わせるだけではだめで、細かい操作や文字入力が苦手です。

Android Wear はこれらの問題を解決することに重点が置かれているようです。
極力操作しなくて済むよう徹底されており、文字入力は音声を用い
アプリの導入管理や設定も連携した Android 端末側で行います。
本体の操作は画面のスライドなど非常に簡単なアクションのみ。

その代わり専用に作られたアプリケーションが必要です。
当初は数が少なくても、使えるものだけ揃っていることになります。
快適さや実用度は大きく上回っていると言えます。

●トラブル等

Android 4.3 以降の条件は結構敷居が高く、日本だと半年前に発売された
スマートフォンでも使えない可能性があります。(半年前)
手持ちのスマートフォン端末にも無かったので Nexus 7 とペアリングしました。

最初アプリケーションの導入ができず、G Watch に反映されない問題ではまりました。
Android Wear アプリの再インストールや、LG G Watch の初期化(リセット)
が有効でした。
試してから気がついたのですが、メニューにある「端末をリセット」は
再起動ではなく端末の初期化(消去)のことでした。

●最後に

4 core CPU に 3D GPU 搭載と、予想以上に性能が良かったので今後登場するアプリや
さまざまな活用方法に期待できます。
Chromecast よりも総合スペックは高いです。
普段腕時計している人にとっては、時計として使える点も重要でしょう。

2014/07/11訂正: 実測結果より、cpu0 しか使われておらず実質 single core 700MHz 相当でした(詳細はこちら)

関連エントリ
Android Wear LG G Watch の GPU
Android SmartWatch ZWatch で 3Dゲーム (ChiRaKS)
Android SmartWatch スマートウオッチのスペック比較表
Android SmartWatch SmartQ ZWatch (3) 腕に関数電卓
Android SmartWatch SmartQ ZWatch (2)
Android 4.1 SmartWatch SmartQ Z Watch
Android LiveView MN800 プラグインの作り方
LiveView MN800 Android のマイクロディスプレイ