So erhalten Sie die Berechnung der Zeit in NDK
I zu erhalten müssen die Rechenzeit von einigen teilen eines Algorithmus implementierte ich in C mit dem NDK/JNI.
Ich dies gelesen habe Frage: Android Get Current timestamp?
Ich denke, ich kann erhalten die Rechenzeit eines JNI-Aufrufs unter Verwendung der gleichen Methode, die in dieser Weise:
Long start, end, time;
start = System.currentTimeMillis()/1000;
//my native call
end = System.currentTimeMillis()/1000;
time = end - start;
Log.i(TAG, "Time ... (ms): " + time);
Aber ich brauche, um zu überprüfen, die Berechnung mal einige kleine Teile im inneren der nativen Methode. Wie kann ich es tun?
- u kann das tun es, indem Sie log-Meldungen vor und nach der aufrufenden Methode...und dann benutzen Sie einfach die Zeit = Ende - start; ich meine, drucken Sie die Zeit in die log-Nachrichten.
- dein Beispiel teilt
currentTimeMillis()
von 1000... wollten Sie Ihre Messungen, um so natürlich wie Sekunden? - Es ist ein Kopierfehler, ich will nicht dividieren Sie durch 1000 ;D
- offensichtlich In dem Beispiel gibt es das Protokoll zu drucken. Ich will wissen, wie einige ähnliche Funktion INNERHALB des JNI aufrufen, um die aktuelle Zeit und drucken Sie es in der log (ich weiß, wie drucken von Log-Meldungen innerhalb des JNI, weiß nur nicht, wie man die Zeit).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist am besten nicht zu verwenden
gettimeofday()
odercurrentTimeMillis()
auf einem mobilen Gerät. Diese Rückkehr "wall clock" - Zeit, die kann springen, vorwärts oder rückwärts, plötzlich, wenn das Netzwerk aktualisiert die Zeit.Verwenden Sie die monotonen Uhr statt für performance-Messungen --
System.nanoTime
() oderclock_gettime()
mitCLOCK_MONOTONIC
. Hinweis: dieses gibt einestruct timespec
eher als einestruct timeval
; primäre Unterschied ist, dass die Uhr Auflösung von Nanosekunden statt Mikrosekunden.Neben wall-clock Zeit, die Sie interessieren können im pro-thread CPU-Zeit; siehe Thread-Performance in Android.
Innerhalb Ihrer C - /C++ - code,
Diese erhalten Sie eine Struktur, mit der aktuellen Zeit in Sekunden und Mikrosekunden, so dass Sie genug, um die Zeit zu Messen zwischen zwei Punkten relativ leicht. Es führt dann die Konvertierung zur Rückgabe der aktuellen Zeit in Millisekunden.
Edit: aktualisiert, pro @ChrisStratton Vorschlag.