Systrace — qué es, herramienta de trazado del sistema Android

Autor: IT Sectr Publicado: 2026-03-31 Tiempo de lectura: 9 min

Systrace es una herramienta de trazado del sistema Android que recopila datos sobre el kernel de Linux, la CPU, la GPU y todos los procesos del sistema en un período corto de tiempo. A diferencia de Traceview, que se centra en los métodos dentro de la aplicación, Systrace muestra la imagen del sistema: carga de cada núcleo de CPU, funcionamiento de SurfaceFlinger, llamadas Binder y ciclos de GC. Según Google, 2024, la herramienta es indispensable para diagnosticar fotogramas perdidos, recolecciones de basura frecuentes y anomalías en el subproceso de UI.

Puntos clave

  • Systrace — una herramienta de trazado del sistema de bajo nivel para Android, que funciona mediante atrace/ftrace
  • Las trazas contienen datos de CPU, GPU, subprocesos, SurfaceFlinger y Binder durante un período de hasta 60 segundos
  • El análisis permite ver la causa exacta de los fotogramas perdidos y los bloqueos del subproceso de UI
  • Integración con Android Studio y línea de comandos para captura flexible y automatización
  • Perfetto — el sucesor de Systrace en Android 12+, que utiliza un formato común de protobuf

Qué es Systrace

Systrace es una utilidad de línea de comandos del SDK de Android que captura y combina datos de múltiples fuentes de trazado del kernel (ftrace) y del espacio de usuario (atrace) en un único informe HTML. La herramienta apareció en Android 4.1 (Jelly Bean) como reemplazo de la antigua utilidad traceview para la creación de perfiles del sistema y durante mucho tiempo siguió siendo la herramienta estándar de diagnóstico de rendimiento en la plataforma Android.

Arquitectura de Systrace

Systrace se basa en ftrace, un mecanismo de trazado del kernel de Linux disponible en Android desde la versión 4.1. Cuando Systrace se inicia, activa las categorías de traza especificadas: sched (planificador de tareas), freq (frecuencia de CPU), idle (estados inactivos), workq (colas de trabajo), binder, gfx y otras. Los datos se recopilan en el búfer circular del kernel y, tras la detención, se fusionan en un único archivo trace.html que se puede abrir en cualquier navegador.

Systrace en el contexto de Android Studio

A partir de Android Studio 3.1, Systrace está integrado en el CPU Profiler. En el modo Trace System Calls, el generador de perfiles ejecuta Systrace en el dispositivo conectado y muestra los resultados directamente en la ventana de Android Studio. Esto elimina la necesidad de trabajar con la línea de comandos para casos básicos, manteniendo al mismo tiempo toda la funcionalidad: todas las categorías de traza, filtrado y línea de tiempo interactiva. El rendimiento del dispositivo durante el trazado disminuye de manera insignificante, ya que ftrace está diseñado para una sobrecarga mínima.

Cómo funciona Systrace

Systrace utiliza dos mecanismos de recopilación de datos: ftrace a nivel de kernel para eventos del sistema y atrace en el espacio de usuario para etiquetas específicas de Android. ftrace registra los cambios de contexto (sched_switch), los cambios de frecuencia de la CPU (cpu_frequency), las interrupciones (irq_handler_entry) y otros eventos. atrace añade etiquetas del framework de Android: el inicio y el fin del renderizado de fotogramas, las llamadas a SurfaceFlinger y las transacciones Binder.

Cadena de renderizado de fotogramas en Systrace

La característica clave de Systrace es la visualización de la cadena de renderizado de cada fotograma: aplicación → BufferQueue → SurfaceFlinger → HWC (compositor) → Pantalla. Si se produce un retraso en alguna etapa, Systrace muestra la causa exacta: la aplicación no preparó el búfer a tiempo, SurfaceFlinger esperaba VSync o HWC no pudo componer las capas. El ciclo de vida del fotograma en la línea de tiempo tiene un código de colores según el estado: verde (a tiempo), amarillo (retrasado), rojo (perdido). Esta visualización es la herramienta principal para optimizar el rendimiento de la UI.

Categorías de traza

Systrace admite más de 20 categorías de traza, cada una de las cuales incluye un conjunto de eventos relacionados. Las categorías importantes incluyen: gfx (renderizado de gráficos), input (procesamiento de entrada), view (sistema View), webview (WebView), power (consumo de energía), hal (capa de abstracción de hardware). Para la creación de perfiles de juegos, es útil la categoría gfx con detalle de comandos de GPU a través de AGI (Android GPU Inspector).

Características clave de Systrace

Systrace proporciona un conjunto único de capacidades para Android que no están disponibles en otros generadores de perfiles: línea de tiempo del sistema, métricas a nivel de kernel y detección automática de problemas.

Línea de tiempo interactiva

El informe HTML de Systrace contiene una línea de tiempo multinivel donde cada carril corresponde a un proceso o subproceso. Puede acercar y alejar la escala de tiempo, hacer clic en los eventos para ver los detalles (duración, proceso iniciador, argumentos adicionales). El código de colores ayuda a navegar rápidamente: bloques verdes — proceso en ejecución, azules — esperando, naranjas — interrupción, blancos — inactivo.

Mensajes de alerta

Systrace analiza automáticamente la traza y muestra mensajes de alerta que indican áreas problemáticas. Por ejemplo: Buffer underrun — SurfaceFlinger no recibió el búfer antes de VSync o Long Binder transaction — 42 ms en el subproceso Binder_1. Cada alerta contiene un enlace a la sección correspondiente de la línea de tiempo y una recomendación para solucionar el problema. Esto ahorra horas de análisis manual y es una de las principales razones para usar Systrace en lugar del registro manual.

Método Trace.beginSection

Los desarrolladores pueden añadir etiquetas personalizadas a la traza de Systrace mediante la API Trace.beginSection y Trace.endSection. Esto permite rastrear la ejecución de secciones de código críticas directamente en la línea de tiempo del sistema — por ejemplo, marcar el inicio y el final de la carga de datos o el cálculo del diseño. Las etiquetas aparecen como bloques separados en el carril de la aplicación y son visibles junto con los eventos del sistema.

CategoríaDatosUso típico
schedCambios de contexto, estados inactivosBloqueos de subprocesos, contención
gfxVSync, preparación de búfer, HWCCaídas de fotogramas, jank
binderTransacciones Binder, latenciaRetrasos de IPC, llamadas remotas
freqFrecuencia de CPU, gobernador de escaladoThrottling, consumo de energía
gfx + AGIComandos de GPU, sombreadoresRendimiento de juegos

Cómo ejecutar Systrace

Ejecutar Systrace es posible de dos formas: a través del CPU Profiler de Android Studio (modo Trace System Calls) o mediante la línea de comandos utilizando el script de Python systrace.py de la carpeta platform-tools. Cada método tiene sus propios casos de uso.

Ejecución a través de Android Studio

Conecte el dispositivo, abra el Profiler (View → Tool Windows → Profiler), seleccione su proceso, vaya a la pestaña CPU, seleccione el modo Trace System Calls y haga clic en Record. Después de 5–30 segundos, haga clic en Stop — Android Studio ejecutará Systrace en el dispositivo, esperará a que finalice y cargará el resultado. Limitación: la grabación solo es posible mientras el Profiler esté abierto, lo que resulta incómodo para escenarios largos o automatización.

Ejecución desde la línea de comandos

Para un control más flexible, utilice el script systrace.py. Especifique las categorías de traza, la duración y el nombre del archivo de salida. Ejemplo: captura de datos de gfx, input y sched durante 10 segundos. La ejecución requiere Python 2.7+ y un dispositivo conectado con depuración USB habilitada. En Android 12+, Systrace se reemplaza por Perfetto — el comando sigue siendo el mismo, pero el script redirige las llamadas a perfetto.

bash
# Ejecución básica de systrace durante 10 segundos
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Solo la categoría gfx para análisis de UI
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Configuración de etiquetas personalizadas en el código

Para que su código aparezca en la línea de tiempo de Systrace, envuelva la sección crítica con Trace.beginSection / Trace.endSection. Es importante que beginSection y endSection estén estrictamente emparejados — de lo contrario, Systrace mostrará una línea de tiempo incorrecta. En Kotlin, es conveniente usar una extensión inline para garantizar el cierre de la sección incluso en caso de excepción.

kotlin
import android.os.Trace

fun traceSection(name: String, block: () -> Unit) {
    Trace.beginSection(name)
    try {
        block()
    } finally {
        Trace.endSection()
    }
}

// Uso en código
traceSection("load_screen_data") {
    fetchData()
    updateUI()
}

Lectura del informe HTML de Systrace

El informe de Systrace es un archivo HTML autónomo que se puede abrir en Chrome, Edge o Firefox. Contiene una línea de tiempo interactiva, un panel de selección de procesos, una lista de mensajes de alerta y métricas clave (velocidad de fotogramas, uso de CPU, transacciones Binder). Comprender la estructura del informe es una habilidad clave para la creación de perfiles eficaz.

Línea de tiempo y navegación

La línea de tiempo muestra el tiempo de izquierda a derecha. Cada proceso y subproceso es un carril separado. Las teclas W/S acercan/alejan, A/D se mueven a través del tiempo. Seleccione un área con el ratón para ampliar una sección. Las líneas de VSync muestran los límites de los fotogramas (cada 16.6 ms a 60 FPS). Si un ciclo de renderizado completo no cabe entre dos líneas de VSync, el fotograma se pierde. Preste atención al carril de SurfaceFlinger: si está ocupado durante mucho tiempo (bloque naranja), la composición de capas está ralentizando el renderizado general.

Análisis de mensajes de alerta

El panel de Alertas en el lado izquierdo del informe contiene problemas detectados automáticamente. Cada alerta se puede hacer clic — al hacer clic, la línea de tiempo se mueve al momento problemático. Las alertas más comunes: Long Sync (sincronización larga de subprocesos), Scheduling Delay (retraso del planificador), Buffer Overrun (desbordamiento del búfer de SurfaceFlinger). Si una alerta muestra un valor de ~100 ms para Scheduling Delay, indica directamente que el subproceso de UI estaba esperando a la CPU debido a la carga de fondo — los cálculos pesados deben moverse a un Worker Thread.

Ciclo de vida del fotograma y jank

Para analizar los fotogramas perdidos, active los carriles de SurfaceFlinger y app.gfx. Cada fotograma se muestra como un rectángulo: verde (≤16 ms), amarillo (16–32 ms), rojo (>32 ms). Si ve un rectángulo rojo en el carril de la aplicación, haga clic en él — Systrace mostrará qué método (o llamada al sistema) específico superó el límite. Según Google (Android Performance Patterns, 2023), el 70% de los problemas de jank son causados por un onBindViewHolder lento o GC frecuente.

Systrace vs Perfetto: transición al nuevo formato

Perfetto es el sucesor de Systrace, introducido por Google en Android 9 (Pie) como una herramienta experimental y convertido en la solución principal a partir de Android 12. Perfetto utiliza un formato de datos protobuf moderno, admite sesiones largas (horas en lugar de segundos) y tiene una interfaz web para ver trazas. Examinemos las diferencias clave entre los dos sistemas.

CriterioSystracePerfetto
FormatoInforme HTML (trace.html)Protobuf (.trace / .perfetto-trace)
DuraciónHasta 60 segundosHoras, gigabytes de datos
InterfazHTML integradoWeb UI (ui.perfetto.dev)
CategoríasFijas (ftrace + atrace)Extensibles (consultas SQL a la traza)
MovilidadSolo AndroidAndroid, Linux, Chrome, Windows

A pesar de la transición a Perfetto, las habilidades de Systrace siguen siendo relevantes: en dispositivos con Android 11 y versiones anteriores, se utiliza por defecto, y Perfetto mantiene la compatibilidad hacia atrás con las categorías de Systrace. En el CPU Profiler de Android Studio, Perfetto se utiliza para dispositivos nuevos y Systrace para los antiguos — de forma transparente para el usuario. Para CI/CD, se recomienda Perfetto, ya que su formato se puede procesar automáticamente mediante Python y SQL.

Ejemplos de uso de Systrace

Para dominar prácticamente Systrace, consideremos dos escenarios: encontrar la causa de los fotogramas perdidos durante el desplazamiento y diagnosticar GC frecuentes que bloquean el subproceso de UI.

Búsqueda de jank durante el desplazamiento de RecyclerView

Ejecute Systrace con la categoría gfx durante 10 segundos, desplácese por la lista en la aplicación. En el informe, busque secciones con fotogramas rojos. Haga clic en el fotograma problemático y mire el carril de la aplicación — si hay un bloque inflateLayout o onBindViewHolder de más de 16 ms, el problema está en la inflación del diseño o en el enlace de datos. Solución: optimice el diseño (reduzca ViewGroup profundo, ViewStub), descargue la carga de imágenes a Glide con onAttachedToWindow.

Diagnóstico del rendimiento de GC

Systrace con las categorías freq y sched permite ver con qué frecuencia los ciclos de GC adelantan al subproceso de UI. Busque el carril de la aplicación en la línea de tiempo — si ve bloques periódicos de 20–50 ms denominados Concurrent GC, el recolector de basura se ejecuta con demasiada frecuencia. Añada la categoría dalvik para un análisis detallado. Solución: convierta Bitmap a ByteBuffer, utilice un grupo de objetos (ObjectPool) para asignaciones frecuentes, reduzca la fragmentación del heap mediante argumentos de ART.

bash
# Ejecución con categorías para análisis de UI + GC
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# Captura con duración de 30 segundos para prueba reproducible
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

Preguntas frecuentes

¿Se puede ejecutar Systrace sin permisos de root?

Sí, para ejecutar Systrace no se requiere acceso root. La herramienta utiliza atrace, que está disponible en cualquier dispositivo con depuración USB habilitada. Algunas categorías (power, freq) pueden requerir la firma del sistema, pero las principales (gfx, sched, input) funcionan en todos los dispositivos.

¿Cuál es el tamaño máximo del archivo de traza?

El límite de 60 segundos está relacionado con la capacidad del búfer circular de ftrace — durante una grabación larga, el búfer se sobrescribe. Perfetto elimina esta limitación: puede grabar durante horas y obtener trazas de hasta varios gigabytes mediante transferencia USB o transmisión a disco.

¿Por qué los datos de mi aplicación no aparecen en el informe HTML?

Posibles causas: la aplicación no está en modo depurable, no se ha establecido el indicador android:debuggable=true en el manifiesto, o se está utilizando una compilación de lanzamiento. Compruebe también que ha especificado --app=com.example.app en las categorías — de lo contrario, Systrace solo captura los procesos del sistema.

¿Cómo añadir una etiqueta personalizada a Systrace desde código nativo?

Para C++, utilice ATRACE_BEGIN y ATRACE_END de la biblioteca libcutils. Incluya el archivo de cabecera y envuelva la sección deseada. La etiqueta aparecerá en Systrace en el carril de su proceso, lo que es especialmente útil para analizar motores de juegos (Unity, Unreal).

¿Qué usar en lugar de Systrace en Android 12+?

En Android 12 y versiones superiores, utilice Perfetto. Instale el agente de perfetto en el dispositivo a través de ADB, inicie la grabación en formato JSON. Para una visualización rápida, use la interfaz web de Perfetto (ui.perfetto.dev), y para CI — exportación por línea de comandos con TraceProcessor en Python.

Resumen

  • Systrace — un trazador del sistema Android que opera a nivel de kernel mediante ftrace y atrace
  • Muestra la carga de CPU, GPU, SurfaceFlinger y las transacciones Binder en una línea de tiempo unificada
  • El informe HTML contiene mensajes de alerta automáticos con identificación de problemas y recomendaciones
  • Ejecución a través de Android Studio Profiler o línea de comandos con systrace.py
  • El subproceso de UI es crítico: cada fotograma debe caber en 16.6 ms para 60 FPS
  • En Android 12+, Systrace se reemplaza por Perfetto con soporte para sesiones largas y consultas SQL
  • Se recomienda combinar Systrace y Traceview para la creación de perfiles a nivel de sistema y de aplicación

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también