Perfil básico, ¿dónde estás? | de Akash Khunt | febrero 2023

Imagen generada por DALL E (Shakespeare está buscando algo en el mundo de las ondas de vapor)

NOTA: Aunque no es una secuela real de la mía anterior publicación mediana, sería genial si leyera esta también para obtener información sobre otros problemas que puede enfrentar al medir el impacto de los perfiles de referencia OPPO, oneplus o xiaomi Dispositivos. Dado que ya hay muchos artículos y documentación sobre varios estados de inicio de aplicaciones y perfiles de referencia, no planeo cubrirlos aquí. Si tiene curiosidad, puede desplazarse hasta la parte inferior de esta publicación para consultar los enlaces de referencia.

Recientemente, tenía la misión de mejorar el rendimiento del arranque en frío de la aplicación para uno de mis clientes. Pude crear los perfiles de referencia sin ningún problema, ya que ya había realizado ejercicios similares varias veces en el pasado. Compruebo el impacto en el mío iQOO 7 (Especificaciones: dispositivo SD870G + 8GB RAM + 128GB y Android 13) y pude ver una mejora decente en el lugar donde invertí el tiempo Grupo de subprocesos Jit durante el arranque en frío de la aplicación se ha reducido a 41mslo que era 212ms antes, es decir 80% Reducción 🙂. Entonces estaba muy emocionado de hacer el mismo ejercicio en un dispositivo económico. OPPO A15 (Especificaciones: Helio P35 + 2GB RAM + 32GB y Android 10) como tiempo pasado aquí Grupo de subprocesos Jit era 2180ms (es decir, ~ 2.2 s), así que esperaba al menos ahorrar 1000ms (es decir, 1s). Así que comparé con un perfil de referencia y, para mi sorpresa, no vi ninguna reducción en el tiempo de inicio en frío de la aplicación 🤔. Así que abrí uno de los systraces creados durante la creación de perfiles punto de referencia macro y revisar el tiempo dedicado Grupo de subprocesos Jit eso todavía era muy similar, es decir ~2048ms.Mi primer pensamiento fue que tal vez había un problema con la ejecución de la prueba, así que ejecuté las pruebas 2 veces más, pero aún así no hubo mejoría. Luego pensé que tal vez porque Android 10 no funciona correctamente, así que revisé la documentación y descubrí que debería funcionar en todos ellos. API de Android24+ Dispositivos. Finalmente, decidí que era hora de ponerme el sombrero de Sherlock y preparar la lupa para investigar el problema. 🕵

nota: Usé AGP versión 7.3.1, MacroBenchmark versión 1.1.1 y ProfileIntsaller versión 1.2.2 para medir el efecto del perfil de referencia.

Como no puedo mostrar el proyecto real en el que estoy trabajando por muchas razones, lo usaré Ahora en la aplicación de Android para demostrar el mismo problema. Realicé pruebas de arranque en frío con y sin un perfil de referencia en el mismo Oppo A15 Dispositivo. Como puede ver en las capturas de pantalla a continuación, el tiempo empleado por Grupo de subprocesos Jit con y sin perfiles de referencia era casi el mismo, es decir, 367ms Y 337ms o.Grupo de subprocesos Jit gasto 367ms En Oppo A15 dispositivo a prueba sin perfiles de referenciaGrupo de subprocesos Jit gasto 337ms En Oppo A15 Dispositivo también en las pruebas. con perfiles baseComo referencia, también puede ver el resultado de las mismas pruebas en el dispositivo iQOO 7 a continuación, donde se indica el tiempo empleado Grupo de subprocesos Jit con y sin perfiles de referencia 75ms Y 0,6 ms 😲 oGrupo de subprocesos Jit gastar 75EM En iQOO 7 dispositivo a prueba sin perfiles de referenciaGrupo de subprocesos Jit gasto ~0.1ms En iQOO 7 dispositivo a prueba con perfiles baseLuego comencé a buscar en los registros generados durante las pruebas de BaselineProfile para ver si podía encontrar una pista. Después de pasar unas horas en esto, encontré algunas declaraciones (el mismo número que el número de iteraciones de prueba) que decían «Omitir instalación de perfil para com.google.samples.apps.nowinandroid.benchmark» como se muestra a continuación, que reveló que Baseline Profiles no se instaló correctamente por algún motivo.Registros que indican que la instalación del perfil se omitió por algún motivo al probar con perfiles basicosLuego revisé todo problemas conocidos con perfiles base y finalizó dos de los puntos allí mencionados que pueden afectar la instalación de perfiles base.

  • Las optimizaciones de la batería pueden afectar la instalación del perfil. Para asegurarse de que sus perfiles se instalen de manera efectiva, deshabilite todas las optimizaciones de batería en sus dispositivos de referencia.
  • Los generadores de perfiles de Android Studio no instalan perfiles de referencia cuando se perfila la aplicación (problema).

Comprobé que el Oppo A15 no tenía habilitada la optimización de la batería y que la batería también estaba cargada al 100%. Con respecto al segundo problema mencionado anteriormente, pensé desde una buena perspectiva de UX que debería haber recibido un mensaje de error si este fuera el caso, similar a la creación de perfiles en un dispositivo con batería baja o un emulador. Finalmente, pensé en probar las últimas versiones de punto de referencia macro (es decir 1.2.0-alfa09) Y instalador de perfiles (1.3.0-alfa03) para verificar que no haya ningún problema con las dependencias que estoy usando.Comprobación fallida». Eso al menos me hizo feliz, ya que ahora sé que hay un problema con las pruebas de perfil de línea de base, a diferencia de antes, donde si el usuario no revisa los registros, no sabe por qué los perfiles de línea de base no funcionaron. Luego seguí el rastro de la pila que me llevó a cmdPackageCompile() función donde el resultado de «cmd compile paquete -f -m $compileArgument $packagename» ha sido emparejado «Éxito» Cadena como se muestra a continuación.Las pruebas con perfiles de referencia fallan en CompilationMode.cmdPackageCompile()Esto me dejó preguntándome por qué este error no apareció antes, así que deshice el aumento de versión y verifiqué lo mismo. cmdPackageCompile() Función y vi que en versiones anteriores no se confirmaba el resultado del mismo comando de compilación del paquete 💡 lo que dejaba claro por qué no había error antes. Como referencia, puede ver el código fuente de cmdPackageCompile() funcionar hasta androidx.benchmark:punto de referencia-*:1.2.0-alpha06 y superiores en las siguientes capturas de pantalla.CompilationMode.cmdPackageCompile() código fuente a androidx.benchmark:punto de referencia-*:1.2.0-alpha06CompilationMode.cmdPackageCompile() código fuente para androidx.benchmark:punto de referencia-*:1.2.0-alpha07+Para verificar si se trata de un OEM, es decir, un problema específico de Oppo, realicé las mismas pruebas en los dispositivos Xiaomi y OnePlus. El dispositivo Xiaomi probó bien, pero el dispositivo OnePlus (propiedad de Oppo) había tenido un problema similar y finalmente concluyó que era un problema específico del OEM. Después de esta investigación, ahora sé que no veo ninguna mejora en los puntos de referencia con los perfiles de línea de base (es decir, JIT todavía se ejecuta a toda velocidad), entonces puedo ejecutar el siguiente comando para verificar si el perfil de línea de base es compatible con el dispositivo o revise los registros en la prueba BaselineProfile. 🙂 «adb shell cmd compilar paquete -f -m perfil de velocidad $YOUR_PACKAGE_NAME»

Deja una respuesta

Tu dirección de correo electrónico no será publicada.