Traceview es una herramienta gráfica de trazado integrada en Android Studio que registra y visualiza la ejecución de métodos de la aplicación en términos de tiempo y recursos de CPU. A diferencia de Systrace, que muestra procesos del sistema a nivel de kernel, Traceview se centra en métodos Java y Kotlin dentro de la aplicación, llamados en cadena desde la entrada del usuario hasta el renderizado de la UI. Según Google, 2024, la herramienta permite encontrar cuellos de botella de rendimiento a nivel de llamadas individuales y optimizar el código antes del lanzamiento.
Conclusiones clave
Traceview es un perfilador gráfico integrado en Android Studio que muestra trazas de ejecución de métodos de aplicaciones Android como una línea de tiempo y una tabla de llamadas. Forma parte del SDK de Android y está disponible a través de Android Profiler desde Android Studio 3.0, así como a través de la utilidad de línea de comandos dmtracedump.
La tarea principal de Traceview es ayudar a los desarrolladores a encontrar los métodos que consumen más tiempo de CPU. A diferencia del registro simple, Traceview registra la hora exacta de entrada y salida de cada método, construye un Call Chart y un árbol Top-Down, lo que permite detectar visualmente anomalías de rendimiento. La herramienta es especialmente útil al perfilar el hilo de UI, donde un retraso de 16 ms provoca la pérdida de un fotograma.
Traceview apareció por primera vez en las primeras versiones del SDK de Android como una utilidad independiente para ver archivos .trace. Con el lanzamiento de Android Studio 3.0 (2017), pasó a formar parte de Android Profiler, obteniendo integración con líneas de tiempo en vivo de CPU, memoria y red. Según Google I/O 2018, el equipo de Android Studio continúa desarrollando el perfilador, añadiendo soporte para código nativo a través de systrace y perfetto. En las versiones actuales de Android Studio, Traceview funciona sobre el formato Perfetto pero mantiene la compatibilidad hacia atrás con el formato .trace clásico.
Traceview recibe datos del mecanismo System Tracing en Android Runtime (ART). Cuando una aplicación se inicia con el trazado habilitado, ART registra las marcas de tiempo de inicio y fin de cada método ejecutado, incluyendo el nombre de la clase, el nombre del método y el ID del hilo.
// Inicio del trazado en el código de la aplicación
Debug.startMethodTracing("app_trace")
// Sección crítica del código para el perfilado
loadHeavyData()
// Detención del trazado — archivo guardado en el dispositivo
Debug.stopMethodTracing()
System Tracing opera a nivel de máquina virtual ART y registra cada llamada a método con precisión de microsegundos. Los datos se escriben en un buffer circular para minimizar el impacto en el rendimiento de la aplicación. Cuando el trazado se detiene, el buffer se vacía a un archivo .trace en el almacenamiento interno del dispositivo.
Un archivo .trace contiene un encabezado con la versión del formato y la hora de inicio, seguido de registros para cada llamada: ID del hilo, ID del método, marca de tiempo de entrada y marca de tiempo de salida. Android Studio carga automáticamente el archivo .trace y construye dos vistas principales: el Panel de línea de tiempo para la cronología y el Panel de perfil para la jerarquía de llamadas. Por defecto, el tamaño máximo del buffer es de 8 MB, pero se puede aumentar mediante Debug.startMethodTracing(filename, maxSize).
Traceview proporciona varias vistas de datos complementarias, cada una abordando una tarea específica en el análisis de rendimiento.
Call Chart es una línea de tiempo horizontal donde cada hilo se muestra como un carril separado. Los métodos se muestran como rectángulos de colores: el ancho del rectángulo es proporcional al tiempo de ejecución, y el anidamiento refleja la jerarquía de llamadas. Si un método llama a otro método, el rectángulo hijo se dibuja dentro del rectángulo padre. Esta visualización permite identificar instantáneamente las operaciones que bloquearon el hilo.
El árbol Top-Down muestra el tiempo de ejecución de un método incluyendo todas sus llamadas anidadas — Inclusive Time. El árbol Bottom-Up, por el contrario, muestra qué métodos padres llamaron a un método dado — útil para encontrar la fuente de una operación pesada. La diferencia entre Inclusive y Exclusive Time es crítica: un método puede ejecutarse rápidamente pero llamar a un método hijo lento, y esto solo se ve en Inclusive Time.
Traceview admite búsqueda por nombre de método, paquete o clase. Los resultados se resaltan en la línea de tiempo, y el Panel de perfil muestra estadísticas solo para los métodos encontrados. También está disponible el filtrado por hilos — se pueden ocultar los hilos en segundo plano y centrarse en el hilo principal (UI), donde los retrasos son más críticos.
| Métrica | Descripción | Unidad |
|---|---|---|
| Inclusive Time | Tiempo total del método + todas sus llamadas hijas | μs / ms |
| Exclusive Time | Tiempo solo del método excluyendo llamadas hijas | μs / ms |
| Calls + Recur | Número de llamadas incluyendo recursión | conteo |
| CPU Time | Tiempo real invertido en la CPU (sin espera) | μs / ms |
| Real Time | Tiempo de reloj desde la entrada hasta la salida del método | μs / ms |
Traceview permite exportar trazas en formato CSV para su posterior análisis en hojas de cálculo o gráficos. En Android Studio, también se puede copiar un fragmento seleccionado de la línea de tiempo como imagen — para insertar en informes de errores o documentación. Para CI/CD, la exportación en formato Perfetto está disponible a través de la utilidad cmdline-tools.
El perfilado a través de Traceview está disponible de dos maneras: a través de Android Profiler con captura en vivo y mediante llamadas programáticas a la API Debug. El primer método es conveniente para análisis ad-hoc, el segundo para pruebas de rendimiento reproducibles.
En Android Studio, abra la pestaña Profiler (View → Tool Windows → Profiler), seleccione su dispositivo y proceso de aplicación. Haga clic en el segmento de CPU, luego seleccione el modo “Trace Java Methods” y haga clic en Record. Después de interactuar con la aplicación, haga clic en Stop — Traceview abrirá automáticamente la traza grabada. La duración de grabación predeterminada está limitada a 30 segundos, pero el límite se puede cambiar en la configuración del perfilador.
Para un perfilado preciso de una sección de código específica, use Debug.startMethodTracing y Debug.stopMethodTracing. El archivo se guarda en el almacenamiento externo de la aplicación en la ruta devuelta por context.getExternalFilesDir(null). Después de completar, transfiera el archivo .trace a su computadora a través de Android Studio Device Explorer, luego ábralo mediante File → Open en Android Studio.
Debug.startMethodTracing(
"heavy_computation",
Debug.TRACE_COUNT_ALLOCS
)
processLargeDataset()
Debug.stopMethodTracing()
Debug.startMethodTracing acepta tres parámetros: el nombre del archivo (sin extensión), el tamaño máximo del búfer (por defecto 8 MB) y banderas. La bandera TRACE_COUNT_ALLOCS añade el conteo de asignaciones de objetos — útil para encontrar fugas de memoria. Traceview no es adecuado para perfilar código nativo — use SimplePerf o Perfetto. Para pruebas largas (más de 30 segundos), se recomienda aumentar el búfer a 64–128 MB mediante el parámetro maxSize.
La línea de tiempo de Traceview consta de dos paneles: el Panel de línea de tiempo superior con rectángulos de llamadas de colores y el Panel de perfil inferior con una tabla de estadísticas. El Panel de línea de tiempo muestra la ejecución de hilos de izquierda a derecha, donde cada rectángulo es una llamada a un método. Los colores de los rectángulos se codifican por tipo de método: llamadas del sistema Android (verde), métodos de aplicación (azul), llamadas a bibliotecas (naranja).
En el Panel de perfil, cada fila es un método con columnas para Inclusive Time, Exclusive Time, Calls + Recur y CPU Time. Ordene la tabla por Inclusive Time (descendente) para ver primero los métodos que tomaron más tiempo total. Si un método con Inclusive Time alto tiene Exclusive Time bajo — el problema está en sus llamadas hijas, y necesita expandir el árbol. Por ejemplo, ListView.getView puede tener Inclusive Time alto debido a llamadas de carga de imágenes.
Busque métodos con Real Time anormalmente alto pero CPU Time bajo — esto indica bloqueo (espera de E/S, operación de red, contención de bloqueo). Los métodos con CPU Time alto requieren optimización del algoritmo. Para el hilo de UI, cada método debe completarse dentro de 16 ms — si alguna llamada supera este umbral, la aplicación pierde un fotograma y el usuario ve fluctuaciones. Según las recomendaciones de Google, el tiempo total de todas las llamadas en el hilo de UI por fotograma no debe exceder 8–10 ms, dejando un margen para las operaciones del sistema.
Aunque tanto Traceview como Systrace son herramientas de trazado de Android, resuelven diferentes tareas y se utilizan en diferentes etapas del perfilado. La principal diferencia es el nivel de detalle: Traceview opera a nivel de métodos Java/Kotlin, Systrace a nivel de procesos del sistema (CPU, GPU, Binder, SurfaceFlinger).
| Criterio | Traceview | Systrace |
|---|---|---|
| Nivel | Métodos (Java/Kotlin) | Procesos del sistema (CPU/GPU/IO) |
| Interfaz | Android Studio Profiler | Línea de comandos + informe HTML |
| Datos | Inclusive/Exclusive Time | Carga de CPU, tasa de fotogramas |
| Duración | Hasta 30 seg (Profiler), ilimitado (API) | Hasta 60 segundos |
| Código nativo | No compatible | Compatible mediante marcadores atrace |
En la práctica, ambas herramientas se complementan: primero Systrace ayuda a identificar qué componente del sistema está causando el problema (por ejemplo, GC frecuente o bloqueos de Binder), luego Traceview permite profundizar en un método específico dentro de la aplicación. En Android Studio, ambas herramientas están combinadas en Android Profiler — CPU Profiler selecciona automáticamente el modo de grabación óptimo. En dispositivos con Android 12+, Systrace y Traceview funcionan sobre Perfetto, proporcionando un formato de datos unificado para todos los tipos de perfilado.
El perfilado efectivo requiere más que simplemente iniciar el trazado — necesita colocar correctamente los puntos de captura e interpretar los resultados. A continuación se presentan dos ejemplos prácticos: perfilado de carga de RecyclerView y comparación de dos algoritmos en una prueba de rendimiento.
El primer ejemplo es el trazado de la ruta crítica durante el desplazamiento de la lista. RecyclerView llama a onBindViewHolder para cada elemento visible, y si este método toma más de 16 ms, el desplazamiento se vuelve entrecortado. El trazado alrededor de onBindViewHolder mostrará qué operaciones específicas dentro de él están tomando tiempo.
class MyAdapter : RecyclerView.Adapter<ViewHolder>() {
override fun onBindViewHolder(
holder: ViewHolder,
position: Int
) {
Debug.startMethodTracing("bind_card_$position")
holder.bind(items[position])
Debug.stopMethodTracing()
}
}
El segundo ejemplo es una prueba A/B de velocidad de dos implementaciones: carga de imágenes a través de Glide versus BitmapFactory manual. Esta traza permite la comparación objetiva del Inclusive Time de ambas estrategias y la selección de la óptima. Es importante ejecutar cada prueba en un dispositivo calentado (después de 3–5 ciclos) en condiciones idénticas (carga en segundo plano, temperatura).
fun compareImageLoadingStrategies() {
// Prueba A: Glide
Debug.startMethodTracing("glide_test")
loadWithGlide()
Debug.stopMethodTracing()
// Prueba B: BitmapFactory
Debug.startMethodTracing("bitmap_test")
loadWithBitmapFactory()
Debug.stopMethodTracing()
}
Después de ejecutar, abra ambos archivos .trace en Android Studio y compare el Inclusive Time en el Panel de perfil. Si Glide muestra 3x menos Inclusive Time para la misma tarea — esta es una base objetiva para elegir la biblioteca. Según Tony John (desarrollador de Glide, 2023), la biblioteca utiliza caché y un grupo de hilos, proporcionando hasta un 40% de ganancia en cargas repetidas.
Preguntas frecuentes
Traceview es el núcleo de visualización de trazas dentro de Android Profiler. El Profiler proporciona una UI adicional para iniciar y detener la grabación, mientras que Traceview se encarga de mostrar la línea de tiempo y las estadísticas de los métodos. Ambos usan el mismo formato de datos .trace.
Sí, Traceview funciona tanto en el emulador como en dispositivos Android físicos. La depuración USB debe estar habilitada y la aplicación debe compilarse en modo debuggable. Los datos en dispositivos físicos son más precisos, ya que el emulador puede distorsionar los tiempos debido a la virtualización.
El tamaño máximo predeterminado es 8 MB, pero se puede aumentar a 256 MB mediante el parámetro maxSize en Debug.startMethodTracing. Para sesiones largas de perfilado, use Perfetto, que no tiene un límite estricto en el tamaño de la traza.
Traceview opera a nivel de Android Runtime (ART) y solo ve métodos administrados de Java y Kotlin. Para perfilar código nativo (C/C++ mediante JNI), use SimplePerf o Perfetto con FTrace, que capturan llamadas del sistema a nivel de kernel.
Use la utilidad dmtracedump del SDK de Android (carpeta platform-tools). Genera un informe HTML con una línea de tiempo y una tabla de estadísticas. En Windows: dmtracedump -h trace.trace > report.html. Una alternativa es la UI de Perfetto (ui.perfetto.dev), que admite la importación del formato .trace.
Resumen
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.
Lea también