Android-Entwickler-Seite: Verstehen des TraceView-Profiling-Beispiels

8

Ich schaue auf diese Seite: Profiling mit Traceview und dmtracedump

>

Unter "Profilfeld" hat es den folgenden Text, der sich auf das Musterprofilergebnis unterhalb des Textes bezieht:

  

Die letzte Spalte in der Tabelle zeigt die Anzahl der Aufrufe dieser Methode plus die Anzahl der rekursiven Aufrufe. Die letzte Spalte zeigt die Anzahl der Anrufe aus der Gesamtzahl der Anrufe, die an diese Methode getätigt wurden. In dieser Ansicht können wir sehen, dass es 14 Aufrufe von LoadListener.nativeFinished () gab; Ein Blick auf das Zeitleistenfenster zeigt, dass einer dieser Anrufe ungewöhnlich lange dauerte.

Ich bin durch diese Beschreibung verwirrt. Erstens, die ersten beiden Sätze in diesem Zitat scheinen sich auf dieselbe Spalte zu beziehen. Was enthält diese letzte Spalte eigentlich? Zweitens verstehe ich nicht, wo genau im "Zeitleistenfeld" ich schauen muss, um zu sehen, dass es "zeigt, dass einer dieser Anrufe ungewöhnlich lange gedauert hat".

Können Sie mir bitte helfen, diesen Text zu verstehen?

    
I Z 22.02.2012, 15:24
quelle

1 Antwort

10

Zunächst sagt uns der gleiche Artikel:

  

Eltern werden mit einem violetten Hintergrund und Kinder mit einem gelben Hintergrund angezeigt

So ist LoadListener.nativeFinished die übergeordnete Funktion und alle eingerückten Zeilen darunter sind Kinder oder Funktionen, die der Elternteil aufgerufen hat.

Profilbereich

Hier ist ein Ausschnitt des Profilpanels aus dem Artikel:

  

Die letzte Spalte in der Tabelle zeigt die Anzahl der Aufrufe dieser Methode plus die Anzahl der rekursiven Aufrufe.

Die letzte Spalte der ersten Zeile (Eltern) gibt die Anzahl der Aufrufe und rekursiven Aufrufe dieser Funktion an: 14 iterative und 0 rekursive Aufrufe, getrennt durch ein Pluszeichen ( 14 + 14 ) .

Ich denke der Autor des Artikels versehentlich ein paar Worte und als Ergebnis ist die nächste Zeile ein bisschen verwirrend:

  

Die letzte Spalte zeigt die Anzahl der Anrufe aus der Gesamtzahl der Anrufe an, die für diese Methode ausgeführt wurden.

In den gelb hinterlegten untergeordneten Zeilen unterhalb des Elternteils weist die letzte Spalte nicht auf Anrufe + Rec hin. Beachten Sie die Änderung in der Notation - ein Bruch wird im Vergleich zur Plus-Symbolsyntax verwendet. Im Fall von LoadListener.tearDown gibt 14/14 an, dass LoadListener.tearDown 14 Mal von der übergeordneten Funktion aufgerufen wurde. Die LoadListener.tearDown-Funktion wurde innerhalb dieser Ablaufverfolgung insgesamt 14 Mal aufgerufen, daher ist LoadListener.nativeFinished die einzige Funktion, die LoadListener.tearDown in dieser Ablaufverfolgung aufgerufen hat.

Schauen wir uns die andere Reihe an. Die letzte Spalte der (untergeordneten) Funktion View.invalidate hat den Wert 2413/2853. Dies bedeutet nicht, dass View.invalidate 2413 mal iterativ und 2853 mal rekursiv aufgerufen wurde. Stattdessen bedeutet es, dass die übergeordnete Funktion LoadListener.nativeFinished View.invalidate 2413 Mal aufgerufen wurde.

Sehen Sie sich nun Zeile 6 an und Sie werden sehen, dass View.invalidate 2853 mal iterativ und 0 mal rekursiv aufgerufen wurde. Daher ist die übergeordnete Funktion LoadListener.nativeFinished die einzige Funktion, die LoadListener.tearDown innerhalb dieser Ablaufverfolgung jemals aufgerufen hat.

Zeitleiste

Hier ist ein Clip des Zeitleistenfensters aus dem Artikel:

Aus demselben Artikel

  

Die dünnen Linien unterhalb der ersten Zeile zeigen die Ausdehnung (Eingang bis Ausgang) aller Aufrufe der ausgewählten Methode

Beachten Sie die dünnen, klammerähnlichen rosa Linien, die sich horizontal direkt unter dem hervorgehobenen Abschnitt des Hauptfadens erstrecken. Die rosa Zahnspange ganz links ist sehr kurz; Diese repräsentieren 13/14 Aufrufe von LoadListener.nativeFinished, die relativ schnell beendet wurden. Die letzte Klammer - die am weitesten rechts - ist wesentlich länger als alle anderen. Dies ist der Aufruf von LoadListener.nativeFinished, der "ungewöhnlich lange gedauert hat".

    
mjama 08.06.2012 20:57
quelle