Medir el rendimiento mediante la prueba de instrumentación de Android
Mi objetivo era escribir una prueba de rendimiento automático para el código de la CPU de Android intensiva mediante una prueba instrumental (AndroidJUnitRunner).
Me sorprendió mucho encontrar que los resultados de las pruebas no son confiables, para simular código de CPU intensiva, quiero probar, escribí el siguiente bucle
for(int i=0;i<1000000;i++){ Math.pow(2,i); }
El código se probó como prueba instrumental y dentro de una aplicación para Android
El resultado que obtuve fue el siguiente:
La prueba instrumental mostró ~ 230ms para completar el lazo mientras que el mismo código en el mismo dispositivo (G5) tomó ~ 600ms
Voy a apreciar cualquier idea de por qué la ejecución del mismo código en AndroidJUnitRunner toma tres veces menos tiempo que en el dispositivo real, mientras que ambos de ellos finalmente se ejecutan en el mismo dispositivo
Simplemente la velocidad viene de la CPU, mientras que usted está ejecutando algún código, si la CPU no está haciendo ningún trabajo pesado y todos los núcleos de la CPU están arriba, se ejecutará su código bastante rápido. En android, 'UI rendering' es el trabajo más intenso que AndroidJUnitRunner
no está haciendo, por eso es rápido.
Si desea comprender cómo funciona Android en diferentes escenarios, eche un vistazo a esto: https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE
Creo que la razón de la diferencia en los resultados es la diferencia en el trabajo que el dispositivo tiene que hacer en paralelo a la prueba. (La sobrecarga).
Le sugiero que intente utilizar un marco de prueba que tenga una sobrecarga mayor que el de AndroidJUnitRunner
. Puedes probar Robotium .