Traces sind oft die beste Informationsquelle bei der ersten Untersuchung eines die Leistung beeinträchtigen. Sie ermöglichen es Ihnen, eine Hypothese vom Problem aufzustellen und wo Sie anfangen sollen.
Unter Android werden zwei Tracingebenen unterstützt: System-Tracing und Methode Tracing von Daten.
Da bei der Systemverfolgung nur die speziell für die Nachverfolgung gekennzeichneten Bereiche nachverfolgt werden, gibt es und die Leistung Ihrer App werden nicht stark beeinträchtigt. System Tracing ist ideal, um zu sehen, wie lange bestimmte Abschnitte Ihres Codes ausgeführt werden soll.
Mit dem Methoden-Tracing wird jeder Funktionsaufruf in Ihrer App nachverfolgt. Das ist sehr teuer. Dies wirkt sich stark auf die Leistung Ihrer App aus, was passiert, welche Funktionen aufgerufen werden und wie oft dass sie angerufen werden.
Standardmäßig enthalten System-Traces keine einzelnen zusammensetzbaren Funktionen. Sie sind in Methoden-Traces verfügbar.
Wir testen derzeit eine neue Funktion zur Systemverfolgung, um zusammensetzbare Funktionen anzuzeigen. Funktionen innerhalb von System-Traces. Das System ist so wenig aufdringlich, Tracing mit Methoden-Tracing-Detailebenen in der Zusammensetzung.
Für Zusammensetzungs-Tracing einrichten
Um das Neuzusammensetzungs-Tracing in Ihrem Projekt auszuprobieren, müssen Sie auf unter mindestens die folgenden Versionen:
- Android Studio Flamingo
- Benutzeroberfläche zum Schreiben: 1.3.0
- Compose-Compiler: 1.3.0
Das Gerät oder der Emulator, auf dem Sie den Trace ausführen, muss ebenfalls mindestens API-Level haben 30.
Außerdem müssen Sie eine neue Abhängigkeit für Compose Runtime Tracing hinzufügen:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
Wenn Sie einen System-Trace erstellen, der Neuzusammensetzung enthält, werden die zusammensetzbaren Funktionen automatisch angezeigt.
System-Trace erstellen
Um ein System-Trace zu erstellen und die neu zusammengesetzten Tracing in Aktion zu sehen, folgen Sie diese Schritte:
Öffnen Sie den Profiler:
<ph type="x-smartling-placeholder">Klicken Sie auf CPU-Zeitachse.
<ph type="x-smartling-placeholder">Navigieren Sie in Ihrer App zu der UI, die Sie verfolgen möchten, und wählen Sie System Trace und Record
<ph type="x-smartling-placeholder">Verwende die App, um eine Neuzusammensetzung vorzunehmen und die Aufnahme zu beenden. Sobald der Trace verarbeitet wurde und erscheint, sollten Sie die zusammensetzbaren Funktionen den Neuzusammensetzungs-Trace. Du kannst mit Tastatur und Maus zoomen und schwenken um den Trace herum; Wenn Sie mit dem Navigieren in einem Trace nicht vertraut sind, sehen Sie in der Dokumentation zu Traces aufzeichnen
<ph type="x-smartling-placeholder">Wenn Sie im Diagramm auf eine zusammensetzbare Funktion doppelklicken, gelangen Sie zum zugehörigen Quellcode.
Sie können zusammen mit der Datei und der Zeile auch zusammensetzbare Funktionen im Flame-Diagramm sehen. Nummer:
<ph type="x-smartling-placeholder">
Einschränkungen
APK-Größen-Overhead
Wir wollten den Aufwand der Funktion so gering wie möglich halten, Es gibt eine APK-Größenerhöhung für „Compose“-Apps aus Tracing-Strings vom Compose-Compiler in das APK eingebettet. Diese Größenerhöhung kann Relativ klein, wenn Ihre App nicht viel „Schreiben“ verwendet, oder größer für das vollständige Schreiben von „Schreiben“ Apps. Diese Tracing-Strings sind außerdem nicht verschleiert, sodass sie in wie zuvor gezeigt. Der Compose-Compiler fügt sie in alle ab Version 1.3.0.
Sie können die Tracing-Strings in Ihrem Produktions-Build entfernen, indem Sie den Parameter folgende Proguard-Regel:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
Diese Funktionen können sich in Zukunft ändern. Sämtliche Änderungen sind jedoch unter in den Versionshinweisen zu „Compose“.
Hinweis: Wenn du sie nicht einbehältst und gleichzeitig Kosten für die APK-Größe anfallen, wird sichergestellt, dass Das APK, für das ein Profil erstellt wird, ist dasselbe, das die App-Nutzer ausführen.
Genaues Timing
Für eine genaue Profilerstellung müssen Sie wie bei allen Leistungstests
App profileable
und non-debuggable
gemäß Profilierbarer Anwendungen.
Trace vom Terminal erfassen
Es ist möglich, einen Kompositions-Trace vom Terminal zu erfassen. Dazu müssen Sie um die Schritte auszuführen, die Android Studio normalerweise automatisch für Sie ausführt.
Abhängigkeiten hinzufügen
Fügen Sie zuerst die zusätzlichen Abhängigkeiten zu Ihrer Anwendung hinzu.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Befehl zum Aufnehmen generieren
- Generieren Sie einen Datensatzbefehl mit in Perfetto.
Fügen Sie den Datenquellenbereich
track_event
manuell hinzu, wie im folgenden Beispiel gezeigt:adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
Trace erfassen
- Starten Sie die App und bereiten Sie den Abschnitt vor, den Sie nachverfolgen möchten.
Aktivieren Sie das Tracing in der App, indem Sie einen Broadcast ausgeben.
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiver
Starten Sie den Aufzeichnungsbefehl, den Sie zuvor erstellt haben.
Trace öffnen
adb pull <location>
ist der Trace vom Gerät (Standort, der in den record-Befehls).Öffnen Sie Perfetto.
Trace mit Jetpack MacroBenchmark erfassen
Sie können die Leistung mit Jetpack MacroBenchmark messen, der Traces als Ergebnisse bereitstellt. Um das Tracing von Zusammensetzungen zu aktivieren, Makro-Benchmarks:
Fügen Sie dem MacroBenchmark-Testmodul diese zusätzlichen Abhängigkeiten hinzu:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Instrumentierungsargument
androidx.benchmark.fullTracing.enable=true
hinzufügen bevor Sie Benchmarks durchführen. Überprüfen Sie die Makro-Benchmark-Instrumentierung Argumente für weitere Informationen zu MacroBenchmark Instrumentierungsargumente.
Feedback
Wir freuen uns auf Ihr Feedback zu dieser Funktion, zu Fehlern, die Sie finden, und alle Ihre Wünsche. Sie können uns über das Problem Tracker.