Więcej niż mem: Google używa witryny TheVerge.com do testów porównawczych urządzeń Nexus

Wygląda na to, że Google ładuje stronę główną The Verge podczas testowania Workload Automation na wszystkich swoich urządzeniach Nexus.

Szperanie w AOSP to świetny sposób na dokonywanie nowych odkryć na temat Androida i tym razem natknęliśmy się na coś dość zabawnego. Na jakiś czas, zgłosili użytkownicy że witryna poświęcona technologii TheVerge.com zapewniał niską wydajność na urządzeniach mobilnych.

Muszę przyznać, że z mojego doświadczenia wynika, że ​​wydajność ich witryny internetowej poprawiła się z biegiem czasu. Poza tym nie jest tak, że w innych witrynach (w tym naszej) nie ma problemów, nad którymi moglibyśmy popracować, niemniej jednak całkiem zabawne było to, że w jej oficjalnego zestawu testów porównawczych obciążenia, Google zdecydowało się wykorzystać The Verge w swoich testach.


Automatyzacja obciążeń Androida

Automatyzacja obciążenia (WA) to framework opracowany przez RAMIĘ do zbierania danych o wydajności na urządzeniach z Androidem poprzez wykonywanie pakietu wielu powtarzalnych obciążeń. Google porównuje wydajność na swoich urządzeniach, wykonując wiele z tych testów obciążenia i zbierając podsumowanie zużycie energii, które następnie importują do arkusza kalkulacyjnego, aby zobaczyć, jak wprowadzone optymalizacje poprawiły wydajność czas. Firma sama wybiera, które aplikacje uwzględnić w swoim zestawie testowym, ale ogólnie ogranicza się do większości popularnych aplikacji Google. Oto sedno tego, jak to działa, ale pokażemy dowody z kodu źródłowego i opiszemy test pakiety bardziej szczegółowo, dzięki czemu możesz uzyskać lepszy obraz tego, jakie automatyczne testy wykonuje Google, aby je zmierzyć wydajność.

W ramach AOSP istnieje katalog dedykowany do testów automatyzacji obciążenia. Aplikacje używane do testowania są zdefiniowane w defs.shi zazwyczaj należą do jednej z dwóch kategorii: domyślna, preinstalowana aplikacja Google lub przeglądarka internetowa innej firmy. Jedna aplikacja wzorcowa wyróżnia się na tle innych i tak jest com.BrueComputing.SunTemple/com.epicgames.ue4.GameActivity co, jak zakładam, odnosi się do Recenzent BrueBench ST benchmark oparty na silniku Unreal Engine 4.

# default activities. Can dynamically generate with -g.
gmailActivity='com.google.android.gm/com.google.android.gm.ConversationListActivityGmail'
clockActivity='com.google.android.deskclock/com.android.deskclock.DeskClock'
hangoutsActivity='com.google.android.talk/com.google.android.talk.SigningInActivity'
chromeActivity='com.android.chrome/_not_used'
contactsActivity='com.google.android.contacts/com.android.contacts.activities.PeopleActivity'
youtubeActivity='com.google.android.youtube/com.google.android.apps.youtube.app.WatchWhileActivity'
cameraActivity='com.google.android.GoogleCamera/com.android.camera.CameraActivity'
playActivity='com.android.vending/com.google.android.finsky.activities.MainActivity'
feedlyActivity='com.devhd.feedly/com.devhd.feedly.Main'
photosActivity='com.google.android.apps.photos/com.google.android.apps.photos.home.HomeActivity'
mapsActivity='com.google.android.apps.maps/com.google.android.maps.MapsActivity'
calendarActivity='com.google.android.calendar/com.android.calendar.AllInOneActivity'
earthActivity='com.google.earth/com.google.earth.EarthActivity'
calculatorActivity='com.google.android.calculator/com.android.calculator2.Calculator'
calculatorLActivity='com.android.calculator2/com.android.calculator2.Calculator'
sheetsActivity='com.google.android.apps.docs.editors.sheets/com.google.android.apps.docs.app.NewMainProxyActivity'
docsActivity='com.google.android.apps.docs.editors.docs/com.google.android.apps.docs.app.NewMainProxyActivity'
operaActivity='com.opera.mini.native/com.opera.mini.android.Browser'
firefoxActivity='org.mozilla.firefox/org.mozilla.firefox.App'
suntempleActivity='com.BrueComputing.SunTemple/com.epicgames.ue4.GameActivity'
homeActivity='com.google.android.googlequicksearchbox/com.google.android.launcher.GEL'

Działania te są uruchamiane za pomocą wiersza poleceń ADB za pomocą następujących poleceń Systrace opcje pomiaru wydajności aplikacji:

dflttracecategories="gfx input view am rs power sched freq idle load memreclaim"

W szczególności aplikacja Chrome jest uruchamiana z flagą ładującą The Verge:

Jeśli chodzi o to, dlaczego test wydaje się różnić dla wolant (Nexus 9), nie jestem do końca pewien. Tak czy inaczej, jakie testy faktycznie przechodzi ta aktywność Chrome z The-Verge, możemy określić, patrząc na kod źródłowy testów automatyzacji obciążenia.


Zestawy testowe

Po pierwsze, jest systemapps.sh test, który według Google działa jako taki:

# Script to start a set of apps in order and then in each iteration
# switch the focus to each one. For each iteration, the time to start
# the app is reported as measured using atrace events and via am ThisTime.
# The output also reports if applications are restarted (eg, killed by
# LMK since previous iteration) or if there were any direct reclaim
# events.

Następny jest ostatniefling.sh test, który działa tak:

# Script to start a set of apps, switch to recents and fling it back and forth.
# For each iteration, Total frames and janky frames are reported.

A potem jest chromefling.sh, który testuje wydajność Chrome w prosty sposób:

# Script to start 3 chrome tabs, fling each of them, repeat
# For each iteration, Total frames and janky frames are reported.

Kolejnym zabawnym testem w pakiecie Workload Automation, chociaż niezwiązanym z The Verge, jest youtube.sh test wydajności, który mierzy Jank interfejsu użytkownika

#
# Script to play a john oliver youtube video N times.
# For each iteration, Total frames and janky frames are reported.
#
# Options are described below.
#
iterations=10
app=youtube
searchText="last week tonight with john oliver: online harassment"
vidMinutes=15

Wreszcie każdy z tych testów służy do pomiaru rzeczywistego zużycia energii w świecie poprzez cykliczne ich sprawdzanie przez określony czas, zgodnie z definicją w pwrtest.sh:

# Script to gather perf and perf/watt data for several workloads
#
# Setup:
#
# - device connected to monsoon with USB passthrough enabled
# - network enabled (baseline will be measured and subtracted
# from results) (network needed for chrome, youtube tests)
# - the device is rebooted after each test (can be inhibited
# with "-r 0")
#
# Default behavior is to run each of the known workloads for
# 30 minutes gathering both performance and power data.

Google może następnie zbierać te dane za pomocą pwrsummary.sh i zaimportuj je do arkusza kalkulacyjnego:

# print summary of output generated by pwrtest.sh
#
# default results directories are -[-experiment]. By default
# match any device and the year 201*.
#
# Examples:
#
# - show output for all bullhead tests in july 2015:
# ./pwrsummary.sh -r "bh-201507*"
#
# - generate CSV file for import into spreadsheet:
# ./pwrsummary.sh -o csv
#

Są to dość powszechne testy wydajności interfejsu użytkownika w świecie rzeczywistym, podobne do tych, które można zobaczyć nasze własne testy. Wygląda na to, że zmiana ładowania strony głównej The Verge podczas otwierania przeglądarki Chrome została wprowadzona stosunkowo niedawno, ponieważ w zeszłym roku Google podczas tych testów otwierał tylko nową kartę w przeglądarce Chrome. Zmiana dokonana w 28 maja 2015 r wprowadził jednak użycie The Verge podczas testowania Chrome. Zabawne jest to, że Google używa The Verge we wszystkich miejscach do automatyzacji zadań testów, pamiętaj, że nie oznacza to, że The Verge jest najgorszym przestępcą w sieci wydajność.

W rzeczywistości jest to dalekie od ideału, ponieważ wiele innych stron internetowych ma mierną wydajność z powodu rozprzestrzeniania się coraz większej liczby reklam, aby zrekompensować wzrost liczby programów blokujących reklamy. Rzeczywiście, najprawdopodobniej decyzja o skorzystaniu z The Verge była po prostu podyktowana wygodą, biorąc pod uwagę technologię bystry przeciętny Googler i żart wielu entuzjastów na temat strony internetowej The Verge wydajność.