Cold Start and Busy Start on Android

Cold start 時のベンチマークが大きく下がっていることが発覚したので調べろと言われ、調査をする。しかし warm start 時と比べてこれといった違いがあるようには見えない。さて・・・。

改めて Systrace を睨むと、どうも自分たちのアプリではなく他のアプリが活発に動いている。なぜか。 Cold start を実現するためその測定はデバイスの再起動直後に行われていた。そしてデバイス起動の broadcast intent に反応し多くの pre-installed アプリがなんらかの準備運動を始めていたのだった。CPU が混雑するそんな起動直後でのベンチマーク。そりゃ遅くもなるわ・・・。

実際のところベンチマークは以前から起動直後に測定されているため、これだけが性能低下の原因だと言い切るのは勇み足の可能性がないではない。けどどうせ startup 時に色々やるアプリが増えたんでしょ... と shrug したい面はある。それに起動直後といういかにも non deterministic な環境で安定した測定ができるとも思えない。起動後はしばらくほっといてから測ってちょ、と伝える。測定のターンアラウンドが伸びてしまい気の毒だけれど・・・。

Cold start, 普通のアプリだったらプロセスを殺して page cache をクリアするくらいでだいたいいいと思うんだけど、センサーとかを使い始めるとまったく自明でないのだよなー・・・。一方でセンサーの cold start が遅くなったところでアプリにできることなんて大してない気もするのだが。しかし我々には platform に bug を file する、という責務があるのだった。