Ist Kontextwechsel mit erheblicher Zeit verbunden?

9

Ich hatte Probleme mit einer App (die sowohl Java als auch C ++ und OpenCV verwendet), die in Bezug auf die Zeit, die zum Ausführen verschiedener Aufgaben benötigt wird, sehr inkonsistent zu sein scheint. Um dies zu diagnostizieren, habe ich eine Funktion in Java (namens one_off_speed_test() ) erstellt, die in einer Schleife, die etwa eine halbe Sekunde dauert, nur eine ganze Reihe von Integer-Mathe-Problemen gemacht hat und dann die Zeit für das Protokoll ausgibt. Wenn ich diese Funktion wiederholt innerhalb von onCreate() aufruft, ist die Zeit für jeden Anruf sehr konsistent (+ = 3%), aber wenn ich sie innerhalb von onCameraFrame() anrufe, eine Funktion, die OpenCV aufruft, wenn ein Bild bereit ist Von der Kamera aus ändert sich die Zeit für den Mathematik-Test in jeder Fram bis zu einem Faktor von zwei. Ich entschied mich, den Execution Sampler in Eclipse / DDMS zu testen und zu sehen, ob ich herausfinden konnte, was passierte. Ich habe gesehen, dass ich, als ich auf one_off_speed_test() geklickt habe, die Eltern und Kinder dieser Funktion zusammen mit der Zeile " (Kontextwechsel) " aufgelistet habe. Dann steht in dieser Zeile unter einer Spalte mit der Bezeichnung " Inkl. Echtzeit " "66%". Jetzt bin ich nicht sehr Experte in der Verwendung von DDMS, und ich habe nur eine verschwommene Idee über Kontextwechsel, aber aus der Beschreibung bisher, sieht es aus wie ich ein Problem mit Kontextwechsel habe, die viel Zeit in Anspruch nehmen? Oder missverstehe ich die DDMS-Ausgabe.

    
Mick 11.07.2014, 17:31
quelle

1 Antwort

2

Der Context-Schalter beschreibt die Zeit, die benötigt wird, um andere Threads auszuführen . Wenn Ihre Funktion also von onCameraFrame() aufgerufen wird, teilt sie CPU mit anderen Threads, nicht unbedingt Threads, die zu Ihrer App gehören.

Siehe auch Antworten Ссылка , Ссылка

Im geposteten Beispiel hat onCameraFrame() 14.413665 sec auf die Wanduhr ausgegeben, wovon 4.814454 sec von one_off_speed_test() (vermutlich für 10 Frames) und 9.596984 sec für andere Threads verwendet wurden. Dies ist sinnvoll, da onCameraFrame() callback für die CPU-Ressource mit dem Kamera-Service konkurriert, der in einem separaten Systemprozess läuft.

    
Alex Cohn 12.07.2014 15:03
quelle