Cómo realizar registros

Para comenzar a registrar un seguimiento, elige una configuración de registro en el menú desplegable de la parte superior o inferior del Generador de perfiles de CPU y haz clic en Record.

Figura 1: El Generador de perfiles de CPU muestra el estado, la duración y el tipo de registro que se está realizando

Interactúa con tu app y, luego, haz clic en Stop cuando hayas terminado. El Generador de perfiles presenta automáticamente la información de registro en el panel correspondiente, como se muestra en la Figura 2:

Figura 2: El Generador de perfiles de CPU después de registrar un seguimiento de método

  1. Rango seleccionado: determina la parte del tiempo registrado que se inspeccionará en el panel de seguimiento. Cuando registras un seguimiento por primera vez, el Generador de perfiles de CPU selecciona automáticamente la extensión completa de tu registro en el cronograma de la CPU. Si quieres inspeccionar los datos de seguimiento solo para una parte del rango de tiempo registrado, arrastra los bordes de la región destacada.
  2. Sección Interaction: muestra la interacción del usuario y los eventos de ciclo de vida de la app en un cronograma.
  3. Sección Threads: Muestra la actividad del estado de los subprocesos (como en ejecución, suspendido, etc.) y un gráfico de llamadas (o gráfico de eventos de seguimiento en el Registro del sistema) por cada subproceso en un cronograma.
    • Usa las combinaciones de teclas del mouse y del teclado para navegar por el cronograma.
    • Haz doble clic en el nombre del subproceso o presiona Intro para expandirlo o contraerlo.
    • Selecciona un subproceso para ver más información en el panel Analysis. Mantén presionado Mayús o Ctrl (Cmd en Mac) para seleccionar varios subprocesos.
    • Selecciona una llamada de método (o evento de seguimiento en el Registro del sistema) para ver información adicional en el panel Analysis.
  4. Panel Analysis: muestra los datos de seguimiento correspondientes al rango de tiempo y al subproceso o llamada de método que elegiste. Allí, puedes seleccionar la forma en que deseas ver cada seguimiento de pila (por medio de las pestañas de análisis) y medir el tiempo de ejecución (mediante el menú desplegable de referencia de tiempo).
  5. Pestañas del panel Analysis: elige cómo mostrar los detalles de seguimiento. Para obtener detalles sobre cada opción, consulta Cómo inspeccionar seguimientos.
  6. Menú de referencia de tiempo: selecciona una de las siguientes opciones a fin de determinar cómo se mide la información de tiempo para cada llamada (solo se admite en Métodos de Java de muestra/Trace):
    • Wall clock time: la información de sincronización representa el tiempo real que transcurrió.
    • Thread time: la información de sincronización representa el tiempo real que transcurrió menos cualquier fracción de ese tiempo en la que el subproceso no consume recursos de CPU. Para cualquier llamada determinada, thread time siempre es menor o igual que wall clock time. Si usas thread time, podrás comprender mejor la fracción de uso de CPU real de un subproceso que se destina a una función o un método determinados.
  7. Filtro: filtra los datos de seguimiento por nombre de paquete, función, método o clase. Por ejemplo, si deseas identificar rápidamente los datos de seguimiento relacionados con una llamada específica, escribe el nombre en el campo de búsqueda. En la pestaña Flame chart, se enfatizan las pilas de llamadas que incluyen una llamada, un paquete o una clase que coincide con la búsqueda. En las pestañas Top down y Bottom up, esas pilas de llamadas tienen prioridad por sobre otros resultados de seguimiento. También puedes habilitar las siguientes opciones marcando la casilla correspondiente junto al campo de búsqueda:
    • Regex: para incluir expresiones regulares en tu búsqueda, usa esta opción.
    • Match case: Si tu búsqueda distingue entre mayúsculas y minúsculas, usa esta opción.
Sugerencia: Cuando inspecciones el cronograma de Threads, puedes usar las siguientes combinaciones de teclas:
  • Acercar: presiona W o desplaza la rueda del mouse mientras mantienes presionada la tecla Ctrl (Cmd en Mac).
  • Alejar: presiona la tecla S o desplaza la rueda del mouse hacia atrás mientras mantienes presionada la tecla Ctrl (Cmd en Mac).
  • Desplazarse a la izquierda: presiona A o arrastra el mouse hacia la derecha mientras mantienes presionada la barra espaciadora.
  • Desplazarse a la derecha: presiona D o arrastra el mouse hacia la izquierda mientras mantienes presionada la barra espaciadora.
  • Expandir o contraer un subproceso: haz doble clic en el nombre del subproceso, o bien selecciónalo y presiona Intro para expandirlo o contraerlo.

Cómo elegir una configuración de registro

Antes de comenzar a registrar información de seguimiento, elige la configuración adecuada para la información de perfil que quieras capturar:

  • Sample Java Methods: captura la pila de llamadas de tu app en intervalos frecuentes durante la ejecución del código basado en Java. El generador de perfiles compara grupos de datos capturados para derivar la información del uso de recursos y sincronización sobre la ejecución del código de tu app.

    Un problema inherente del seguimiento basado en muestras es que, si tu app ingresa en un método luego de una captura de la pila de llamadas y sale de él antes de la siguiente captura, el generador de perfiles no registrará esa llamada al método. Si te interesa el seguimiento de métodos con ciclos de vida tan cortos, debes usar seguimiento instrumentado.

  • Trace Java Methods: instrumenta tu app durante el tiempo de ejecución para registrar una marca de tiempo al principio y al final de cada llamada al método. Las marcas de tiempo se recopilan y se comparan para generar datos de seguimiento de métodos, como la información sobre sincronización y el uso de CPU.

    Ten en cuenta que la sobrecarga asociada con la instrumentación de cada método afecta el rendimiento del tiempo de ejecución y puede influir en los datos de generación de perfiles. Esto se nota aún más cuando se trata de métodos con ciclos de vida más cortos. Además, si tu app ejecuta muchos métodos en poco tiempo, es posible que el generador de perfiles exceda rápidamente su límite de tamaño de archivo y, por lo tanto, no registre ningún otro dato de seguimiento.

  • Sample C/C++ Functions: captura seguimientos muestreados de los subprocesos nativos de tu app. Para utilizar esta configuración, debes implementar tu app en un dispositivo que ejecute Android 8.0 (nivel de API 26) o una versión posterior.

    De forma interna, esta configuración usa simpleperf para rastrear el código nativo de tu app. Si deseas especificar opciones adicionales para simpleperf, como muestrear CPU de dispositivos específicos o especificar duraciones de muestreo con una alta precisión, puedes usar simpleperf desde la línea de comandos.

  • Trace System Calls: captura detalles específicos que te permiten inspeccionar cómo interactúa tu app con los recursos del sistema. Puedes consultar los tiempos y las duraciones exactas de los estados de tus subprocesos, identificar dónde están los cuellos de botella de la CPU en todos los núcleos y agregar eventos de seguimientos personalizados para analizar. Esa información puede ser crucial para cuando intentes solucionar problemas de rendimiento. Para utilizar esta configuración, debes implementar tu app en un dispositivo que ejecute Android 7.0 (nivel de API 24) o una versión posterior.

    Cuando usas esta nueva configuración de seguimiento, puedes marcar visualmente rutinas de código importantes en el cronograma del generador de perfiles mediante la instrumentación del código. Para hacerlo con C/C++, usa la API de seguimiento nativo que proporciona trace.h. En el caso de código Java, usa la clase Trace. Para obtener más información, consulta Cómo instrumentar el código de tu app.

    Esta configuración de seguimiento se basa en systrace. Puedes usar la herramienta de línea de comandos de systrace para especificar opciones más allá de las que se proporcionan en el Generador de perfiles de CPU. Los datos adicionales a nivel del sistema que proporciona systrace pueden ayudarte a inspeccionar los procesos nativos del sistema y solucionar problemas relacionados con marcos retrasados o incompletos.

    En los dispositivos que ejecutan Android 9 (nivel de API 28) o versiones posteriores, puedes usar una app del sistema llamada Registro del sistema para registrar los seguimientos en un dispositivo.

Cómo crear, editar o ver una configuración de registro

Puedes crear, editar y ver configuraciones de registro en el cuadro de diálogo CPU Recording Configurations, que se abre seleccionando la opción Edit configurations ubicada en el menú desplegable de configuraciones de registro, en la parte superior del Generador de perfiles de CPU.

Para ver los ajustes de una configuración de registro existente, selecciónala en el panel izquierdo del diálogo CPU Recording Configurations.

Para crear una nueva configuración de registro, haz lo siguiente:

  1. En la parte superior izquierda del diálogo, haz clic en Add . Esto creará una configuración nueva con algunos parámetros de configuración predeterminados.
  2. Asigna un nombre a tu configuración.
  3. Elige una opción de Trace Technology.
  4. Para configuraciones de registros muestreadas, especifica Sampling interval con un valor en microsegundos (μs). Este valor representa la duración entre cada muestra de la pila de llamadas de tu app. Cuanto más corto sea el intervalo que especifiques, más rápido alcanzarás el límite de tamaño de archivo para los datos registrados.
  5. Especifica File size limit con un valor en megabytes (MB) para los datos registrados que se escriban en el dispositivo conectado. Si detienes el registro, Android Studio analizará estos datos y los mostrará en la ventana del generador de perfiles. Por lo tanto, si aumentas el límite y registras una gran cantidad de datos, Android Studio necesitará mucho más tiempo para analizar el archivo y podría bloquearse.

    Nota: Si usas un dispositivo conectado que ejecute Android 8.0 (nivel de API 26) o una versión posterior, no habrá límite para el tamaño de archivo de los datos de seguimiento y se ignorará este valor. Sin embargo, de todos modos, debes tener cuidado con la cantidad de datos que recopila el dispositivo luego de cada registro, ya que Android Studio podría tener dificultades para analizar archivos de seguimiento de gran tamaño. Por ejemplo, si registras un seguimiento muestreado con un intervalo corto o un seguimiento instrumentado mientras tu app llama a muchos métodos en un período breve, generarás rápidamente archivos de seguimiento muy grandes.

  6. Para aceptar los cambios y seguir modificando otras opciones de configuración, haz clic en Apply. Para aceptar todos los cambios aplicados y cerrar el cuadro de diálogo, haz clic en OK.

Cómo registrar la actividad de la CPU con la API de Debug

Puedes usar la API de Debug para permitir que tu app inicie y detenga el registro de actividad de la CPU en el Generador de perfiles de CPU.

El Generador de perfiles de CPU comienza a registrar cuando tu app llama a startMethodTracing(String tracePath) y deja de hacerlo cuando llama a stopMethodTracing(). Mientras se registra la actividad de la CPU que se activa con esta API, el generador de perfiles correspondiente muestra la Debug API como la configuración de registro de CPU seleccionada.

Para controlar el registro de actividad de la CPU con la API Debug, implementa tu app instrumentada en un dispositivo con Android 8.0 (nivel de API 26) o una versión posterior. El registro iniciado por la API es compatible con apps perfilables. Sin embargo, los generadores de perfiles de Android Studio requieren una app depurable para mostrar el estado de registro en la IU.

Importante: La API de Debug está diseñada para usarse por separado de otros medios de inicio y detención de registro de actividad de la CPU, como los botones de la interfaz gráfica de usuario del Generador de perfiles de CPU y los ajustes de configuración de registro automático durante el inicio de la app.

Debido al límite de tamaño del búfer de 8 MB, el método startMethodTracing(String tracePath) de la API de Debug está diseñado para intervalos cortos o situaciones que son difíciles de iniciar/detener manualmente. Para períodos de grabación más extensos, usa la IU del generador de perfiles en Android Studio.

Para obtener más información, consulta Cómo generar registros de seguimiento mediante la instrumentación de tu app.

Registra la actividad de la CPU durante el inicio de una app

Para comenzar a registrar automáticamente la actividad de la CPU durante el inicio de la app, haz lo siguiente:

  1. Selecciona Run > Edit Configurations.
  2. En la pestaña Profiling, marca la casilla junto a Start recording a method trace on startup.
  3. En el menú, elige una configuración de registro de la CPU.
  4. Haz clic en Aplicar.
  5. Implementa tu app en un dispositivo que ejecute Android 8.0 (nivel de API 26) o una versión posterior seleccionando Run > Profile.