Tencent/loli_profiler

Memory instrumentation tool with CI and AI support for android app&game developers.

TL;DR

LoliProfiler は Android アプリ向けのオープンソースメモリプロファイリングツールキットです。ネイティブヒープの割り当てをキャプチャし、コールスタック、ツリーマップ、タイムライン、スクリーンショットを表示し、2回の実行を比較できます。グラフィカルUI(Dear ImGuiで構築)とヘッドレスCLIを備えており、保存されたデータをクエリできるPythonパッケージも提供しています。

機能

コンポーネント 機能
LoliProfilerImGui デスクトップGUI – Androidアプリに起動またはアタッチし、ライブまたは保存済みのキャプチャを表示、.loliファイルをエクスポート。
LoliProfilerCLI ヘッドレスキャプチャ、プレーンテキストまたはSQLiteへのエクスポート、オフラインでのシンボル化、コマンドラインからキャプチャの比較。
LoliProfilerCompare 2つのキャプチャを並べて表示する専用UI。ドッキング可能なBase、Comparer、Diffパネルを備える。
agentcli (Python) 小さなライブラリ。SQLiteスナップショット(.db)を開き、スクリプトでコールツリーをクエリできる(loliコマンドを使用)。

キャプチャ中に、すべての割り当て記録を保持するか、停止時にまだ生きているものだけを保持するかを選べます。UIでは両方のビューを切り替えられます。アプリのデバッグシンボルファイルを提供すると、シンボル名が表示されます。

動作の開始方法

  1. ビルド – リポジトリのルートで python scripts/build.py を実行。スクリプトはインタラクティブメニューを表示し、GUI、CLI、Androidフックのコンパイル、リリースZIPのパッケージ化を実行します。必要に応じてAndroid SDK/NDKをダウンロードします。
  2. 前提条件 – 必要なコンパイラ、CMake、プラットフォーム固有のノートについては docs/BUILD.md を参照してください。
  3. クイックスタート – docs/QUICK_START.md(または中国語版)に従って:
    • ツールのビルド
    • ADBでデバイスを接続
    • LoliProfilerImGui を起動し、アプリにアタッチ、キャプチャ、結果を探索。
  4. ヘッドレス使用 – LoliProfilerCLI を --log-file profiler.log --log-level debug のようなフラグで実行して、UIなしでキャプチャし、データをエクスポート。
  5. 比較 – LoliProfilerCompare またはCLIの比較モードを使用して、2つの .loli ファイルを読み込み、割り当てパターンの違いを確認。
  6. スクリプト処理 – agentcli パッケージをインストール(agentcli 内で pip install .)し、loli コマンドまたはライブラリをインポートしてSQLiteスナップショットをクエリ。

どの人に役立つか?

  • ネイティブメモリ使用状況を理解し、リークを特定し、割り当てパターンを最適化したい Android開発者。
  • Android向けゲーム開発者(ドキュメントにはゲームエンジンとの統合に関するセクションあり)。
  • 2つのビルドやランタイム設定を並べて比較したい パフォーマンスエンジニア。
  • Androidメモリ動作に関するツールを開発する 研究者;Pythonエージェントによりカスタム分析を簡単に作成可能。

制限事項 / 注意点

  • ネイティブ 割り当て(C/C++)のみをキャプチャ;Javaレベルの割り当ては対象外。
  • シンボル解決には、デバッグシンボル付きでビルドされたアプリのネイティブライブラリが必要。
  • UIは Dear ImGui/SFML に依存しているため、デスクトップOSでは動作するが、デバイス上で直接は実行不可。
  • キャプチャのオーバーヘッドはゼロではない;「コンソール」タブのタイミングを確認しておきましょう。

ライセンス & クレジット

プロジェクトは MIT ライセンス(LICENSE を参照)。Dear ImGui、SFML、SQLite、LZ4 など、許容的なライセンスを持つ複数のサードパーティライブラリをバンドルしており、shuchangliu による以前の loli_profiler 実装のフォークに基づいています。


上記のすべての情報はリポジトリの README から直接取得しています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト