2017-07-06 4 views
8

Mein Ziel war es, einen automatischen Leistungstest für Android CPU intensiven Code mit einem instrumentellen Test (AndroidJUnitRunner) schreiben.Messung der Leistung mit Android Instrumentierungstest

Ich war sehr überrascht, dass die Testergebnisse zu finden sind nicht zuverlässig, CPU-Kapazität Code simulieren, ich möchte, wurde die folgende Schleife testen, ich schrieb

for(int i=0;i<1000000;i++){ 
    Math.pow(2,i); 
} 

Der Code als Instrumental Test getestet und innerhalb einer Android App

das Ergebnis, das ich bekam, war wie folgt:

Instrumental Test ~ 230ms zeigte die Schleife abzuschließen, während der gleiche Code auf demselben Gerät (G5) nahm ~ 600ms

ich keine Ahnung zu schätzen wissen, warum die Ausführung des gleichen Code auf AndroidJUnitRunner dreimal weniger Zeit in Anspruch nimmt als auf dem realen Gerät, während sie beide schließlich auf demselben Gerät ausgeführt werden

+0

Wahrscheinlich der AndroidJUnitRunner hat mehr Priorität als der Code in Ihrer App – MatPag

+0

, die die Frage stellt, gibt es eine Möglichkeit, den spezifischen Code zu priorisieren –

+0

der Code in der App ist auf dem Hauptthread ausgeführt habe ich dachte, es hat die höchste Priorität sowieso –

Antwort

5

Einfach Geschwindigkeit von CPU kommt, während Sie Wenn Sie etwas Code ausführen, wenn die CPU keine schwere Arbeit verrichtet und alle CPU-Kerne hochgefahren sind, wird Ihr Code ziemlich schnell ausgeführt. In Android ist "UI-Rendering" die intensivste Arbeit, die nicht macht, deshalb ist es schnell.

Wenn Sie verstehen wollen, wie in verschiedenen Szenarien, werfen Sie einen Blick auf diese ausführen Android-Version: https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE

1

Ich denke, dass der Grund für den Unterschied in den Ergebnissen ist der Unterschied in der Arbeit, die das Gerät tun muss parallel zum Test. (Der Overhead).

Ich schlage vor, dass Sie versuchen, ein Testframework zu verwenden, das einen höheren Aufwand als AndroidJUnitRunner hat. Sie können Robotium einen Versuch geben.

+0

danke, werde versuchen, guter Punkt –

Verwandte Themen