今回から数回に分けて、弊社が取り組んでいる、消費電力測定キットを使ったゲームアプリケーションの消費電力最適化について、簡単に紹介していきたいと思います。

 

測定キット(powerscouter)

現在のところ試作品のため、測定装置は変更になる可能性があります。

 

測定キットのベースになっているのはAccessory Development Kit(ADK)で、Arduino側で測定した結果をAndroidアプリに送って集積しています。

Arduinoを使うことで、ms(ミリセカンド)よりさらに短い時間単位ns(ナノセカンド)で電力測定を行うことができます。

通常のOS(WindowsやLinux等)では、ユーザーがプログラムできる割り込みはms単位となってしまい、瞬間的な消費電力の増減には向いていません。

 

 

OSのバッテリーAPIを使って測定できるのでは?

Androidでは、バッテリーAPIを通じてバッテリー残量を取得することができますが、1%単位でしか取れないため、変化が発生するまでの計測にかなりの時間がかかってしまいます。

またバッテリー残量の計測はバッテリーの残電圧によって計測しますが、温度や電池の使用回数などによって常に変化しているため、おおよその値でしかありません。(参考:株式会社ベイサン リチウムイオン電池の話 » 15. 残量管理)

ゲーム開発において消費電力を計測する場合について、端末のバッテリー残量を監視する方法の例を上げてみます。

60fpsの場合、16.67msの中に、メインルーチン・レンダリング前処理・レンダリング、を押し込んでいます。また、実際にはVSyncを待つため全ての処理が終わってアイドル状態になっている場合や、バッテリーAPIを処理している状態など、いろんな電力消費ステートに変化した状態を、さらに5分から10分というマクロな単位で計測することになります。

この中で、レンダリング前処理が電池を食っているのか、それともレンダリングが食っているのか?を計測する場合、負荷シチュエーションを変えて、さらに5分以上かけて検証を行って、またパラメーターを変えて・・・と、膨大な時間をかけて検証する必要があります。

そしてこの検証中にもバッテリーは劣化していきますので、測定条件がだんだんと悪化していくことになります。

 

 

 

消費電力を計測するシナリオを考えてみる

前章シナリオでレンダリング前処理がどれぐらい負荷がかかっているのか、を計測したい場合、「レンダリング前処理」→500msのsleep→「レンダリング」→500msのsleepといった処理にすると、測定アプリ上に矩形波のようなグラフが表示されます。

この場合「レンダリング前処理が消費した電力」と「レンダリング処理が消費した電力」の山が交互に出てきますので、これを調べることで互いの処理が消費した電力が判明します。計測時間はおおよそ5秒から10秒と短時間で完了します。

 

バッテリーAPIを使用した場合、同じシナリオでおおよそ同じような測定ができますが、施工時間が数分から数十分に渡るために、OSが消費してしまった電力までが計測内容にノイズとして含まれてしまいます。

実際の計測アプリが取得しているデータのサンプル画面を見ると、細かい時間単位で取得しているのがわかるかと思います。

powerscouter02

 

計測機器を使う利点とは

この消費電力計測キットを開発した株式会社ブリリアントサービスでは、実際にAndroid省電力プロジェクトを長年研究開発してきた会社です。

このブリリアントサービス社内で出てきた「計測時間が長くて開発が遅れる」や「計測時間が長くなるとノイズが混ざる」といった意見から、今回の測定キットが開発されてきました。

弊社がブリリアントサービス社様とソーシャルゲームやO2Oアプリ開発をしていた経緯から、「アプリ側が省電力を意識しないと、OSレベルでの対応だけでは限界点に達している」という意見に非常に賛同しております。その中で出てきた「スマートフォンで一番電池を食うアプリの1つはゲームではないか」という意見があり、今回ゲーム開発をメインにしている弊社が機材を借り受けて、ゲームに特化した省電力ノウハウが提供できるように検証を行っております。

 

この計測機器を使って実際にゲームを省電力化していく方法については、CEDEC2014にて概要を発表予定です。
またニコニコ動画でもセッションが配信されますので、視聴方法などが分かり次第、本ブログにて紹介予定です。