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.
📌 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.
📌 Observaciones Principales
- El método
nativePollOnce()
dentro del cicloloopOnce()
deandroid.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).
📌 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.
📌 Observaciones Principales
- Fragmentación del trabajo entre
RenderThread
y el hilo principalexample.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.
📌 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.