More Related Content
Similar to Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム (20)
More from KLab Inc. / Tech (20)
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
- 10. スクリプト経由でのプロファイリング開始と終了
● Unity Profilerの通常の利用方法
○ PCと端末をUSBケーブルで接続して、プロファイラからアタッチ
○ 手間がかかる & UI操作の自動化が難しい
● Unity ProfilerのAPIを利用
○ スクリプト経由でバイナリログを端末内に保存できる
○ スタンドアローンで動作するので、PCとの接続も不要
Profiler.logFile = "mylog";// 保存ファイル名の指定
Profiler.SetAreaEnabled(ProfilerArea.Rendering, true);// プロファイリング項目の指定
Profiler.enableBinaryLog = true;// 詳細なバイナリログ形式で保存
Profiler.enabled = true;// プロファイリングを開始
- 12. Profiler Readerの活用方法
● メインスレッドのメソッド単位の集計情報
○ 処理時間 ( avg / sum / min / max )
○ 呼び出し回数
○ コールスタック
●フレーム単位の情報
○ Unityのメインスレッド全体 ms
○ Unityのレンダースレッド全体 ms
○ Unityの各Jobスレッド全体 ms
○ ドローコール数
○ メモリ使用量
● CPU負荷の高い
メソッドの特定
● 重たいフレームの特定
● 原因のだいたいの把握
- 16. ● メインは Python スクリプトで構成
● 普通の Windows PC に端末を接続
● Android 開発ツールなどを活用
○ aapt (Android Asset Packaging Tool)
■ Bundle ID の apk パッケージからの抽出
■ メインアクティビティ名の抽出
○ adb (Android Debug Bridge)
■ apk の実端末へのインストール
■ ゲームアプリケーションの実行
■ ファイル転送やクリーンアップ
○ Unity (Profiler Reader実行用)
プロファイル自動実行システムの構成
- 18. 実機では頻繁に「エラー」が起きる
基本的には adb のエラー終了として起こる
● 「少し待ってリトライ」が一番有効
○ エラー終了したらn回リトライして、それでだめならその回は失敗
● 要所で adb サーバーを再起動
○ 特に apk インストール失敗時に再起動すると「経験上」うまくいく率が高い
○ 逆に再起動しすぎても、うまくいかないこともある
● 機種・OS間の差異が大きく、厄介
○ 進行ログもエラーメッセージも違う
○ 頑張ろうとせずに適当に
あきらめが肝心
実機利用での難しさ(1) エラー処理
- 19. プロファイルをなるべく同じ環境でやりたい
● バックグラウンドプロセスなど
○ adb shell am kill : プロセスの停止
○ adb shell am kill-all : 全てのアプリケーションプロセスの停止
● ストレージの管理
○ adb shell pm clear : 特定パッケージのデータ削除
● 冷却のために待ち時間をいれる
○ いれないと何もしてないのにどんどん結果が悪化する
○ さらにダメ押しでスマホクーラーを投入!
端末自体の再起動もやっていたが、 USB接続設定がリセットされたりするので、逆に不安定になる
実機利用での難しさ(2) 端末をクリーンに保つ
- 20. ● 開発者モード
● スリープしない
○ USB接続中はスリープしない設定がある
● ファイル転送モード
○ 結果ファイルを転送できるように
● 音量
○ すべてミュート
○ 夜中に謎の音が鳴り続けないように
● 画面輝度
○ 最低に
○ 電力使わないように
○ 焼き付き防止?
実機利用での難しさ(3) 端末設定
- 25. ● Cloud Storage + Cloud Functions
○ ストレージ+サーバレスサービス
○ CSVをPythonスクリプトで処理、BigQueryに追記
● BigQuery
○ 分析用途に向いたデータベース、非常に安価
○ データを蓄積、ダッシュボード向けに整形
● Googleデータポータル
○ 無料のBIツール(Googleさん太っ腹)
○ プロファイリング結果の可視化・情報共有
ダッシュボードの構成要素