Analizowanie profili za pomocą AI

Profile ProfilingManager używają standardowego formatu Perfetto i można je odpytywać za pomocą PerfettoSQL, dlatego możesz połączyć agenta kodowania AI z umiejętnością Perfetto AI, aby zautomatyzować analizę głównych przyczyn bezpośrednio w obszarze roboczym, zamiast ręcznie poruszać się po osiach czasu w interfejsie Perfetto lub pisać niestandardowe zapytania do biblioteki standardowej Perfetto:

  1. Wczytanie profilu: agent otwiera zebrany profil za pomocą trace_processor Perfetto.
  2. Wykonywanie zapytań diagnostycznych: agent, kierując się umiejętnościami AI Perfetto, wysyła zapytania do modułów biblioteki standardowej (takich jak android.frames.timeline w przypadku zacinania się lub android.memory.heap_graph.dominator_tree w przypadku wycieków pamięci) i iteracyjnie ulepsza swoje zapytania.
  3. Korelacja z kodem źródłowym: agent mapuje niestandardowe fragmenty logów czasu, próbkowane stosy wywołań lub nazwy klas zachowujących w profilu bezpośrednio na pliki źródłowe Kotlin lub Java i proponuje poprawkę.

Konfigurowanie umiejętności AI w Perfetto

Umiejętność AI Perfetto typu open source uczy agentów kodowania, jak uruchamiać trace_processor, pisać PerfettoSQL i postępować zgodnie z instrukcjami dotyczącymi analizy pamięci i procesora Androida. Każda instalacja zawiera pakiet trace_processor, więc nie musisz instalować trace_processor osobno:

  • Instalacja za pomocą AI: uruchom następujący prompt w dowolnym agencie kodowania AI:

    Following instructions from https://perfetto.dev/docs/getting-started/using-ai set up the Perfetto AI skill to be usable by any agent
    
  • Zainstaluj ręcznie: postępuj zgodnie z instrukcjami konfiguracji podanymi w artykule Korzystanie z AI w Perfetto dla Twojego agenta (np. Claude Code, Codex, Cursor, Antigravity lub OpenCode).

Przykłady przepływów pracy

Umieść co najmniej 1 profil w obszarze roboczym i poproś agenta AI o jego przeanalizowanie. Możesz przeanalizować pojedynczy profil, aby zdiagnozować konkretny problem, lub przekazać wiele profili, aby porównać wzorce i regresje zbiorczo.

Analizowanie zrzutów sterty Java i błędów OOM

Gdy podasz zrzut sterty Javy przechwycony bezpośrednio za pomocą PROFILING_TYPE_JAVA_HEAP_DUMP lub automatycznie za pomocą aktywatora TRIGGER_TYPE_OOM, agent AI korzystający z umiejętności Perfetto AI może pomóc Ci zidentyfikować:

  • Wycieki pamięci: obiekty, takie jak zniszczone instancje Activity lub Fragment, które pozostają dostępne z korzeni GC, gdy powinny zostać odzyskane.
  • Obiekty z dużą liczbą duplikatów: klasy z nieoczekiwanie dużą liczbą instancji, które łącznie zajmują dużą część sterty.
  • Nieefektywne wykorzystanie pamięci: zbyt duże pamięci podręczne, nadmiarowe struktury danych lub pojedyncze obiekty dominujące, które zajmują nieproporcjonalnie dużo pamięci.

Aby przeanalizować zrzut stosu OutOfMemoryError i powiązać go z kodem źródłowym aplikacji, uruchom prompta podobnego do tego:

Analyze the Perfetto OOM heap dump at </path/to/profile>, which corresponds to
the codebase located at </path/to/codebase> using the Perfetto AI skill and find
the root cause of the OutOfMemoryError.

Aby zobaczyć kompletny przykład raportu wygenerowanego przez ten prompt, w tym ścieżkę przechowywania drzewa dominatorów, główną przyczynę w kodzie źródłowym i proponowaną poprawkę, zapoznaj się z sekcją Automatyzacja analizy błędu OOM za pomocą agenta AI w studium przypadku: debugowanie błędu OOM.

Analizowanie śledzenia systemu i błędów ANR

Gdy podasz śledzenie systemu zarejestrowane bezpośrednio za pomocą PROFILING_TYPE_SYSTEM_TRACE lub automatycznie za pomocą aktywatora TRIGGER_TYPE_ANR, agent AI korzystający z umiejętności Perfetto AI może pomóc Ci zidentyfikować:

  • Blokowanie operacji w wątku głównym: długotrwałe wycinki śladu lub wywołania synchroniczne, które uniemożliwiają wątkowi UI przetwarzanie zdarzeń wejściowych lub rysowanie klatek przed osiągnięciem progu ANR.
  • Wąskie gardła stanu wątku: interwały, w których wątek główny utknął w stanie Sleeping (np. blokowanie wejścia-wyjścia sieci lub przekroczenie limitu czasu Thread.sleep), Blocked (rywalizacja o blokadę) lub Runnable (opóźnienia planowania procesora).
  • Skoki wykorzystania procesora w wątku głównym: kosztowne obliczenia lub ciasne pętle wykonywane bezpośrednio w wątku UI zamiast w wątku w tle.

Aby przeanalizować śledzenie systemu pod kątem błędów ANR i powiązać je z kodem źródłowym aplikacji, uruchom prompta takiego jak ten:

Analyze the Perfetto system trace at </path/to/trace.perfetto-trace>, which
corresponds to an ANR trace, and find the root cause of the ANR using the
Perfetto AI skill. The codebase is located at </path/to/codebase>.

Aby zobaczyć kompletny przykład raportu generowanego przez ten prompt, w tym zestawienie wycinków głównego wątku, rekonstrukcję interwału thread_state i mapowanie kodu źródłowego, zapoznaj się z sekcją Automatyzacja analizy błędów ANR za pomocą agenta AI w studium przypadku: debugowanie błędu ANR.