Reporte Perfilamiento App3 - gorozcoua/team18 GitHub Wiki

📊 Informe de Perfilamiento de Aplicación – Proyecto: Vinilos

Fecha de Análisis: 19 de mayo de 2025
Dispositivo de Prueba: Pixel 7 – Android API 36
Herramientas Utilizadas: Android Studio Profiler (CPU, Threads, Memory, VSync tracing)
Nombre del Proyecto: vinilos


1. 🔍 Análisis de Uso de CPU y Hilos

✔ Metodología
Se utilizó el Android Studio Profiler para monitorear el uso de CPU, cantidad y actividad de hilos durante la ejecución normal de la aplicación. 4 8

📌 Observaciones Principales

  • Uso de CPU mayormente bajo con un pico al inicio (~28s), sin alcanzar el 100%.
  • Se detectaron 42 hilos activos, cifra elevada para una app promedio, indicando posible sobrecarga o mala gestión de concurrencia.
  • Hilos destacados incluyen RenderThread, example.vinilos (hilo principal) y varios hilos de red (OkHttp, ConscriptStats, DefaultDispatchers).

✅ Recomendaciones

  • Revisar y limitar la creación excesiva de hilos.
  • Externalizar tareas pesadas del hilo principal usando coroutines o servicios en segundo plano.
  • Utilizar StrictMode para detectar operaciones bloqueantes en el hilo UI.

2. 🧠 Análisis de Cuellos de Botella en CPU

✔ Metodología
Se empleó la función “CPU Profiler” para identificar métodos con mayor consumo de tiempo CPU, enfocándose en la pila de llamadas. 5

📌 Observaciones Principales

  • El método nativePollOnce() dentro del ciclo loopOnce() de android.os.Looper consume tiempo significativo.
  • Funciones relacionadas con eventos de interfaz (dispatchInputEvent, dispatchVsync) también tienen alta actividad.
  • Se evidencian procesos intensivos en el hilo principal, posiblemente afectando la fluidez.

✅ Recomendaciones

  • Revisar callbacks y eventos de UI para externalizar operaciones pesadas.
  • Optimizar manejo de eventos y sincronización de pantalla.

3. 🖼️ Análisis de Carga de Recursos y Frames Irregulares

✔ Metodología
Uso de análisis de frames y trazado VSync para detectar cuadros janky (con retrasos >16 ms). 3 (2)

📌 Observaciones Principales

  • Numerosos frames janky que afectan la fluidez (menos de 60 fps).
  • El hilo glide-source-th consume más del 400% del tiempo de CPU, destacando la carga de procesamiento de imágenes con Glide.
  • Métodos intensivos: decodeBitmap, Bitmap.compress, bloqueos por concurrencia (lock contention).

✅ Recomendaciones

  • Optimizar cargas de imágenes con Glide, usar caché, thumbnail(), y reducir resoluciones innecesarias.
  • Evitar compresión o decodificación repetida de imágenes.

4. ⚙️ Análisis de Trazado de Sistema y Eventos VSync

✔ Metodología
Se habilitó la guía VSync para visualizar la sincronización del renderizado entre hilos. 1 (2)

📌 Observaciones Principales

  • Fragmentación del trabajo entre RenderThread y el hilo principal example.vinilos.
  • Interrupciones y bloqueos detectados que causan jank en renderizado.

✅ Recomendaciones

  • Descargar trabajo pesado del hilo principal a otros hilos o coroutines.
  • Priorizar operaciones críticas para la fluidez de UI.

5. 🧩 Análisis Final de Métodos Críticos

✔ Metodología
Revisión de métodos con mayor consumo de CPU y análisis de bloqueos en hilos. 6 7

📌 Observaciones Principales

  • Métodos Glide dominan el consumo CPU (load/engine/decodeBitmap).
  • Repetidos bloqueos por acceso concurrente (lock contention).
  • Actividad del recolector de basura (GC) visible, con funciones como Marking thread roots.

✅ Recomendaciones

  • Reducir concurrencia en acceso a recursos compartidos.
  • Evaluar optimización o reemplazo de carga de imágenes.
  • Optimizar gestión de memoria para reducir presión de GC.

📌 Conclusiones Generales

Aspecto Analizado Resultado / Estado Recomendaciones
Uso de CPU y Hilos Uso CPU aceptable, pero 42 hilos activos Limitar creación de hilos y externalizar carga
Cuellos de Botella CPU Métodos UI y polling consumen tiempo significativo Optimizar eventos UI y callbacks
Carga de Imágenes (Glide) Cuello de botella fuerte en procesamiento de imágenes Optimizar Glide, cachés, y resoluciones
Renderizado y VSync Fragmentación y jank visibles Descargar lógica pesada fuera del hilo UI
Gestión de Memoria y Bloqueos Bloqueos concurrentes y actividad GC alta Reducir bloqueos, mejorar gestión memoria

🛠 Herramientas y Buenas Prácticas Recomendadas

  • StrictMode: para detectar operaciones bloqueantes en UI thread.
  • Memory Profiler: para monitoreo en tiempo real de uso de memoria.
  • Systrace / Perfetto: para análisis detallado de sincronización y rendimiento.
  • LeakCanary: para detección de fugas de memoria.
  • Uso de coroutines: para optimización de hilos y tareas asíncronas.