Nachzeichnen von Zusammensetzungen

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:

  1. Öffnen Sie den Profiler:

    <ph type="x-smartling-placeholder">
    </ph> Android Studio – Profilerstellung starten
    Abbildung 2: Android Studio – Profilerstellung starten
  2. Klicken Sie auf CPU-Zeitachse.

    <ph type="x-smartling-placeholder">
    </ph> Android Studio Profiler – CPU-Zeitachse
    Abbildung 3: Android Studio Profiler – CPU-Zeitachse
  3. 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">
    </ph> Trace-Optionen – System-Trace
    Abbildung 4: Trace-Optionen – System-Trace
  4. 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">
    </ph> System Tracing
    Abbildung 5. System-Trace

    Wenn Sie im Diagramm auf eine zusammensetzbare Funktion doppelklicken, gelangen Sie zum zugehörigen Quellcode.

  5. Sie können zusammen mit der Datei und der Zeile auch zusammensetzbare Funktionen im Flame-Diagramm sehen. Nummer:

    <ph type="x-smartling-placeholder">
    </ph> Flame-Diagramm
    Abbildung 6: Flame-Diagramm

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

  1. Generieren Sie einen Datensatzbefehl mit in Perfetto.
  2. 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

  1. Starten Sie die App und bereiten Sie den Abschnitt vor, den Sie nachverfolgen möchten.
  2. 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
    
  3. Starten Sie den Aufzeichnungsbefehl, den Sie zuvor erstellt haben.

Trace öffnen

  1. adb pull <location> ist der Trace vom Gerät (Standort, der in den record-Befehls).

  2. Ö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:

  1. 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")
    
  2. 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.