SlideShare a Scribd company logo
Android向けUnity製ゲーム最適化のための

CI/CDと連携した

自動プロファイリングシステム

KLab株式会社

発表者

塙 与志夫
上席執行役員
KLab株式会社
於保 俊
エンジニアリングマネージャー
KLab株式会社
細田 翔
Unityエンジニア
KLab株式会社
実機のプロファイリング
面倒じゃないですか?
課題:モバイルでの実機プロファイリングは大変
● 端末ごとに性能も特徴もさまざま
● SoCごとに異なるプロファイラー
● 専門知識が必要
充分な量のプロファイリングができずに
パフォーマンスの問題を見逃してしまう
解決策:継続的な自動プロファイリング
● CI/CDと連携した全自動の実機プロファイリング
● 非エンジニアでもダッシュボードから結果を見れる
パフォーマンスの劣化を見逃さない!
すぐにチューニングに着手できる!
Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
本日のアジェンダ
1. 自動プロファイリングのための

Unityアプリケーション側の実装



2. プロファイリングのAndroid実機での

自動実行システム



3. ダッシュボードシステム

8
自動プロファイリングのための

Unityアプリケーション側の実装

通常のプロファイリング方法
● Unity標準のUnity Profilerを利用

● CPUの詳細な分析が可能(フレーム単位でのタイムライン表示など)

Unity Profiler ウィンドウ
スクリプト経由でのプロファイリング開始と終了
● Unity Profilerの通常の利用方法

○ PCと端末をUSBケーブルで接続して、プロファイラからアタッチ

○ 手間がかかる & UI操作の自動化が難しい

● Unity ProfilerのAPIを利用

○ スクリプト経由でバイナリログを端末内に保存できる

○ スタンドアローンで動作するので、PCとの接続も不要

Profiler.logFile = "mylog";// 保存ファイル名の指定
Profiler.SetAreaEnabled(ProfilerArea.Rendering, true);// プロファイリング項目の指定
Profiler.enableBinaryLog = true;// 詳細なバイナリログ形式で保存
Profiler.enabled = true;// プロファイリングを開始
プロファイリングデータの集計
●Profiler Reader

○ バイナリログをCSVに変換・集計するツール

○ Unity Technologies Japanと開発

○ https://github.com/unity3d-jp/ProfilerReader
○ 明日 9/5 (木) 13:30〜14:30『Unity2018/2019における最適化事情』
Profiler Reader
バイナリログ CSV
Profiler Readerの活用方法
● メインスレッドのメソッド単位の集計情報
○ 処理時間 ( avg / sum / min / max )
○ 呼び出し回数
○ コールスタック
●フレーム単位の情報
○ Unityのメインスレッド全体 ms
○ Unityのレンダースレッド全体 ms
○ Unityの各Jobスレッド全体 ms
○ ドローコール数
○ メモリ使用量
● CPU負荷の高い
メソッドの特定
● 重たいフレームの特定
● 原因のだいたいの把握
自動プレイ機能の実装
● アプリを起動したら完全放置でゲームが進行

○ プロファイリング対象のシーンに順番に遷移



● プロファイリングシステムへの成功・失敗の通知

○ 成功:すべての計測シナリオが正常終了

○ 失敗:例外が発生してアプリが進行不能

○ 通知用のファイルを生成

14
プロファイリングの

Android 実機での自動実行システム

Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
● メインは Python スクリプトで構成
● 普通の Windows PC に端末を接続
● Android 開発ツールなどを活用
○ aapt (Android Asset Packaging Tool)
■ Bundle ID の apk パッケージからの抽出
■ メインアクティビティ名の抽出
○ adb (Android Debug Bridge)
■ apk の実端末へのインストール
■ ゲームアプリケーションの実行
■ ファイル転送やクリーンアップ
○ Unity (Profiler Reader実行用)
プロファイル自動実行システムの構成
プロファイル自動実行の流れ
apk ダウンロード
パッケージ名
などの抽出
実機インストール
アプリ実行 終了ファイル
ある?
結果抽出
変換
アップロード
デバイス
クリーンアップ
Yes
No
実機では頻繁に「エラー」が起きる
基本的には adb のエラー終了として起こる
● 「少し待ってリトライ」が一番有効
○ エラー終了したらn回リトライして、それでだめならその回は失敗
● 要所で adb サーバーを再起動
○ 特に apk インストール失敗時に再起動すると「経験上」うまくいく率が高い
○ 逆に再起動しすぎても、うまくいかないこともある
● 機種・OS間の差異が大きく、厄介
○ 進行ログもエラーメッセージも違う
○ 頑張ろうとせずに適当に
あきらめが肝心
実機利用での難しさ(1) エラー処理
プロファイルをなるべく同じ環境でやりたい
● バックグラウンドプロセスなど
○ adb shell am kill : プロセスの停止
○ adb shell am kill-all : 全てのアプリケーションプロセスの停止
● ストレージの管理
○ adb shell pm clear : 特定パッケージのデータ削除
● 冷却のために待ち時間をいれる
○ いれないと何もしてないのにどんどん結果が悪化する
○ さらにダメ押しでスマホクーラーを投入!
端末自体の再起動もやっていたが、 USB接続設定がリセットされたりするので、逆に不安定になる
実機利用での難しさ(2) 端末をクリーンに保つ
● 開発者モード
● スリープしない
○ USB接続中はスリープしない設定がある
● ファイル転送モード
○ 結果ファイルを転送できるように
● 音量
○ すべてミュート
○ 夜中に謎の音が鳴り続けないように
● 画面輝度
○ 最低に
○ 電力使わないように
○ 焼き付き防止?
実機利用での難しさ(3) 端末設定
21
ダッシュボードシステム

Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム
ダッシュボード画面
● マネージドサービスで構成すること
○ 管理者を立てるほどの規模ではないため
● お値段そこそこであること
○ お財布の心配は少ない方がいい
→GCPサービスと無料のBIツールの組み合わせで実現
ダッシュボードの要件
● Cloud Storage + Cloud Functions
○ ストレージ+サーバレスサービス
○ CSVをPythonスクリプトで処理、BigQueryに追記
● BigQuery
○ 分析用途に向いたデータベース、非常に安価
○ データを蓄積、ダッシュボード向けに整形
● Googleデータポータル
○ 無料のBIツール(Googleさん太っ腹)
○ プロファイリング結果の可視化・情報共有
ダッシュボードの構成要素
● 直近のプロファイリン
グ結果を表示
● ドリルダウンリンクで
詳細ページに遷移
ダッシュボード画面
● カテゴリ別表示
○ 実行時間上位
○ 予算超過率
● メソッド別表示
○ 実行時間上位
etc...
詳細画面
● 高負荷になるタイミングを可視化
○ 性能改善の材料として
時系列グラフ
可視化の例
● カテゴリ分類をGoogleスプレッドシートで定義
○ チームメンバーが自由に編集できる
○ ダッシュボードにすぐ反映される
● スプレッドシートはBigQueryテーブルとして扱える
○ 裏側の仕組みを知らなくても集計結果をカスタマイズできる
BigQuery採用の意外なメリット
● 意図せずゲームが重くなることがあり、有用だった
○ Unityのマイナーバージョンアップ時
○ 性能と無関係なつもりの変更が実際は重かった場合
● プロファイリング結果をメンバー内で共有できて便利
○ 特に非エンジニアにデータを共有しやすい
運用してみてのエピソード
● Android実機による自動プロファイリングシステムを開発
○ 実機プロファイリングのハードルを大幅に下げられた
○ チームメンバーと結果を共有しやすくなった
● 成果も得られた
○ ゲーム中のボトルネックの発見に役立った
○ 性能改善のイテレーションが速まった
結論
33
Thank you


More Related Content

PPTX
Photonのサービス選択の勘どころ
PDF
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
PPTX
なぜなにリアルタイムレンダリング
PDF
60fpsアクションを実現する秘訣を伝授 解析編
PDF
UE4でマルチプレイヤーゲームを作ろう
PDF
RENDERING 最適化「禍つヴァールハイト」
PDF
それはYAGNIか? それとも思考停止か?
PDF
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
Photonのサービス選択の勘どころ
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
なぜなにリアルタイムレンダリング
60fpsアクションを実現する秘訣を伝授 解析編
UE4でマルチプレイヤーゲームを作ろう
RENDERING 最適化「禍つヴァールハイト」
それはYAGNIか? それとも思考停止か?
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...

What's hot (20)

PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
PDF
UniRx完全に理解した
PDF
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
PDF
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
PDF
[UE4]自動テストでもっと楽したい!
PDF
ゲームの仕様書を書こうまとめ
PDF
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
PDF
インタフェース完全に理解した
PPTX
大規模ゲーム開発における build 高速化と安定化
PDF
【Unity】 Behavior TreeでAIを作る
PDF
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
PDF
ゲーム開発者のための C++11/C++14
PDF
Unityと.NET
PPTX
three.jsを「遅い」と思わせないデータの扱い方
PPTX
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
PDF
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
PDF
トリコの動かし方
PDF
Unityではじめるオープンワールド制作 エンジニア編
PDF
Deep Dive async/await in Unity with UniTask(UniRx.Async)
PDF
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UniRx完全に理解した
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
[UE4]自動テストでもっと楽したい!
ゲームの仕様書を書こうまとめ
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
インタフェース完全に理解した
大規模ゲーム開発における build 高速化と安定化
【Unity】 Behavior TreeでAIを作る
「Press Button, Drink Coffee」 UE4における ビルドパイプラインとメンテナンスの全体像
ゲーム開発者のための C++11/C++14
Unityと.NET
three.jsを「遅い」と思わせないデータの扱い方
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
トリコの動かし方
Unityではじめるオープンワールド制作 エンジニア編
Deep Dive async/await in Unity with UniTask(UniRx.Async)
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
Ad

More from KLab Inc. / Tech (20)

PDF
【公開用】モバイルオンラインゲーム開発を支える早く、安く、使いやすいサーバインフラ構築
PDF
モバイルオンラインゲームのアプリ外課金の導入と運用方法について
PDF
デバイスファーム 「AirLab」 による 自動QAテストの実績と機械学習が拓く次世代QAの可能性
PDF
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
PDF
大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
PDF
運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
PDF
AirLab導入でテストコストの大幅削減と品質向上! 数十台の端末を一斉に全自動テストできる社内DeviceFarmについてご紹介
PDF
生成AIが切り拓く新しいゲームの創り方・遊び方
PDF
表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス
PDF
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
PDF
他業界からゲーム業界へ転向したときの話
PDF
KLabのゲーム開発を支える開発環境
PDF
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
PDF
「リアルISUCON」としてのモバイルオンラインゲーム開発
PDF
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
PDF
『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜
PPTX
KLabのチャットシステム インフラ変遷
PPTX
Ganglia のUIにGrafanaを追加する話
PPTX
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
PPTX
属人化して詰まってた作業を自動化で楽しようとした話
【公開用】モバイルオンラインゲーム開発を支える早く、安く、使いやすいサーバインフラ構築
モバイルオンラインゲームのアプリ外課金の導入と運用方法について
デバイスファーム 「AirLab」 による 自動QAテストの実績と機械学習が拓く次世代QAの可能性
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
AirLab導入でテストコストの大幅削減と品質向上! 数十台の端末を一斉に全自動テストできる社内DeviceFarmについてご紹介
生成AIが切り拓く新しいゲームの創り方・遊び方
表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
他業界からゲーム業界へ転向したときの話
KLabのゲーム開発を支える開発環境
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
「リアルISUCON」としてのモバイルオンラインゲーム開発
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜
KLabのチャットシステム インフラ変遷
Ganglia のUIにGrafanaを追加する話
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
属人化して詰まってた作業を自動化で楽しようとした話
Ad

Android向けUnity製ゲーム最適化のためのCI/CDと連携した自動プロファイリングシステム