In dieser Anleitung wird erläutert, wie Sie in einem Systrace-Bericht navigieren und diesen interpretieren. Informationen zum Interpretieren eines Perfetto-Berichts finden Sie in der Dokumentation zu Trace Processor.
Elemente eines typischen Berichts
Systrace generiert eine HTML-Ausgabedatei, die eine Reihe von Abschnitten enthält. Der Bericht listet die Threads jedes Prozesses auf. Wenn ein Thread UI-Frames rendert, werden im Bericht auch die gerenderten Frames entlang der Zeitachse aufgeführt. Wenn Sie sich im Bericht von links nach rechts bewegen, vergeht die Zeit in Vorwärtsrichtung.
Der Bericht enthält die folgenden Abschnitte (von oben nach unten).
Nutzerinteraktionen
Der erste Abschnitt enthält Balken, die bestimmte Nutzerinteraktionen in deiner App oder deinem Spiel darstellen, z. B. das Tippen auf den Bildschirm des Geräts. Diese Interaktionen dienen als nützliche Zeitmarkierungen.
CPU-Aktivität
Der nächste Abschnitt enthält Balken, die die Thread-Aktivität in jeder CPU darstellen. Die Balken zeigen die CPU-Aktivität in allen Apps an, einschließlich Ihrer App oder Ihres Spiels.
Der Bereich „CPU-Aktivität“ kann maximiert werden, sodass Sie die Taktfrequenz für jede CPU sehen können. Abbildung 1 zeigt ein Beispiel für einen minimierten Bereich mit CPU-Aktivität und Abbildung 2 zeigt eine erweiterte Version mit Anzeige der Taktfrequenz:
Systemereignisse
Die Histogramme in diesem Abschnitt zeigen bestimmte Ereignisse auf Systemebene, z. B. die Anzahl der Texturen und die Gesamtgröße bestimmter Objekte.
Ein Histogramm, das sich genauer ansehen sollte, ist SurfaceView. Die Anzahl stellt die Anzahl der zusammengesetzten Frame-Zwischenspeicher dar, die an die Anzeigepipeline übergeben wurden und noch darauf warten, auf dem Bildschirm des Geräts angezeigt zu werden. Da die meisten Geräte doppelt oder dreimal gepuffert sind, liegt diese Anzahl fast immer bei 0, 1 oder 2.
Weitere Histogramme, die den Surface Flinger-Prozess darstellen, einschließlich VSync-Ereignissen und dem Austausch von UI-Threads, sind in Abbildung 3 dargestellt:
Display-Rahmen
Dieser Abschnitt, der oft der höchste im Bericht ist, enthält eine mehrfarbige Linie, gefolgt von Balkenstapeln. Diese Formen stellen den Status und den Frame-Stack eines bestimmten Threads dar, der erstellt wurde. Jede Ebene des Stapels stellt einen Aufruf von beginSection()
oder den Beginn eines benutzerdefinierten Trace-Ereignisses dar, das Sie für Ihre App oder Ihr Spiel definiert haben.
Die mehrfarbige Linie über jedem Balkenstapel stellt den Status eines bestimmten Threads im Zeitverlauf dar. Jedes Segment der Linie kann eine der folgenden Farben enthalten:
- Grün: Läuft
- Der Thread führt Aufgaben im Zusammenhang mit einem Prozess aus oder reagiert auf eine Unterbrechung.
- Blau: Runnable
- Der Thread kann ausgeführt werden, ist aber derzeit nicht geplant.
- Weiß: Schlafen
- Der Thread hat keine Arbeit, möglicherweise weil er durch eine Mutex-Sperre blockiert ist.
- Orange: Unterbrechungsfreier Schlaf
- Der Thread ist bei E/A blockiert oder wartet auf den Abschluss eines Laufwerksvorgangs.
- Lila: Unterbrechender Schlaf
- Der Thread wird durch einen anderen Kernel-Vorgang blockiert, in der Regel die Speicherverwaltung.
Tastenkombinationen
In der folgenden Tabelle sind die Tastenkombinationen aufgeführt, die beim Anzeigen eines Systrace-Berichts verfügbar sind:
Schlüssel | Beschreibung | |
---|---|---|
W | Zoomen Sie die Trace-Zeitachse heran. | |
V | Auf der Trace-Zeitachse nach links schwenken. | |
S | Zoomen Sie aus der Trace-Zeitleiste heraus. | |
D | Auf der Trace-Zeitachse nach rechts schwenken. | |
O | Zentrieren Sie die Trace-Zeitachse an der aktuellen Mausposition. | |
M | Frame für die aktuelle Auswahl festlegen. | |
1 | Ändern Sie das derzeit aktive Auswahlmodell in den Auswahlmodus. Entspricht der ersten Schaltfläche in der Symbolleiste der Mausauswahl (siehe Abbildung rechts). |
|
2 | Ändern Sie das derzeit aktive Auswahlmodell in den Schwenkmodus. Entspricht der zweiten Schaltfläche, die in der Symbolleiste der Mausauswahl angezeigt wird (siehe Abbildung rechts). |
|
3 | Ändern Sie das derzeit aktive Auswahlmodell in den Zoommodus. Entspricht der dritten Schaltfläche, die in der Symbolleiste der Mausauswahl angezeigt wird (siehe Abbildung rechts). |
|
4 | Ändern Sie das derzeit aktive Auswahlmodell in den Modus „Timing“. Entspricht der vierten Schaltfläche in der Symbolleiste der Mausauswahl (siehe Abbildung rechts). |
|
Raster am Anfang der aktuell ausgewählten Aufgabe anzeigen. | ||
Umschalttaste + G | Raster am Ende der aktuell ausgewählten Aufgabe anzeigen. | |
Linkspfeil | Wählen Sie das vorherige Ereignis auf der aktuell ausgewählten Zeitachse aus. | |
Rechtspfeil | Wählen Sie das nächste Ereignis auf der aktuell ausgewählten Zeitachse aus. |
Leistungsprobleme untersuchen
Wenn Sie mit einem Systrace-Bericht interagieren, können Sie die CPU-Nutzung des Geräts während der Aufzeichnung überprüfen. Hilfe zur Navigation im HTML-Bericht erhalten Sie im Bereich Tastenkombinationen. Sie können auch auf das ? oben rechts im Bericht.
In den folgenden Abschnitten wird erläutert, wie Sie die Informationen im Bericht analysieren, um Leistungsprobleme zu ermitteln und zu beheben.
Leistungsprobleme identifizieren
Wenn Sie in einem Systrace-Bericht navigieren, können Sie Leistungsprobleme einfacher identifizieren, indem Sie einen oder mehrere der folgenden Schritte ausführen:
- Wählen Sie ein Zeitintervall aus, indem Sie ein Rechteck um das Zeitintervall ziehen.
- Markieren oder markieren Sie einen Problembereich mit dem Linealtool.
- Rufen Sie die einzelnen Aktualisierungsvorgänge auf, indem Sie auf Ansichtsoptionen > VSync hervorheben klicken.
UI-Frames und -Benachrichtigungen prüfen
Wie in Abbildung 4 dargestellt, listet ein Systrace-Bericht jeden Prozess auf, der UI-Frames rendert, und gibt jeden gerenderten Frame entlang der Zeitachse an. Frames, die innerhalb der für die Aufrechterhaltung stabilen 60 Frames pro Sekunde erforderlichen 16,6 Millisekunden gerendert werden, sind durch grüne Rahmenkreise gekennzeichnet. Frames, deren Rendering länger als 16,6 Millisekunden dauert, sind durch gelbe oder rote Rahmenkreise gekennzeichnet.
![Ansicht eines Frames herangezoomt](https://developer.android.com/static/topic/performance/images/tracing/frame-unselected.png?authuser=6&hl=de)
Wenn Sie auf einen Kreis mit Rahmen klicken, wird dieser hervorgehoben und Sie erhalten zusätzliche Informationen über die Arbeit des Systems zum Rendern dieses Frames, einschließlich Benachrichtigungen. Der Bericht enthält auch die Methoden, die das System beim Rendern dieses Frames ausgeführt hat. Sie können diese Methoden untersuchen, um mögliche Ursachen für UI-Verzögerungen zu ermitteln.
![Problematischer Frame ausgewählt](https://developer.android.com/static/topic/performance/images/tracing/frame-selected.png?authuser=6&hl=de)
Nachdem Sie einen langsamen Frame ausgewählt haben, wird im unteren Bereich des Berichts möglicherweise eine Benachrichtigung angezeigt. Die in Abbildung 5 gezeigte Benachrichtigung zeigt, dass das Hauptproblem des Frames darin besteht, dass zu viel Zeit für das Recycling und die erneute Bindung von ListView
aufgewendet wird. Im Trace finden Sie Links zu den relevanten Ereignissen, die weitere Informationen darüber enthalten, was das System in dieser Zeit tut.
Klicken Sie ganz rechts im Fenster auf den Tab Benachrichtigungen (siehe Abbildung 6), um jede Benachrichtigung, die das Tool in Ihrem Trace gefunden hat, und die Häufigkeit, mit der das Gerät jede Benachrichtigung ausgelöst hat, anzuzeigen. Im Bereich Benachrichtigungen können Sie sehen, welche Probleme im Trace auftreten und wie oft sie zu einer Verzögerung beitragen. Sie können sich dieses Panel als eine Liste von Fehlern vorstellen, die behoben werden müssen. Oftmals kann schon eine kleine Änderung oder Verbesserung in einem Bereich dazu führen, dass eine ganze Reihe von Benachrichtigungen entfernt wird.
![Tab „Benachrichtigungen“ eingeblendet](https://developer.android.com/static/topic/performance/images/tracing/frame-selected-alert-tab.png?authuser=6&hl=de)
Wenn im UI-Thread zu viel Arbeit erledigt wird, können Sie mit einem der folgenden Ansätze ermitteln, welche Methoden zu viel CPU-Zeit verbrauchen:
- Wenn Sie wissen, welche Methoden zu Engpässen führen können, fügen Sie diesen Methoden Trace-Markierungen hinzu. Weitere Informationen finden Sie in der Anleitung zum Definieren von benutzerdefinierten Ereignissen im Code.
- Wenn Sie sich bezüglich der Ursache von Engpässen in der Benutzeroberfläche nicht sicher sind, verwenden Sie den CPU Profiler, der in Android Studio verfügbar ist. Sie können Trace-Logs generieren und diese dann mit dem CPU-Profiler importieren und untersuchen.