Compartir tecnología

Análisis de los principios de las herramientas de recopilación de rendimiento de aplicaciones móviles.

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Descripción general de las herramientas relacionadas con la recopilación y el análisis del rendimiento

Existen muchas herramientas para recopilar, analizar y mostrar datos de rendimiento de aplicaciones móviles, que se pueden dividir aproximadamente en las siguientes categorías. Por ejemplo, herramientas de rendimiento móviles que pueden recopilar múltiples indicadores de rendimiento, perfdog y Solopi, entre las cuales Solopi es de código abierto y pefdog es una herramienta comercial. Herramientas que pueden realizar análisis de fallos, como el comercial Firebase Crashlytics y la herramienta de código abierto Sentry. Si necesita analizar datos relacionados con la red, puede utilizar Charles o Wireshark. Además, existen herramientas integrales de gestión del rendimiento, como Dynatrace. En términos generales, las capacidades, precisión y experiencia del usuario de las herramientas comerciales son definitivamente mejores que las herramientas de código abierto. Como estudio e investigación personal, solo puedo comenzar con herramientas de código abierto. Por lo tanto, al escribir este blog, también utilizaremos herramientas de código abierto como ejemplos.

Herramienta de prueba de rendimiento móvil
PerfDog: una herramienta para monitorear el rendimiento de las aplicaciones, CPU, memoria, consumo de energía y otros datos, que admite pruebas de rendimiento y monitoreo en tiempo real de aplicaciones móviles.
Solopi: se centra en las pruebas y el seguimiento del rendimiento de las aplicaciones móviles, incluido el seguimiento en tiempo real de la velocidad de fotogramas, la CPU, la memoria y otros indicadores.

Herramienta de análisis de fallos
Firebase Crashlytics: una potente herramienta de análisis e informes de fallos proporcionada por Google que puede monitorear los fallos de las aplicaciones en tiempo real.
Sentry: una herramienta de seguimiento de errores de código abierto que admite múltiples plataformas, incluidos informes de errores y monitoreo del rendimiento de aplicaciones móviles.

Herramientas de prueba de rendimiento de red
Charles Proxy: una herramienta proxy de depuración de red que captura y analiza datos de solicitud y respuesta de red para aplicaciones móviles.
Wireshark: una herramienta de análisis de red de código abierto que admite la captura y análisis de paquetes de red de aplicaciones móviles.

herramientas APM(Gestión del rendimiento de la aplicación):
Dynatrace: una solución de monitoreo de rendimiento de pila completa, nativa de la nube, que admite el monitoreo del rendimiento de aplicaciones móviles y el análisis de la experiencia del usuario.

¿Qué métricas de desempeño se recopilan y cómo?

  Antes de realizar un análisis de rendimiento, primero debe comprender el significado de cada indicador de rendimiento. Tomando como ejemplo los indicadores de rendimiento recopilados por Solopi, echemos un vistazo a los indicadores comunes del rendimiento de las aplicaciones móviles y cómo se pueden recopilar.

Cuadros por segundo

La fórmula para calcular la velocidad de fotogramas es:Velocidad de fotogramas = número de fotogramas dibujados/período de tiempo,La velocidad de fotogramas objetivo para la mayoría de los desarrolladores de aplicaciones y juegos es60 FPS( fotogramas/segundo), ¿por qué la velocidad de fotogramas objetivo es 60 FPS? Debido a que la frecuencia de actualización de la pantalla de la mayoría de los teléfonos inteligentes y tabletas modernos es de 60 Hz, siempre que la velocidad de fotogramas alcance los 60 FPS, es decir, el número de fotogramas dibujados por segundo sea 60, los efectos visuales del usuario serán más fluidos y no habrá retrasos. El mínimo no puede ser inferior a 30 FPS. Esto se debe a que el monitor muestra repetidamente la imagen del cuadro anterior mientras espera un nuevo cuadro, lo que hace que la imagen no sea fluida. Los altos pueden alcanzar los 90 FPS (por ejemplo, para dispositivos con altas frecuencias de actualización).

Cómo recopilar información sobre la velocidad de fotogramas

  Hay dos formas de recopilar la velocidad de fotogramas. Una es utilizar la clase Choreographer para recopilar estadísticas de velocidad de fotogramas. Esto requiere escribir código dentro de la aplicación y solo puede recopilar la información de velocidad de fotogramas de la aplicación.Otra forma es utilizar herramienta gfxinfo. Tomando Solopi como ejemplo, el tiempo de espera del fotograma en 1 segundo también se calcula a través de la información de la herramienta gfxinfo y se deduce la velocidad de fotogramas real. Por lo tanto, cuando está casi estacionario, es posible que parte de la velocidad de fotogramas se muestre incorrectamente. Se recomienda realizar pruebas de velocidad de fotogramas en escenarios dinámicos como deslizamiento o cambio de página. El método gfxinfo puede recopilar información de velocidad de fotogramas de todas las aplicaciones y es muy adecuado como herramienta de recopilación de datos de rendimiento. Por lo tanto, aquí también nos centraremos en cómo recopilar información de velocidad de fotogramas a través de gfxinfo.

Hay dos pasos principales para recopilar información sobre la velocidad de fotogramas.paso uno: Obtenga información de gfxinfo mediante el comando adb,Paso 2 : analiza la información y calcula la información de velocidad de fotogramas. El contenido de la información de gfxinfo es aproximadamente el siguiente:

Estadísticas desde: hora de inicio de las estadísticas, la unidad es nanosegundos.
Cuadros totales renderizados: número total de cuadros renderizados.
Fotogramas Janky: el número de fotogramas Janky, es decir, el número de fotogramas que superan los 16 ms (intervalo de actualización de 60 fotogramas por segundo).
Porcentaje de fotogramas molestos: la relación entre fotogramas molestos y el número total de fotogramas.
Percentil 90: percentil 90, lo que indica que el 90 % de los fotogramas tienen tiempos de renderizado inferiores a este valor (en milisegundos).
Percentil 95: percentil 95, lo que indica que el 95 % de los fotogramas tienen tiempos de renderizado inferiores a este valor (en milisegundos).
Percentil 99: percentil 99, lo que indica que el 99 % de los fotogramas tienen tiempos de renderizado inferiores a este valor (en milisegundos).
Número de Vsync perdido: el número de sincronizaciones verticales no sincronizadas, es decir, el número de caídas de fotogramas causadas por una falla en el procesamiento a tiempo.
Número de latencia de entrada alta: el número de retrasos de entrada altos indica el número de retrasos causados ​​por un tiempo de procesamiento de eventos de entrada demasiado largo.
Número de subprocesos de UI lentos: el número de veces que el subproceso de UI respondió lentamente, es decir, el número de veces que el subproceso de UI tardó demasiado en procesarse.

Tomando Solopi como ejemplo, la velocidad de fotogramas se deduce a través del tiempo de espera del fotograma en la información de gfxinfo. Para el código del proyecto específico, puede ver el código fuente de solopi.

tasa de retraso/número de retrasos

Número de congelaciones : Durante el período de prueba, la cantidad de períodos durante los cuales se detecta que la velocidad de fotogramas es inferior al umbral. Cada vez que la velocidad de fotogramas cae por debajo del umbral durante un período de tiempo, se cuenta como tartamudeo. El umbral aquí se puede personalizar, por ejemplo, si es 60 FPS menor que la velocidad de fotogramas objetivo, se puede grabar como una congelación. Es decir, si el tiempo de renderizado del cuadro es superior a 16 ms, se calcula como atascado.

tasa de retraso : El porcentaje del tiempo de congelación respecto del tiempo total de prueba. Supongamos que en una prueba, la aplicación se ejecutó durante 120 segundos, durante los cuales la velocidad de fotogramas fue inferior a 16 FPS 4 veces en total, y el tiempo de retraso total fue de 8 segundos, entonces: el número de retrasos: 4 veces. Tasa de tartamudez: 8/120*100%=6,7%. En gfxinfo anterior, también hay información sobre la tasa de retraso.

procesador/memoria

  Tomando solopi como ejemplo, la CPU incluye el porcentaje de uso de CPU del proceso donde se encuentra la actividad de nivel superior de la aplicación y el porcentaje de uso de CPU global. Para aplicaciones de proceso único, estos datos representan el uso de CPU de la aplicación; Aplicaciones de procesos multiproceso, estos datos representan el uso de CPU de nivel superior del proceso de UI; cuando ocurre un cambio de proceso, Soloπ puede cambiar automáticamente a nuevos datos de proceso.

Tomando solopi como ejemplo, la memoria incluye la memoria PSS (Tamaño de conjunto proporcional, es decir, la memoria real utilizada) del proceso donde se encuentra la actividad de nivel superior de la aplicación, la memoria privada sucia (memoria privada) y la memoria ocupada global. Para aplicaciones de proceso único, estos datos representan la memoria de la aplicación; para aplicaciones de proceso multiproceso, como CPU, Soloπ también admite el cambio automático de procesos de nivel superior.
¿Cómo contar la información de la CPU y la memoria?
  Hay dos formas de contar la información de la CPU y la memoria. Método 1: leer directamente /proc/.<pid> /stat archivo para obtener el tiempo de CPU del proceso, o leer /proc/ directamente<pid> El archivo /statm obtiene estadísticas de memoria para un proceso. Método 2: obtenga información sobre el uso de la memoria y la CPU mediante el comando adb shell. Tomando como ejemplo los dispositivos Android, se ha cerrado la capacidad de leer archivos directamente. Por lo tanto, normalmente, el comando adb se utiliza para obtener información de memoria y CPU.
A continuación se muestra un código de muestra para obtener información sobre el uso de la memoria mediante el comando adb. Al ejecutar el comando adb, asegúrese de que adb tenga permisos de root. Puede utilizar el comando adb root para elevar el demonio ADB a privilegios de Root.
  1. import subprocess
  2. def get_memory_info(pid):
  3. try:
  4. # Run adb shell command to read /proc/<pid>/statm
  5. command = f"adb shell cat /proc/{pid}/statm"
  6. result = subprocess.check_output(command, shell=True)
  7. statm_data = result.decode('utf-8').strip().split()
  8. # Parse statm data
  9. size, resident, shared, text, lib, data, dt = map(int, statm_data)
  10. memory_info = {
  11. 'size': size, # total program size (pages)
  12. 'resident': resident, # resident set size (pages)
  13. 'shared': shared, # shared pages (pages)
  14. 'text': text, # text (code) size (pages)
  15. 'lib': lib, # library (unused since Linux 2.6; always 0)
  16. 'data': data, # data + stack (pages)
  17. 'dt': dt # dirty pages (unused since Linux 2.6; always 0)
  18. }
  19. return memory_info
  20. except subprocess.CalledProcessError as e:
  21. print(f"Error executing command: {e}")
  22. return None
  23. except Exception as e:
  24. print(f"Error: {e}")
  25. return None
  26. # Replace with your application's PID
  27. pid = '12345'
  28. memory_info = get_memory_info(pid)
  29. if memory_info:
  30. print(f"Memory info for PID {pid}:")
  31. print(f"Size: {memory_info['size']} pages")
  32. print(f"Resident set size (RSS): {memory_info['resident']} pages")
  33. print(f"Shared pages: {memory_info['shared']} pages")
  34. print(f"Text (code) size: {memory_info['text']} pages")
  35. print(f"Data + stack size: {memory_info['data']} pages")

red

Tomando solopi como ejemplo, la red Incluyendo tasas ascendentes y descendentes de aplicaciones y tráfico acumulativo, así como tasas globales ascendentes y descendentes y tráfico acumulativo. Pertenece a los datos de la dimensión de la aplicación. Los datos específicos se muestran en la siguiente figura:

¿Cómo obtener datos de la red?

Obtener datos de red es lo mismo que obtener datos de CPU/memoria y se puede leer directamente Obtenga datos de red del archivo /proc/pid/net/dev u obtengalos mediante el comando adb (comando: adb shell cat /proc/pid/net/dev). La siguiente imagen es parte del código fuente de solopi. Puede ver que los datos de red de wlan0 se cuentan aquí. Para una lógica específica, puede consultar el código NetworkTools.java en el código fuente de solopi. Por supuesto, con respecto a las estadísticas de tráfico de la red, también se han enviado errores en línea, porque aquí grep wlan0 solo cuenta el tráfico wifi de la red, no el tráfico móvil. Para obtener detalles sobre los errores, consulteaquí

Tiempo de respuesta

  Tomemos como ejemplo a solopi, Contiene datos de tiempo de respuesta y tiempo de actualización para los clics en la aplicación. Pertenece a los datos de dimensión de la aplicación. El tiempo desde que el usuario hace clic hasta la primera vez que el sistema emite una actualización de la interfaz es el tiempo de respuesta, y el tiempo hasta que el sistema deja de actualizar la interfaz es el tiempo de actualización. La lógica de contar el tiempo de respuesta es dividir la grabación de la pantalla en cuadros. Según el sitio web oficial de Solopi, reconoce automáticamente el cuadro inicial y el cuadro final para contar el tiempo de respuesta. Cuando realmente use Solopi, encontrará esa página estadística. El tiempo de respuesta no es correcto. Por ejemplo, cuando el usuario hace clic en Inicio, cuando hace clic en la página de la aplicación, se incluye el tiempo de operación de la velocidad de la mano de alguien en el medio y esta parte se cuenta en el tiempo de respuesta. Por lo tanto, si desea calcular el tiempo de respuesta de la página preparada, es más preciso grabar solo la pantalla e identificar manualmente los fotogramas inicial y final de la página. Los pasos específicos para grabar fotogramas de pantalla son los siguientes:

Lo anterior es una comprensión del significado de los indicadores de rendimiento comunes en las aplicaciones móviles, así como instrucciones detalladas sobre cómo recopilarlos. Con respecto a fallas, etc., lo presentaremos en detalle en un blog posterior.