Porównywanie aplikacji (widoki)

Pojęcia i implementacja Jetpack Compose

Testy porównawcze to sposób na sprawdzanie i monitorowanie wydajności aplikacji. Możesz regularnie przeprowadzać testy porównawcze, aby analizować i debugować problemy z wydajnością oraz zapobiegać regresji w ostatnich zmianach.

Android oferuje 2 biblioteki i podejścia do testów porównawczych, które umożliwiają analizowanie i testowanie różnych sytuacji w aplikacji: Macrobenchmark i Microbenchmark.

Macrobenchmark

Biblioteka Macrobenchmark mierzy większe interakcje użytkowników, takie jak uruchamianie aplikacji, interakcje z interfejsem i animacje. Biblioteka zapewnia bezpośrednią kontrolę nad środowiskiem testowym. Umożliwia kontrolowanie kompilacji oraz uruchamianie i zatrzymywanie aplikacji, aby bezpośrednio mierzyć rzeczywiste uruchamianie aplikacji lub przewijanie.

Biblioteka Macrobenchmark wstrzykuje zdarzenia i monitoruje wyniki zewnętrznie z aplikacji testowej utworzonej na podstawie Twoich testów. Dlatego podczas pisania testów porównawczych nie wywołujesz bezpośrednio kodu aplikacji, ale poruszasz się po niej jak użytkownik.

Microbenchmark

Biblioteka Microbenchmark umożliwia testowanie porównawcze kodu aplikacji bezpośrednio w pętli. Jest ona przeznaczona do pomiaru pracy procesora, która ocenia wydajność w najlepszym przypadku – np. rozgrzane JIT i dostęp do dysku w pamięci podręcznej – co można zaobserwować w pętli wewnętrznej lub w konkretnej często używanej funkcji. Biblioteka może mierzyć tylko kod, który można wywołać bezpośrednio w izolacji.

Oto dobre przypadki do testów porównawczych:

  • Gdy aplikacja musi przetworzyć złożoną strukturę danych.
  • Gdy aplikacja ma konkretny algorytm wymagający dużej mocy obliczeniowej, który jest wywoływany wielokrotnie podczas działania aplikacji.

Możesz też mierzyć części interfejsu. Możesz na przykład zmierzyć koszt powiązania elementu RecyclerView, czas potrzebny na rozszerzenie układu lub wydajność przejścia układu i pomiaru klasy View.

Nie możesz jednak zmierzyć, jak testowane przypadki wpływają na ogólne wrażenia użytkownika. W niektórych przypadkach testy porównawcze nie informują, czy poprawiasz wąskie gardło, takie jak pominięte klatki lub czas uruchamiania aplikacji. Z tego powodu, ważne jest, aby najpierw zidentyfikować te wąskie gardła za pomocą Android Profiler. Gdy znajdziesz kod, który chcesz zbadać i zoptymalizować, pętla testu porównawczego może być powtarzana, aby uzyskać mniej zaszumione wyniki. Dzięki temu możesz skupić się na jednym obszarze, który chcesz ulepszyć.

Biblioteka Microbenchmark raportuje tylko informacje o aplikacji, a nie o całym systemie. Dlatego najlepiej sprawdza się w analizowaniu wydajności sytuacji specyficznych dla aplikacji, a nie tych, które mogą być związane z ogólnymi problemami z systemem.

Porównanie bibliotek testów porównawczych

Macrobenchmark Microbenchmark
Funkcja Pomiar punktów wejścia lub interakcji wysokiego poziomu, takich jak uruchamianie aktywności lub przewijanie listy. Pomiar poszczególnych funkcji.
Zakres Test całej aplikacji poza procesem. Test pracy procesora w procesie.
Szybkość Średnia szybkość iteracji. Może przekroczyć minutę. Duża szybkość iteracji. Często mniej niż 10 sekund.
Śledzenie Wyniki zawierają ślady systemowe. Domyślnie wyniki zawierają minimalny ślad systemowy i ślad metody.