ロイド(Lloyd)のAndroid版を開発している中で、少し気になる現象にぶつかりました。
エミュレータ上のロイドをアクティブにすると、PCのファンが一気に回り始める。
逆に、ロイドが非アクティブなときはかなり静かです。以前から「マウスカーソルをエミュレータ上に置いているだけでも負荷が上がっているのでは?」という感覚もありました。
今のところ確認できていること
- Lloydが非アクティブなときは比較的静か
- Lloydをクリックしてアクティブにすると、PCのファンが急に回ることがある
- マウスカーソルをエミュレータ上に置いたときの負荷も以前から気になっていた
- Logcatでは
artdのログが大量に流れ続ける状態を確認 - WebView、IME/InputConnection、描画処理なども同時に候補として残っている
ただし、現時点では「artdが原因」だとは考えていません。artdは大量に見えているものの、何か別の状態変化をきっかけにして、後からシステム側でループが続いている可能性があります。
調べたいのは「最初に誰が動いたか」
今回の調査では、症状を1個ずつ追いかけるのではなく、次の順番を重視しています。
発火点を特定 → 因果関係を並べる → 最初の原因を潰す → 後続症状がまとめて消えるか確認
つまり「artdが大量に出ている」ことそのものより、Lloydをアクティブにした瞬間に、最初に何が動いたのかを捕まえたいわけです。
現在は、次のような流れを候補として考えています。
Lloydをアクティブ化 ↓ mouse / hover / focus ↓ WebView / IME / 描画処理 ↓ Android / Google Play Services / ART側が反応 ↓ 何らかの処理が収束せず継続 ↓ 高CPU負荷・大量ログ
もちろん、これはまだ仮説です。
マウス・hover・focusは無視できない候補
Android Emulatorでは過去に、カーソルのフォーカス移動やhoverに関連する不具合修正例もあります。また、Chrome / WebView とGraphics backendの相性問題についても、Google公式のトラブルシューティングに記載があります。
ロイド側でも、Vulkan有効時にWebView表示が黒画面・白画面になる問題があり、現在はVulkanを無効化して使用しています。そのため、Emulatorの入力系とWebView描画系の組み合わせは候補から外せません。
参考:Android Emulator release notes
参考:Android Emulator troubleshooting
次に行う切り分け
次回は、いきなりコードを大きく変更せず、まず次の4状態でCPU負荷を比較します。
A. エミュレータ起動・Lloyd未起動・マウス外 B. エミュレータ起動・Lloyd未起動・マウス中 C. Lloyd起動・マウス外 D. Lloyd起動・マウス中
これで、負荷が上がる境界が「エミュレータ本体」なのか「Lloyd / WebView」なのか「マウス / hover」なのかを先に切ります。
さらにLloyd側には WINDOW_FOCUS hasFocus=true / false のログを追加し、アクティブ状態の変化と高負荷の開始が時間的につながるか確認する予定です。
Logcatで一つ失敗したこと
今回、Logcatを一時停止した状態から再開してすぐコピーしたところ、実際に操作した時刻よりかなり古いログを見ていたことが分かりました。
ログ量が多すぎると、Android Studioの表示がバックログを追いかけてしまい、画面上では動いていても「現在のログ」とは限りません。
次回からは、Clear → 現在時刻確認 → 実験 → 数秒だけ取得 → Pause → 最終時刻確認という短時間の取得に切り替えます。
同じ現象をご存じの方、情報をお願いします
Android Emulatorで、次のような現象を経験された方がいましたら、コメントで情報をいただけると助かります。
- エミュレータのウィンドウをアクティブにするとCPU負荷が大きく上がる
- マウスカーソルをエミュレータ上に置くと負荷が増える
- hover / focus をきっかけに不安定になる
- WebView使用時だけ同様の症状が出る
artdが大量に動き続ける
特に「どのEmulatorバージョン・Android API・GPU設定で起きたか」が分かると、とても参考になります。
まだ原因は断定していません。調査が進んだら、この記事に追記していきます。



コメントを残す