dynabook AZ起き上がり問題
ディスプレイを閉じたり電源ボタンをちょい押ししたりするとサスペンドに入って、電源LEDが点滅する。しかし、そのまま放置していると、いつの間にか電源LED点灯&WiFi接続したままになる。起き上がりである。当然電池がなくなっていき、朝起きたら残量ゼロ。
今朝Android SDK r7がリリースされ、adbにデバイス接続するまで待つコマンドwait-for-deviceが追加されていた。sleepを入れて無理やりループさせなくても、起き上がりの瞬間をログできる。次のコマンドを実行してから、AZのディスプレイを閉じてサスペンドさせる。
$ adb shell logcat -c && adb wait-for-device && adb shell logcat
早速ログをとってみた。
→ http://pastebin.com/uqXt8vTF
- 1行目がまさに起き上がりの最初に吐いたログ。電池の状態が変わったらしく、WiFiServiceが反応している。
- しかし、3行目でWindowManagerが電源ボタンを押されたとして再び寝ようと試みている。
- 4行目がナゾのdaviddaviddavid。通常のAndroid端末にはこんなプロセスは存在しない。
- 7行目でサスペンドに入ろうとしている。
- 34-36行目でKeyguardViewMediatorが82のキーコードを使って何かしようとしている。
- その直後に起き上がりになってしまう。
- 以下通常営業。
- 157行目はおそらくアイドル時のバックライトオフをしようとしているのだろう。現在の設定は2分。
- 以下、なんの状態変化もないため、そのまま電池をモリモリ食べていく。
このログを眺めながら、仮説を考えてみたのだが
- 18行目、お前誰だ
Travis Alarmというのは聞いたことがない。しかし、AndAppStoreクライアントとtCalendarWidgetが使っている。実験して見たところ、AndAppStoreが設定しているTravis Alarmの時間きっかりに起き上がり、そのまま眠ることはなかった。なので、次のコマンドでTravis Alarmを使っているアプリを特定する。
$ adb shell logcat | grep "Travis Alarm"
AndAppStoreはバックグラウンド更新を停止したらTravis Alarmメッセージがでなくなった。tCalendarWidgetは日付更新時に自身の表示を変えるためのタイマーだと思われるが、ウィジェットをデスクトップから消しただけではAlarmをつかんだままになるため、やむなくアンインストールした。
というか、この2つのアプリを推奨したりしてごめんなさい。*2
ついでにCPUクロック。sysfsを読めばCPUクロック設定がわかる。
$ adb shell $ cd /sys/devices/system/cpu/cpu0/cpufreq/ $ cat cpuinfo_cur_freq 200812
通常は200MHz程度で動いていて、重い処理をさせると1GHzに跳ね上がる。
$ cat cpuinfo_cur_freq 1000000
最低周波数は40MHz。いつそんな低周波数になるんだろう。サスペンド?
$ cat cpuinfo_min_freq 40000