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 .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.