perfetto

perfetto es una herramienta que te permite recopilar información de rendimiento de dispositivos Android a través de Android Debug Bridge (ADB). Invoca la herramienta perfetto con el comando adb shell perfetto .... La herramienta perfetto usa varias fuentes para recopilar registros de rendimiento de tu dispositivo, como los siguientes:

  • ftrace para obtener información del kernel
  • atrace para la anotación del espacio del usuario en servicios y apps
  • heapprofd para la información de uso de memoria nativa de servicios y apps

En esta página, se describe cómo llamar a la herramienta perfetto y configurarla para generar el resultado deseado. Para obtener más información, consulta la documentación de perfetto.

Sintaxis

En esta sección, se describe cómo usar ADB para llamar a perfetto en diferentes modos y generar un registro.

Selección de fuentes de datos

perfetto incluye los dos modos siguientes, que determinan las fuentes de datos que se usan para guardar el registro:

  • Modo ligero: Solo se puede seleccionar un subconjunto de fuentes de datos, específicamente atrace y ftrace. Sin embargo, ofrece una interfaz similar a systrace.
  • Modo normal: Obtiene su configuración en un búfer de protocolo y te permite aprovechar más la funcionalidad de perfetto con fuentes de datos diferentes de atrace y ftrace.

Opciones generales

En la siguiente tabla, se enumeran las opciones disponibles cuando se usa la herramienta perfetto en cualquier modo:

Tabla 1: Lista de opciones generales disponibles de la herramienta perfetto.

Opción Descripción
--background |
-d
perfetto sale inmediatamente de la interfaz de línea de comandos y continúa con el registro en segundo plano.
--background-wait | -D Es similar a --background, pero espera (hasta 30 segundos) a que todas las fuentes de datos comiencen antes de salir. El código de salida es cero si se recibe una confirmación correcta y, de lo contrario, no es cero (error o tiempo de espera).
--alert-id ID de la alerta que activó este registro.
--config-id ID de la configuración de activación.
--config-uid UID de la app que registró la configuración.
--subscription-id ID de la suscripción que activó este registro.
--out OUT_FILE |
-o OUT_FILE

Especifica la ruta de acceso deseada al archivo de registro de salida o - para stdout. perfetto escribe la salida en el archivo descrito en las marcas anteriores. El formato de salida se compila con el formato definido en AOSP trace.proto.

Nota: Debes especificar el nombre de ruta de acceso completo del archivo de salida. Por lo general, los archivos deben escribirse en la carpeta /data/misc/perfetto-traces.

--upload Al finalizar, pasa el registro al paquete especificado por el mensaje IncidentReportConfig en la configuración de registro de proto.
--no-guardrails Inhabilita las protecciones contra el uso excesivo de recursos cuando se habilita la marca --upload durante las pruebas.
--reset-guardrails Restablece el estado persistente de los mecanismos de seguridad y salidas para pruebas.
--rsave-for-bugreport Si se está ejecutando un registro con bugreport_score > 0, lo guarda en un archivo. Muestra la ruta cuando termina.
--query Consulta el estado del servicio y lo imprime como texto legible.
--query-raw Similar a --query, pero imprime bytes protocodificados de tracing_service_state.proto. sin procesar.
--help | -h Imprime el texto de ayuda de la herramienta perfetto.

Modo ligero

La sintaxis general para usar perfetto en el modo ligero es la siguiente:

 adb shell perfetto [ --time TIMESPEC ] [ --buffer SIZE ] [ --size SIZE ]
             [ ATRACE_CAT | FTRACE_GROUP/FTRACE_NAME | FTRACE_GROUP/* ]...
             --out FILE

En la siguiente tabla, se enumeran las opciones disponibles cuando se usa perfetto en el modo ligero:

Tabla 2: Lista de opciones de herramienta disponibles de perfetto cuando se usa el modo ligero.

Opción Descripción
--time TIME[s|m|h] |
-t TIME[s|m|h]
Especifica la duración del registro en segundos, minutos u horas. Por ejemplo, --time 1m especifica una duración de registro de 1 minuto. La duración predeterminada es de 10 segundos.
--buffer SIZE[mb|gb] |
-b SIZE[mb|gb]
Especifica el tamaño del búfer de anillo en megabytes (mb) o gigabytes (gb). El parámetro predeterminado es --buffer 32mb.
--size SIZE[mb|gb] |
-s SIZE[mb|gb]
Especifica el tamaño máximo de archivo en megabytes (MB) o gigabytes (GB). De forma predeterminada, perfetto usa el búfer de anillo solamente en la memoria.
--app | -a Nombre de la app de Android (atrace)

A estas opciones les sigue una lista de especificadores de eventos:

Tabla 3: Lista de especificadores de eventos para el modo ligero.

Evento Descripción
ATRACE_CAT Especifica las categorías de atrace para las que deseas llevar un registro. Por ejemplo, el siguiente comando registra el administrador de ventanas con atrace:
    adb shell perfetto --out FILE wm
    

Para registrar otras categorías, consulta esta lista de categorías de atrace.

FTRACE_GROUP/FTRACE_NAME Especifica los eventos de ftrace para los que deseas llevar un registro. Por ejemplo, el siguiente comando registra los eventos de sched/sched_switch:
      adb shell perfetto --out FILE sched/sched_switch
      

Modo normal

La sintaxis general para usar perfetto en el modo normal es la siguiente:

 adb shell perfetto [ --txt ] --config CONFIG_FILE --out FILE

En la siguiente tabla, se enumeran las opciones disponibles cuando se usa la herramienta perfetto en el modo normal:

Tabla 4: Lista de opciones de herramienta disponibles de perfetto cuando se usa el modo normal.

Opción Descripción
--config CONFIG_FILE | -c CONFIG_FILE Especifica la ruta de acceso a un archivo de configuración. En el modo normal, es posible que algunas configuraciones estén codificadas en un búfer de protocolo de configuración. Este archivo debe cumplir con el esquema de búfer de protocolo definido en AOSP trace_config.proto.

Selecciona y configura las fuentes de datos con el miembro DataSourceConfig de TraceConfig, como se define en AOSP data_source_config.proto.

--txt Indica a perfetto que debe analizar el archivo de configuración como pbtxt. Esta marca solo está diseñada para pruebas locales, y no se recomienda habilitarla para la producción.

Fuentes de datos compatibles

En esta sección, se describen las diferentes fuentes que la herramienta perfetto usa para generar tu registro.

ftrace

La fuente de datos ftrace permite que perfetto obtenga eventos del kernel.

Para habilitar esta fuente, configura ftrace_config en DataSourceConfig.

Los eventos que se pueden habilitar incluyen los siguientes:

  • Actividad de programación:

    • sched/sched_switch
    • sched/sched_wakeup
    • sched/sched_wakeup_new
    • sched/sched_process_exec
    • sched/sched_process_exit
    • sched/sched_process_fork
    • sched/sched_process_free
    • sched/sched_process_hang
    • sched/sched_process_wait
  • Eventos del sistema de archivos:

  • Eventos atrace

Según el dispositivo, la versión del SO y el kernel, es posible que haya más eventos disponibles. Para obtener más información, consulta los protocolos de configuración.

Estadísticas de procesos

La fuente de datos de estadísticas de procesos te permite obtener contadores sondeados para el sistema y los procesos individuales.

Para habilitar esta fuente, configura process_stats_config y sys_stats_config en DataSourceConfig.

Entre los datos que genera perfetto, se incluyen los siguientes:

Según el dispositivo, la versión del SO y el kernel, es posible que haya más eventos disponibles. Para obtener más información, consulta los protocolos de configuración de sys_stats y process_stats.

heapprofd

heapprofd te permite hacer un muestreo de las causas del uso de la memoria nativa.

Para habilitar esta fuente, configura heapprofd_config en DataSourceConfig. Esta configuración produce ProfilePackets, incluidos los marcos de Java de la pila de llamadas.

Puedes encontrar información adicional sobre cómo usar heapprofd en perfetto.dev.

Otras fuentes

Según el dispositivo, la versión del SO y el kernel, es posible que haya más fuentes de datos disponibles. Para obtener más información, consulta los protocolos de configuración de fuentes de datos.

Para encontrar información adicional sobre la herramienta perfetto, consulta perfetto.dev.