Explorar AOSP es una excelente manera de descubrir cosas nuevas sobre Android y, esta vez, nos encontramos con algo bastante divertido. Durante algún tiempo,los usuarios han informadoque el sitio web de tecnologíaTheVerge.com ofrecía un rendimiento lento en los dispositivos móviles.

En mi opinión, el rendimiento de su sitio web ha mejorado con el tiempo. Además, no es que otros sitios (incluido el nuestro) no tengan problemas en los que podamos esforzarnos por trabajar, pero, de todos modos, me pareció bastante divertido que, en suconjunto oficial de puntos de referencia de carga de trabajo, Google decidiera utilizar The Verge en sus pruebas.


Automatización de la carga de trabajo de Android

Workload Automation(WA) es un marco desarrollado porARM para recopilar datos de rendimiento en dispositivos Android mediante la ejecución de un conjunto de muchas cargas de trabajo repetibles. Google evalúa el rendimiento de sus dispositivos realizando muchas de estas pruebas de carga de trabajo y recopilando un resumen del uso de energía, que luego importa a una hoja de cálculo para ver cómo sus optimizaciones han mejorado el rendimiento con el tiempo. La empresa selecciona qué aplicaciones incluir en su conjunto de pruebas, pero en general se limita a la mayoría de las aplicaciones populares de Google. Esa es la esencia de cómo funciona, pero mostraremos la evidencia del código fuente y describiremos los conjuntos de pruebas con más detalle para que pueda obtener una mejor idea de las pruebas automatizadas que realiza Google para medir el rendimiento.

Dentro de AOSP, hay undirectorio dedicadoa las pruebas de automatización de cargas de trabajo. Las aplicaciones que se utilizan para las pruebas se definen endefs.shy, por lo general, se incluyen en una de dos categorías: predeterminada, aplicación de Google preinstalada o navegador web de terceros. Una aplicación de referencia se destaca del resto y supongo com.BrueComputing.SunTemple/com.epicgames.ue4.GameActivityque se refiere a la prueba comparativaBrueBench ST Reviewer, que se basa en 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'

Estas actividades se inician a través de la línea de comandos ADB con las siguientes opcionesde Systrace para medir el rendimiento de la aplicación:

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

La aplicación Chrome en particular se inicia con una bandera para cargar The Verge:

el borde

En cuanto a por qué la prueba parece ser diferente para el volantis(Nexus 9), no estoy seguro del todo. De todos modos, en cuanto a qué pruebas atraviesa realmente esta actividad de Chrome con The Verge, podemos determinarlo observando el código fuente de las pruebas de automatización de la carga de trabajo.


Conjuntos de pruebas

En primer lugar, está la  pruebasystemapps.sh, que según Google funciona de la siguiente manera:

# 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.

A continuación, está la  pruebarecentfling.sh, que funciona así:

# 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.

Y luego está chromefling.shque prueba el rendimiento de Chrome de forma bastante sencilla:

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

Otra prueba divertida en la suite Workload Automation, aunque no está relacionada con The Verge, es la prueba de rendimientode youtube.shque mide el bloqueo de la interfaz de usuario.

#
# 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 tonightwithjohn oliver:onlineharassment"
vidMinutes=15

Finalmente, cada una de estas pruebas se utiliza para medir el uso de energía en el mundo real al realizar un ciclo de ellas durante un período de tiempo determinado, como se define en 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.

Luego, Google puede recopilar estos datos utilizando pwrsummary.she importarlos a una hoja de cálculo:

# print summary of output generated by pwrtest.sh
#
# default results directories are <device>-<date>[-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
#

Todas estas son pruebas de rendimiento de interfaz de usuario del mundo real bastante comunes, no muy diferentes de las que verías ennuestras propias pruebas. Parece que el cambio para cargar la página de inicio de The Verge al abrir Chrome fue bastante reciente, ya que antes del año pasado Google solo abría una nueva pestaña en Chrome durante estas pruebas. Sin embargo, un cambio realizado el28 de mayo de 2015introdujo el uso de The Verge al probar Chrome. Por más divertido que sea que Google esté usando The Verge de todos los lugares al realizar pruebas de automatización de carga de trabajo, ten en cuenta que esto no significa que The Verge sea el peor infractor que existe en lo que respecta al rendimiento web.

En realidad, no es así, ya que muchas otras páginas web sufren un rendimiento mediocre debido a la proliferación de cada vez más anuncios para compensar el aumento de los bloqueadores de anuncios. De hecho, lo más probable es que la decisión de utilizar The Verge fuera simplemente una cuestión de comodidad, teniendo en cuenta lo expertos en tecnología que son los empleados de Google y la broma interna que corren muchos entusiastas sobre el rendimiento de las páginas web de The Verge.