Traceview to narzędzie, które zapewnia graficzną reprezentację logów śledzenia. Możesz wygenerować logi, dodając do kodu klasę Debug.
Ta metoda śledzenia jest bardzo precyzyjna, ponieważ możesz dokładnie określić, gdzie w kodzie chcesz rozpocząć i zakończyć rejestrowanie danych śledzenia. Jeśli nie masz jeszcze wygenerowanych i zapisanych na komputerze logów śledzenia z połączonego urządzenia, przeczytaj artykuł Generowanie logów śledzenia przez instrumentowanie aplikacji. Sprawdzanie tych logów za pomocą narzędzia Traceview pomaga debugować aplikację i profilować jej wydajność.
Jeśli nie musisz wyświetlać logów śledzenia zarejestrowanych przez instrumentację aplikacji za pomocą klasy Debug, możesz użyć narzędzia CPU Profiler dostępnego w Android Studio 3.0 i nowszych wersjach, aby sprawdzać wątki aplikacji i rejestrować ślady metod.
Otwieranie logu śledzenia za pomocą Traceview
Aby otworzyć log śledzenia za pomocą narzędzia Traceview w Android Studio, wykonaj te czynności:
- Uruchom Android Device Monitor.
- W Android Device Monitor wybierz File > Open File (Plik > Otwórz plik).
- Otwórz plik
.trace, który chcesz sprawdzić. - Kliknij Otwórz.
Omówienie Traceview
Po otwarciu logu śledzenia Traceview wyświetla dane logu w tych 2 panelach:
- panel osi czasu, który pokazuje, kiedy każdy wątek wchodzi do metody i ją opuszcza;
- panel profilu, który podsumowuje wykonywanie każdego wątku w okresie objętym logiem śledzenia;
W sekcjach poniżej znajdziesz dodatkowe informacje o panelach wyjściowych widoku logów czasu.
Panel osi czasu
Rysunek 1 przedstawia panel osi czasu z bliska. Wykonywanie każdego wątku jest widoczne w osobnym wierszu, a czas, który upłynął, zwiększa się w prawo. Każda metoda jest oznaczona innym kolorem. Cienkie linie pod pierwszym wierszem pokazują elementy podrzędne (od wejścia do wyjścia) wybranej metody.
Rysunek 1. Panel osi czasu Traceview.
Panel profilu
Jak widać na rysunku 2, panel profilu zawiera listę wszystkich metod, które system wykonał w okresie logu śledzenia, oraz czas ich wykonywania. Metoda, która wywołuje inną metodę, jest nazywana metodą nadrzędną, a metody wywoływane przez metodę nadrzędną są nazywane metodami podrzędnymi. Gdy wybierzesz metodę, klikając ją, wyświetlą się zarówno jej elementy nadrzędne, jak i podrzędne w 2 osobnych węzłach.
W przypadku każdej metody (węzła najwyższego poziomu) tabela zawiera te informacje o czasie (w milisekundach) oraz odsetek łącznego czasu:
- Czas łączny i czas wyłączny: czas wyłączny to czas poświęcony na wykonywanie kodu metody, a czas łączny to czas poświęcony na wykonywanie kodu metody oraz czas poświęcony na wykonywanie jej elementów podrzędnych.
- Czas pracy procesora i czas rzeczywisty: Czas pracy procesora uwzględnia tylko czas, przez który wątek aktywnie korzysta z czasu pracy procesora, a czas rzeczywisty podaje bezwzględne informacje o czasie od momentu, gdy aplikacja wejdzie do metody, do momentu, gdy ją opuści – niezależnie od tego, czy wątek jest aktywny, czy uśpiony.
W przypadku każdego węzła najwyższego poziomu w panelu profilu kolumna Calls + Rec, Calls/Total (Wywołania + rekurencja, wywołania/łącznie) w tabeli (niewidoczna na rysunku 2) zawiera liczbę wywołań metody i liczbę wywołań rekurencyjnych. W przypadku metod nadrzędnych i podrzędnych ta kolumna pokazuje liczbę wywołań, w których metoda była elementem podrzędnym lub nadrzędnym metody w węźle najwyższego poziomu.
Rysunek 2. Panel profilu Traceview.
Znane problemy z Traceview
Logowanie Traceview nie obsługuje dobrze wątków, co powoduje te problemy:
- Jeśli wątek zostanie zamknięty podczas profilowania, jego nazwa nie zostanie wyemitowana (naprawiono w Androidzie 5.1 i nowszych);
- Maszyna wirtualna ponownie używa identyfikatorów wątków. Jeśli wątek zostanie zatrzymany i rozpocznie się inny, mogą mieć ten sam identyfikator.