Android – perfil de un hilo específico (UI Thread) a través de DDMS

Estoy tratando de encontrar una causa de bloqueos en el hilo de la interfaz de usuario en mi aplicación en ciertas condiciones.
He ejecutado la aplicación a través de perfiles DDMS. Pero en la vista inferior de la tabla de árbol veo todos los métodos llamados a todos los hilos, mientras que me gustaría concentrarme sólo en el hilo principal.

¿Hay una manera de filtrar la lista inferior de árbol de tabla de métodos en DDMS, para incluir sólo las estadísticas de un hilo elegido (hilo de interfaz de usuario en mi caso)?

Una sub-pregunta: ¿hay algún buen profiler de Android por ahí?

La interfaz de usuario no proporciona una forma de hacer esto – sólo tienes que navegar por la línea de tiempo y hacer clic en ocupado buscando secciones.

Hay un enfoque aproximado que puede hacer lo que quieras.

El SDK incluye una herramienta llamada dmtracedump que se puede utilizar para generar informes desde el archivo .trace . Cuando usted toma la traza con DDMS, anote la ubicación del archivo (el mío era /tmp/ddms4176182990461128308.trace ). En Linux, ejecutaría:

 dmtracedump -o <filename> > trace.txt 

Esto le dará un archivo que se ve como:

 VERSION: 3 Threads (13): 1 main 2 GC 3 Signal Catcher 4 JDWP ... Trace (threadID action usecs class.method signature): 4 xit 0 ..dalvik/system/VMDebug.startMethodTracingDdms (IIZI)V 4 xit 0 .android/os/Debug.startMethodTracingDdms (IIZI)V 4 xit 0 android/ddm/DdmHandleProfiling.handleMPSS (Lorg/apache/harmony/dalvik/ddmc/Chunk;)Lorg/apache/harmony/dalvik/ddmc/Chunk; ... 

Como se indica en la salida, cada línea comienza con un ID de subproceso que corresponde a la tabla en la parte superior (por lo que el subproceso ID 4 es el subproceso JDWP, que controla el tráfico DDMS). A esto le sigue un código de acción: ent para la entrada del método, xit para la salida del método o unr para la pila se desenrollan debido a una excepción. Después viene la marca de tiempo de CPU por hilo (es decir, el tiempo de CPU acumulado utilizado por este hilo), luego el nombre del método y la firma.

Si sólo desea ver el hilo principal de la interfaz de usuario (ID de subproceso 1), puede utilizar:

 grep "^ 1 " trace.txt 

Ahora es una simple cuestión de analizar la salida. Todos los derechos reservados

Sería más fácil de manejar si pudiera quitar los datos de los subprocesos sin interés del archivo de rastreo, simplemente abra el nuevo archivo con la herramienta traceview (incluida con el SDK). Si abre un archivo .trace, puede ver que es un fragmento de texto seguido de un fragmento de datos binarios. Usted necesitaría escribir un programa que pasa el texto a través, después analiza la parte binaria y cae cualquier cosa con una identificación del hilo de rosca diferente a la que usted está interesado pulg El formato es simple – una colección de los registros del tamaño fijo – Descrito en un comentario cerca de la parte superior del código de perfil .

(No sé si alguien ya ha escrito esto.)

Para ver su actividad de código (hotspots con call-stacks) en cierto hilo (UI, por ejemplo) me propongo utilizar Intel VTune de System Studio. Puede recopilar el perfil de Puntos de acceso básicos en su dispositivo Android, abrir la pestaña de abajo hacia arriba y seleccionar Agrupar: Hilo / Función / Pila de llamadas. Después de que vea por hotspot-perfil de tu aplicación. (Ver detalles en la captura de pantalla adjunta) Introduzca aquí la descripción de la imagen

Aquí está el tutorial de cómo usar VTune: http://software.intel.com/en-us/articles/using-intel-vtune-amplifier-on-non-rooted-android-devices

El mejor profiler android es sin duda "Eclipse Memory Analyzer". Le permite tomar una instantánea de su memoria y mirar en profundidad lo que está sucediendo en él. Por favor, eche un vistazo en el siguiente enlace para obtener más información al respecto.

http://eclipsesource.com/blogs/2013/01/21/10-tips-for-using-the-eclipse-memory-analyzer/

  • Servicio vs IntentService
  • Gran latencia entre onPreExecute y doInBackground en AsyncTask
  • Uso de la concurrencia de Android
  • ¿Cómo descargar múltiples archivos simultáneamente usando intentservice en Android?
  • IllegalArgumentException en StatFs en WebViewCore thread interno
  • Cómo guardar un archivo con un hilo de fondo en Android
  • ¿Cómo puedo asegurar que el controlador de otro hilo no sea nulo antes de llamarlo?
  • Uso adecuado de yieldIfContendedSafely () en una aplicación multithreaded de Android
  • No recibe datos de ubicación del hilo
  • Android claro hilo webview, libre de memoria, evitar OutOfMemoryError
  • Android de larga duración 'servicio'
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.