Benchmark

In Android Studio kannst du die Leistung deines Codes präzise messen.
Letzte Aktualisierung Stabile Version Releasekandidat Beta-Ausgabe Alpha-Release
10. Juli 2024 1.2.4 - 1.3.0-beta02 -

Abhängigkeiten deklarieren

Wenn Sie eine Abhängigkeit von Benchmark hinzufügen möchten, müssen Sie Ihrem Projekt das Maven-Repository von Google hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

Makro-Benchmark

Wenn Sie MacroBenchmark in Ihrem Projekt verwenden möchten, fügen Sie der Datei build.gradle für das Makro-Benchmark-Modul die folgenden Abhängigkeiten hinzu:

Groovig

dependencies {
  androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.2.4"
}

Kotlin

dependencies {
  androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.2.4")
}

Mikro-Benchmark

Wenn Sie in Ihrem Projekt MicroBenchmark verwenden möchten, fügen Sie der Datei build.gradle für das MicroBenchmark-Modul die folgenden Abhängigkeiten hinzu:

Groovig

dependencies {
    androidTestImplementation "androidx.benchmark:benchmark-junit4:1.2.4"
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Kotlin

dependencies {
    androidTestImplementation("androidx.benchmark:benchmark-junit4:1.2.4")
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Die MicroBenchmark-Bibliothek enthält außerdem ein Gradle-Plug-in zur Verwendung mit Ihrem MikroBenchmark-Modul. Dieses Plug-in legt Standardeinstellungen für die Build-Konfiguration für das Modul fest, richtet eine Benchmark-Ausgabekopie zum Host ein und stellt die Aufgabe ./gradlew lockClocks bereit.

Fügen Sie die folgende Zeile in den Block „plugins“ in der Datei build.gradle der obersten Ebene ein, um das Plug-in zu verwenden:

Groovig

plugins {
  id 'androidx.benchmark' version '1.2.4' apply false
}

Kotlin

plugins {
  id("androidx.benchmark") version "1.2.4" apply false
}

Wenden Sie dann das Plug-in auf die Datei build.gradle Ihres Benchmark-Moduls an.

Groovig

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Feedback

Dein Feedback hilft uns, Jetpack zu verbessern. Teilen Sie uns mit, wenn Sie neue Ausgaben entdecken oder Verbesserungsvorschläge für diese Bibliothek haben. Bitte sieh dir die vorhandenen Probleme in dieser Bibliothek an, bevor du eine neue erstellst. Sie können einem vorhandenen Problem Ihre Stimme hinzufügen, indem Sie auf die Sternschaltfläche klicken.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung.

Version 1.3

Version 1.3.0-beta02

10. Juli 2024

androidx.benchmark:benchmark-*:1.3.0-beta02 wurde veröffentlicht. Version 1.3.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Behandeln Sie EXITCODE 2 ordnungsgemäß, wenn Perfetto gestartet wird, um eine Warnung zu protokollieren, aber fahren Sie fort.

Version 1.3.0-beta01

12. Juni 2024

androidx.benchmark:benchmark-*:1.3.0-beta01 wurde veröffentlicht. Version 1.3.0-beta01 enthält diese Commits.

API-Änderungen

  • MethodTracing.affectsMeasurementOnThisDevice wurde aus Konsistenzgründen in AFFECTS_MEASUREMENT_ON_THIS_DEVICE umbenannt. (I1bdfa)
  • Die experimentelle BlackHole.consume() API wurde hinzugefügt, um die Eliminierung von veraltetem Code in MikroBenchmarks zu verhindern. (If6812, b/286091643)
  • MicroBenchmark wird jetzt korrekt ausgegeben, um zu verhindern, dass die Methodenverfolgung die Messungen beeinträchtigt. Dies tritt auf bestimmten Geräten auf, wenn das Methoden-Tracing über Instrumentierungsargumente oder MicrobenchmarkConfig erzwungen wird und wenn nach einem Methoden-Trace eine Messung versucht wird. Die betroffenen Geräte haben API 26-30 oder bestimmte ART-Mainline-Modulversionen, die von dieser Störung betroffen sind. Sie können während der Laufzeit über ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice erkannt werden. (Iafb92, b/303660864)

Fehlerkorrekturen

  • Die empfohlene maximale AP-Version wurde auf 9.0.0-alpha01 erhöht. (I5bbb0)
  • Kompilierungsmodus zum Benchmark-Kontext hinzugefügt (If5612, b/325512900)
  • AIDL-Tracing standardmäßig aktivieren (erfordert API 28) (Ia0af2, b/341852305)
  • In der JSON-Ausgabe wurden zusätzliche Informationen im Benchmark-Kontext hinzugefügt:
    • context.artMainlineVersion: ganzzahlige Version des Art-Mainline-Moduls (falls auf dem Gerät vorhanden, andernfalls -1)
    • context.build.id – Ist gleich android.os.Build.ID
    • context.build.version.codename – Ist gleich android.os.Build.VERSION.CODENAME
    • context.build.version.abbreviatedCodename: entspricht dem ersten Buchstaben des Codenamens der Vorabveröffentlichung (auch bei Release-Builds) (Ie5020)
  • Der Fehler in StackSampling wurde so korrigiert, dass androidx.benchmark.profiling.sampleDurationSeconds berücksichtigt wird (Ib1d53).
  • Ändere die allgemeine Abhängigkeit von Makro-> zu api(), damit die Verwendung einfacher ist, z.B. PerfettoTrace und PerfettoConfig. (Icdae3, b/341851833)
  • Achten Sie darauf, dass die Aufgaben mergeArtProfile und mergeStartupProfile immer auf die Erstellung des Basisprofils warten. (I623d6, b/343086054)
  • Berücksichtigen Sie bei der Entscheidung, ob eine Variante aktiviert werden soll, den Aktivierungsstatus für Varianten. (I5d19e, b/343249144)
  • Das standardmäßige Startzeitlimit des Perfetto-Trace-Prozessors wurde erhöht. (I87e8c, b/329145808)

Version 1.3.0-alpha05

14. Mai 2024

androidx.benchmark:benchmark-*:1.3.0-alpha05 wurde veröffentlicht. Version 1.3.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Klarere Ausnahme auslösen, wenn der Makrobench-Messwert für alle Iterationen Nullwerte zurückgibt (Iab58f, b/314931695)
  • Den Microbench-Proguard-Regeln wurden zusätzliche Problemumgehungen hinzugefügt, einschließlich der Unterstützung von Listener-Regeln und anderen beobachteten Warnungen / Fehlern. (I14d8f, b/329126308, b/339085669)
  • Das Methoden-Tracing wird während eines MacroBenchmark als separate Phase ausgeführt und wirkt sich nicht mehr auf Messungen aus. (If9a50, b/285912360, b/336588271)
  • Es wurden zusätzliche Vorschläge zur Fehlerbehebung hinzugefügt, um eine Fehlermeldung für Shader-Broadcasts zu hinterlassen. (I5efa6, b/325502725)

Version 1.3.0-alpha04

1. Mai 2024

androidx.benchmark:benchmark-*:1.3.0-alpha04 wurde veröffentlicht. Version 1.3.0-alpha04 enthält diese Commits.

API-Änderungen

  • Es wurde die experimentelle Variante MacrobenchmarkRule#measureRepeated hinzugefügt, die eine benutzerdefinierte PerfettoConfig für eine vollständig benutzerdefinierte Perfetto-Trace-Aufzeichnung verwendet. Falsch konfigurierte Konfigurationen können dazu führen, dass integrierte Messwertklassen fehlschlagen. (Idfd3d, b/309841164, b/304038384)
  • PowerMetric.deviceSupportsPowerEnergy zur besseren Verständlichkeit in PowerMetric.deviceSupportsHighPrecisionTracking umbenennen (I5b82f)
  • PowerMetric.deviceBatteryHasMinimumCharge() und PowerMetric.deviceSupportsPowerEnergy() wurden hinzugefügt, damit Benchmarks je nach der Fähigkeit zur Messung der Geräteleistung geändert oder übersprungen werden können. (I6a591, b/322121218)

Fehlerkorrekturen

  • Vergleich mit vorherigem Basisprofil hinzugefügt (I824c8, b/269484510)
  • DSL zum Deaktivieren von Warnungen hinzugefügt (Ic4deb, b/331237001)
  • Ausnahme für das Infofenster wurde geändert, wenn Benchmark-Varianten deaktiviert sind (I8a517, b/332772491).
  • Vereinfachen Sie die Erfassung von Methoden-Traces für eine MacroBenchmark, die auf die Dauer der tatsächlichen measureBlock() beschränkt ist. Bisher wurde es beim Start des Zielprozesses gestartet und nur Kaltstarts unterstützt (Iee85a, b/300651094).
  • Abstürze vermeiden, wenn Perfetto Trace-Prozessor langsam startet (I98841, b/329145808)

Version 1.3.0-alpha03

17. April 2024

androidx.benchmark:benchmark-*:1.3.0-alpha03 wurde veröffentlicht. Version 1.3.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Fügt öffentliche API PerfettoTraceProcessor.Session.queryMetrics APIs mit JSON-, textproto- und proto-binären (nicht decodierten) Varianten hinzu. Damit können Sie in TraceProcessor integrierte Messwerte (I54d7f, b/304038382) abfragen.
  • profilerOutput wurde der JSON-Ausgabe hinzugefügt, um die Tools zur Profilerstellung zu vereinfachen (z.B. Perfetto, Methoden-Traces). (I05ddd, b/332604449)
  • Leistungs-Tag wurde der Perfetto-Konfiguration für Benchmarks hinzugefügt. Damit werden beispielsweise Wakelock-Tracepoints erfasst. (Icfe44, b/286551983)
  • Das inst-Argument androidx.benchmark.profiling.skipWhenDurationRisksAnr wurde hinzugefügt. Es kann auf „false“ gesetzt werden, um das Überspringen von Methoden-Traces zu vermeiden, wenn die erwartete Dauer zu einem ANR-Fehler führen kann. Dies sollte bei CI-Ausführungen dringend empfohlen werden.
  • Das experimentelle Argument androidx.benchmark.profiling.perfCompare.enable wurde hinzugefügt. Setzen Sie es auf "true", um einen Vergleich zwischen der Mess- und der Profilerstellungsphase auszuführen. Nützlich bei der Bewertung des Aufwands bei der Methodenverfolgung. (I61fb4, b/329146942)

API-Änderungen

  • TraceSectionMetric.Mode wurde in eine „siegelte Klasse“ geändert, um eine zukünftige Erweiterung zu ermöglichen, ohne dass bei Anweisungen alle Informationen erschöpft sind (I71f7b)
  • Es wurden TraceSectionMetric.Mode.Average und .Count hinzugefügt und Argumente neu angeordnet, sodass das häufigere Argument (Modus) weiter oben in der Argumentliste stand, wodurch die Notwendigkeit der Angabe von Parameternamen reduziert wurde. (Ibf0b0, b/315830077, b/322167531)
  • Metric.getResult wurde in getMeasurements umbenannt, um dem Rückgabetyp zu entsprechen (I42595)

Fehlerkorrekturen

  • Beheben Sie das Problem, damit für Benchmarks generierte Referenzprofile verwendet werden, wenn „automaticGenerationDuringBuild“ deaktiviert ist (Ic144f, b/333024280).
  • Beheben Sie die Überschreibungen der BaselineProfile-Gradle-Plug-in-Eigenschaften, um das Generieren von Referenzprofilen und Benchmarking zu aktivieren, wenn Sie einen nonMinified- oder Benchmark-Build-Typ anpassen. (Ib8f05, b/324837887)
  • Methoden-Traces wurden in der Makro-Benchmark korrigiert, sodass Methoden-Traces auch auf langsameren Geräten vollständig erfasst und gültig sind. (I6349a, b/329904950)
  • Aktivieren Sie die Blockierung des Starts für den Perfetto-Trace-Eintrag, um das Risiko fehlender Daten zu Beginn des Trace zu verringern. Wird nur ab API 33 unterstützt. (Ie6e41, b/310760059)
  • Es wurde eine Warnung hinzugefügt, wenn Android Test Orchestrator in Benchmark-Modulen verwendet wird, da dadurch Ausgabe-JSON-Dateien pro Modul wiederholt überschrieben werden. (Ia1af6, b/286899049)
  • Erzwingen Sie Tausendertrennzeichen "," (Komma) aus Gründen der Konsistenz in der Studio-Ausgabe, wobei die Sprache des Geräts ignoriert wird (I3e921, b/313496656).
  • TraceSectionMetric unterstützt jetzt Segmente, die mit Trace.{begin|end}AsyncSection erstellt wurden. (I91b32, b/300434906)
  • Alle Fehler bei der Starterkennung wurden mit log.w / Exception-Labels versehen. Dies ändert das aktuelle Verhalten nicht, sodass einige Fehler ausgegeben werden und andere den Start unbemerkt nicht erkennen. Sie sind lediglich verständlicher. Im Allgemeinen sind Ereignisse, bei denen Nicht-Frame-Ereignisse fehlen, Log.w() und keine Startmesswerte melden. Ausnahmen werden ausgelöst, wenn ein Start erkannt wird, mit Ausnahme von Frame-Timing-Informationen (aus UI-/RT-Slices). (Id240f, b/329145809)
  • Brechen Sie Dexopt-Jobs im Hintergrund ab, bevor Sie eine MacroBenchmark ausführen, um Störungen zu reduzieren. (I989ed)
  • frameCount wurde zu FrameTimingMetric hinzugefügt, um bei der Erkennung von Szenarien zu helfen, in denen sich Messungen ändern, weil sich die Anzahl der erzeugten Frames geändert hat (neue Animationen hinzugefügt, Probleme mit der Entwertung behoben). (I1e5aa)
  • Es wurde klargestellt, dass frameOverrunMs der bevorzugte Messwert für das Tracking ist, wenn er in Dokumenten verfügbar ist, und die Gründe dafür. (I18749, b/329478323)

Version 1.3.0-alpha02

20. März 2024

androidx.benchmark:benchmark-*:1.3.0-alpha02 wurde veröffentlicht. Version 1.3.0-alpha02 enthält diese Commits.

Neue Funktionen

  • Experimentelle R8-Unterstützung in Microbench über eingebettete Proguard-Regeln. Diese Unterstützung ist experimentell und erfordert AGP 8.3 zur Reduzierung von Bibliotheksmodultests. Mit dem folgenden Befehl können Sie die R8-Komprimierung/-Optimierung im build.gradle Ihres Benchmark-Moduls aktivieren. Dies sollte je nach Arbeitslast zu einer deutlichen Leistungssteigerung führen. (I738a3, b/184378053)

    android {
        buildTypes.release.androidTest.enableMinification = true
    }
    

Fehlerkorrekturen

  • Es wurde behoben, dass die Warnung für Methoden-Tracing in einer anderen Zeile von der Microbench-Ausgabe angezeigt wird. (I0455c, b/328308833)

Version 1.3.0-alpha01

21. Februar 2024

androidx.benchmark:benchmark-*:1.3.0-alpha01 wurde veröffentlicht. Version 1.3.0-alpha01 enthält diese Commits.

API-Änderungen

  • Boolesche Parameter von MicrobenchmarkConfig wurden umbenannt, um unnötiges Wort „sollte“ zu vermeiden (Ia8f00, b/303387299)
  • BenchmarkRule.measureRepeatedOnMainThread wurde hinzugefügt, damit Hauptthread-Benchmarks (z.B. solche, die auf die UI für Ansichten oder das Schreiben tippen) verhindern, dass ANR-Fehler ausgelöst werden, insbesondere bei großen Suiten in CI. (I5c86d)
  • FrameTimingGfxInfoMetric wurde hinzugefügt, eine experimentelle alternative Implementierung von FrameTimingMetric, bei der Messungen direkt von der Plattform stammen und nicht aus dem Perfetto-Trace extrahiert werden. (I457cb, b/322232828)
  • Fügen Sie die Möglichkeit hinzu, ein ART-Profil während einzelner warmUp-Iterationen zu erstellen. (I17923)
  • An der TraceSectionMetric API wurden mehrere Änderungen vorgenommen:
    • Mode.Min und Mode.Max hinzufügen
    • Labelargument hinzufügen, um den Abschnittsnamen als Messwertlabel zu überschreiben
    • Modusname für die Ausgabe hinzugefügt, um die Bedeutung der Messwerte zu verdeutlichen
    • Änderung des Standardwerts in Summe, da dieser Messwert größtenteils für wiederkehrende Ereignisse genutzt wird. Beachten Sie diese Änderungen bei der CI-Nutzung, da dies zu Unterbrechungen oder Störungen beim Parsen führen kann. (Ic1e82, b/301892382, b/301955938)

Fehlerkorrekturen

  • Verbesserte Fehlermeldung im Gradle-Plug-in für Basisprofil, wenn das angegebene verwaltete Gerät nicht vorhanden ist (Idea2b, b/313803289)
  • Fehlerkorrektur für das Einbeziehen von Referenzprofilen der Bibliothek in AGP 8.3.0-alpha15 (I1d2af, b/313992099)
  • Die Ausgabe-URL für die Referenz und das Startprofil am Ende der Generierungsaufgabe wurde korrigiert (I802e5, b/313976958).
  • Zeitüberschreitungen für Datenquellen wurden angepasst, um java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] zu beheben (I8dc7d, b/323601788)
  • Fügen Sie zwei Instrumentierungsargumente für das Überschreiben des Shader-Drop-Verhaltens hinzu, um Abstürze beim Benchmarking von Apps ohne ProfileInstaller 1.3 zu umgehen:
    • androidx.benchmark.dropShaders.enable=true/false : kann verwendet werden, um alle Shader Drops zu überspringen (einschließlich der in StartupMode.Cold-Einführungen durchgeführten Drops), insbesondere beim Benchmarking von Apps, die Profileinstaller 1.3 noch nicht verwenden.
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : kann verwendet werden, um Fehler beim Löschen von Shadern zu tolerieren, z. B. beim Benchmarking von Apps ohne Profiler 1.3 (I4f573).
  • Die Methodenverfolgung im UI-Thread wird übersprungen, wenn sie voraussichtlich länger als ein paar Sekunden dauert, und Methodentraces beim Auslösen bereinigt. (I6e768)
  • Wird ausgelöst, wenn Dateinamen länger als 200 Zeichen sind, um unklare Abstürze beim Schreiben oder Nachverarbeiten von Dateien zu vermeiden. (I4a5ab)
  • Es wurde ein Problem behoben, bei dem nicht abgeschlossene Frames am Anfang und Ende des Trace paarweise kombiniert wurden, was fälschlicherweise als einzelner extrem langer Frame gemeldet wurde. (I39353, b/322232828)
  • Verwenden Sie --skip verification ab API 30 und höher, wenn Sie ein Paket auf API 30-33 neu installieren, um ART-Profile von Nutzer-Builds zu löschen. So lassen sich Play Protect-Warnungen umgehen, die bei einigen Geräten zu Fehlern führen. (Ic9e36)
  • Mit am force-stop kannst du Apps beenden, wenn es sich nicht um System-Apps wie die System-UI oder den Launcher handelt. (I5e028)
  • MacroBenchmark wartet jetzt auf 1 second, bis die Zielanwendung ein ART-Profil geleert hat (zuvor wurde auf 500 ms gewartet). (I85a50, b/316082056)
  • Verbessern Sie den FrameTimingMetric-Fehler, wenn keine Frames erzeugt werden, und geben Sie immer einen Link zum Nachverfolgen aus, wenn das Parsen von Messwerten fehlschlägt, um die Problemdiagnose zu erleichtern. (I956b9)
  • Absturz behoben, bei dem FrameTimingMetric die Frame-ID nicht parsen konnte, insbesondere auf bestimmten OEM-Geräten. (Ia24bc, b/303823815, b/306235276)
  • Die strengen Prüfungen in FrameMetrics wurden gelockert und es wurden weitere Details zu Fehlermeldungen hinzugefügt. (Iade)

Version 1.2

Version 1.2.4

17. April 2024

androidx.benchmark:benchmark-*:1.2.4 wurde veröffentlicht. Version 1.2.4 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde behoben, dass das Referenzprofil „srcset“ nicht in Benchmark-Varianten eingerichtet wurde. Behebt außerdem automaticGenerationDuringBuild in Bibliotheken, die eine zirkuläre Abhängigkeit verursachen. (I28ab7, b/333024280)
  • Mit am force-stop kannst du Apps beenden, wenn es sich nicht um System-Apps wie die System-UI oder den Launcher handelt. Dadurch werden StartupMode.COLD-Benchmarks behoben, die von „Das Paket $package darf nicht vor dem Kaltstart ausgeführt werden!“ abstürzen, da der Prozess nicht vollständig beendet wurde. (I5e028)

Version 1.2.3

24. Januar 2024

androidx.benchmark:benchmark-*:1.2.3 wurde veröffentlicht. Version 1.2.3 enthält diese Commits.

Fehlerkorrekturen

  • Die Ausnahme wurde aus dem Gradle-Plug-in für das Baseline-Profil entfernt, wenn die AGP-Version 8.3.0 oder höher ist.
  • Fehlerkorrektur für das Einbeziehen von Referenzprofilen der Bibliothek in AAR vor AGP 8.3.0-alpha15.

Version 1.2.2

1. Dezember 2023

androidx.benchmark:benchmark-*:1.2.2 wurde veröffentlicht. Version 1.2.2 enthält diese Commits.

Baseline-Profile

Version 1.2.1

15. November 2023

androidx.benchmark:benchmark-*:1.2.1 wurde veröffentlicht. Version 1.2.1 enthält diese Commits.

Neue Funktionen

  • Verbesserte Fehlermeldung, wenn der Nutzer Testvarianten deaktiviert (b/307478189)
  • Es wurden Properties zur Unterstützung der AS-Testlaufintegration hinzugefügt (b/309805233), (b/309116324).

Version 1.2.0

18. Oktober 2023

androidx.benchmark:benchmark-*:1.2.0 wurde veröffentlicht. Version 1.2.0 enthält diese Commits.

Wichtige Änderungen seit Version 1.1.0

Baseline-Profile

  • Das neue Gradle-Plug-in für Baseline Profile automatisiert die Erfassung und Einbeziehung von Referenzprofilen in Ihren Test- und Build-Workflow.
  • BaselineProfileRule.collect ist jetzt stabil, eine optimierte und vereinfachte Version der vorherigen experimentellen BaselineProfileRule.collectBaselineProfile API
    • Geben Sie einfach packageName an und starten Sie Ihre App.
  • Für Bibliotheken, die Referenzprofile generieren, können Sie jetzt die generierten Regeln entweder im Code (Argument BaselineProfileRule.collect) oder sogar noch einfacher im Gradle-Plug-in filtern.
  • Korrekturen

Makro-Benchmark

  • Kompilierung
    • MacroBenchmark setzt jetzt den Kompilierungsstatus für jede Kompilierung vollständig zurück. Dazu muss das APK vor Android 14 neu installiert werden. Daher wird das Benchmarking für Android 14 und höher dringend empfohlen, wenn Sie den Status (z. B. Nutzeranmeldung) in dem gemessenen Wert beibehalten möchten (z. B. Nutzeranmeldung).
    • Sie können dies auch umgehen, indem Sie die App-Kompilierung separat steuern und sie mit CompilationMode.Ignore() oder einem Instrumentierungsargument überspringen.
  • Instrumentierungsargumente

    • Unterstützung für das androidx.benchmark.dryRunMode.enable-Instrumentierungsargument (bereits in MicroBenchmark verfügbar) für schnellere Validierungsausführungen (z.B. beim Erstellen der Benchmark oder beim Vorabsenden)
    • Unterstützung für androidx.benchmark.profiling.mode=StackSampling und MethodTracing.
    • androidx.benchmark.enabledRules wurde hinzugefügt, um Tests von Basisprofilen im Vergleich zu MakroBenchmark-Regeln bei der Laufzeitfilterung zu ermöglichen
    • Das Argument androidx.benchmark.perfettoSdkTracing.enable wurde hinzugefügt, um das Tracing mit Tracing-Perfetto zu aktivieren, z.B. Tracing zur Neuzusammensetzung. Bei Verwendung mit StartupMode.COLD wirkt sich das Timing erheblich aus, da die Tracing-Bibliothek beim Start der App geladen und aktiviert wird.
  • Voraussetzungen

    • MacroBenchmark erfordert jetzt ProfileInstaller 1.3.0 oder höher in der Ziel-App, um das Erfassen / Zurücksetzen des Profils und das Leeren des Shader-Cache zu ermöglichen.
  • Neue experimentelle Messwert-APIs

    • Es wurde eine experimentelle Funktion TraceSectionMetric hinzugefügt, mit der ein einfaches Timing aus trace("") {}-Blöcken in Ihrer App extrahiert werden kann. Mit TraceMetric können Sie die volle Abfragefunktion von Perfetto TraceProcessor nutzen.
    • Es wurde eine experimentelle Funktion PowerMetric hinzugefügt, um Informationen zum Stromverbrauch zu erfassen
    • Experimentelle Funktion MemoryCountersMetric zum Zählen von Seitenfehlern hinzugefügt
    • Die experimentelle PerfettoTraceProcessor API wurde hinzugefügt, die intern zum Extrahieren von Messwerten aus System-Traces (auch als Perfetto-Traces bezeichnet) verwendet wird.
  • Fehlerkorrekturen

    • Abstürze beim Installieren oder Extrahieren von Profilen aus einer App, die aus mehreren APKs installiert wurde (z.B. aus einem App Bundle), behoben wurden.
    • Fehler bei FrameTimingMetric behoben, bei dem Frames mit inkonsistenten Frame-IDs ignoriert wurden (im Allgemeinen Frames während der Ripples ab API 31) (I747d2, b/279088460)
    • Parsing-Fehler bei Traces > 64 MB behoben (Ief831, b/269949822)
    • Die Fehler, die angezeigt wurden, wenn das Betriebssystem-Image des Geräts (insbesondere Emulator) für das Tracing oder Kompilierung nicht richtig konfiguriert wurde, wurde behoben.
    • Akkuladestandsprüfung bei Geräten ohne Akku überspringen (Mikro und Makro)
    • Verbesserte Dateiausgabe mit deutlicheren Fehlern für ungültige Ausgabeverzeichnisse und sichereren Standardeinstellungen
    • Die Stabilität von StartupMode.COLD wurde verbessert, indem der Shader-Cache regelmäßig gelöscht wird (auch über MacrobenchmarkScope.dropShaderCache verfügbar).
    • Leanback-Fallback für startActivityAndWait wurde korrigiert.

Mikro-Benchmark

  • Features
    • Die Profilerstellung wurde nach anderen Messwerten in eine separate Phase verschoben, sodass in einem Testlauf sowohl das genaue Timing als auch die Profilerstellungsergebnisse angezeigt werden können.
  • Experimentelle APIs
    • Es wurde die experimentelle MicrobenchmarkConfig API zum Definieren benutzerdefinierter Messwerte und zum Konfigurieren von Tracing und Profilerstellung hinzugefügt. Kann verwendet werden, um Methoden-Traces oder Tracepunkte zu erfassen (berücksichtigen Sie jedoch den Tracing-Overhead).
    • Es wurden experimentelle APIs hinzugefügt, um BenchmarkState unabhängig von BenchmarkRule (ohne JUnit) zu steuern.
    • Ein experimenteller PerfettoTrace-Eintrag wurde hinzugefügt, um die Erfassung von Perfetto-Traces mit benutzerdefinierter Konfiguration zu ermöglichen, die von Benchmark-APIs getrennt sind.
  • Korrekturen
    • Problemumgehung ohne führende Leerzeichen in der Android Studio-Benchmark-Ausgabe.
    • Ein Problem wurde behoben, bei dem Warnungen in der Android Studio-Benchmark-Ausgabe möglicherweise nicht ausgegeben wurden.
    • Der Absturz von SampledProfiling unter Android 13 (API 33) und höher wurde behoben.
    • Deutlich verbesserte Leistung von dryRunMode durch Überspringen von IsolationActivity und Perfetto-Tracing (bis zu 10-mal schnellerer Probelaufmodus bei älteren Betriebssystemversionen).

Version 1.2.0-rc02

6. Oktober 2023

androidx.benchmark:benchmark-*:1.2.0-rc02 wurde veröffentlicht. Version 1.2.0-rc02 enthält diese Commits.

Fehlerkorrekturen

  • Korrigieren Sie die Benchmark-Dateiausgabe so, dass das Kopieren von BaselineProfile-Plug-in-Dateien nicht mehr unterbrochen wird. Die Dateien wurden zwar generiert und vom Gerät kopiert, aber so umbenannt, dass sie vom Gradle-Plug-in nicht erkannt wurden. (I8dbcc, b/303034735, b/296453339)
  • tracing-perfetto Fehler beim Laden von Fehlermeldungen bei der Injektion aus dem Makro-Benchmark-Modul in die Zielanwendung wurde klarer formuliert.

Version 1.2.0-rc01

20. September 2023

androidx.benchmark:benchmark-*:1.2.0-rc01 wurde veröffentlicht. Version 1.2.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Eine Ausnahme (mit Anweisungen zur Fehlerbehebung) wird jetzt ausgelöst, wenn das Perfetto SDK-Tracing in einer Benchmark nicht initialisiert werden kann. (I6c878, b/286228781)
  • OOM-Absturz beim Konvertieren von ART-Methoden-Trace -> Perfetto-Format wurde behoben. (I106bd, b/296905344)
  • (MacroBenchmark) Das Label für das Methoden-Tracing in der Studio-Testausgabe wurde klarer formuliert. Außerdem wurde das Problem, dass Dateinamen für das Methoden-Tracing auf dem Gerät/Host eindeutig sein müssen, sodass sie nicht überschrieben werden, wenn mehrere Benchmarks ausgeführt werden. (I08e65, b/285912360)
  • Das Gerät muss aktiv sein, wenn ein Basisprofil erfasst wird. (I503fc)

Version 1.2.0-beta05

30. August 2023

androidx.benchmark:benchmark-*:1.2.0-beta05 wurde veröffentlicht. Version 1.2.0-beta05 enthält diese Commits.

Neue Funktionen

  • Das Gradle-Plug-in für das Baseline-Profil unterstützt jetzt das Android-Gradle-Plug-in 8.3. (aosp/2715214)

Version 1.2.0-beta04

23. August 2023

androidx.benchmark:benchmark-*:1.2.0-beta04 wurde veröffentlicht. Version 1.2.0-beta04 enthält diese Commits.

Neue Funktionen

  • Das Gradle-Plug-in für Baseline-Profile unterstützt jetzt das Android-Gradle-Plug-in 8.3. (aosp/2715214)

Fehlerkorrekturen

  • Beheben Sie Fehler beim Schreiben, Verschieben und Abrufen von Dateien (insbesondere bei parametrisierten Tests), indem Sie Ausgabedateinamen weiter bereinigen und „=“ und „:“ in den Namen von Ausgabedateien vermeiden. (I759d8)

Version 1.2.0-beta03

9. August 2023

androidx.benchmark:benchmark-*:1.2.0-beta03 wurde veröffentlicht. Version 1.2.0-beta03 enthält diese Commits.

API-Änderungen

  • Argument zum Filtern von TraceSectionMetric wurde nur dem Zielpaket hinzugefügt, standardmäßig aktiviert (Ia219b, b/292208786).

Fehlerkorrekturen

  • Das Instrumentierungsargument fullTracing.enable wurde zur Konsistenz mit dem Artefaktnamen und anderen Referenzen in perfettoSdkTracing.enable umbenannt. fullTracing.enable funktioniert weiterhin als Fallback. (I7cc00)
  • Interne Tracepoints der Benchmark-Bibliothek (einschließlich MicroBenchmark-Schleifen-/Phasen-Tracing) werden jetzt im System-Trace-Viewer von Studio angezeigt und unter dem richtigen Prozess in Perfetto verschachtelt. (I6b2e7, b/293510459)
  • Der MakroBenchmark-Fehler NOT-PROFILEABLE für API 31 und höher wurde entfernt und die profilierbare Prüfung auf gerooteten Root-Geräten (eng/userdebug) wird übersprungen. (I2abac, b/291722507)
  • Bei Verwendung von Dex Layout-Optimierungen werden Regeln für Startprofile jetzt auch als Basisprofilregeln betrachtet. (aosp/2684246, b/293889189)

Version 1.2.0-beta02

26. Juli 2023

androidx.benchmark:benchmark-*:1.2.0-beta02 wurde veröffentlicht. Version 1.2.0-beta02 enthält diese Commits.

API-Änderungen

  • Es wurden experimentelle APIs für benutzerdefinierte Microbench-Messwerte und -Konfigurationen hinzugefügt (z.B. Profiler und Tracing). (I86101, b/291820856)

Fehlerkorrekturen

  • Fehler in Makrobench melden, wenn das Betriebssystem für das Tracing falsch konfiguriert ist. Dies wurde kürzlich in den ARM64-Emulatoren der API 26/28 behoben. (I0a328, b/282191686)
  • Der Fehler beim Zurücksetzen der Kompilierung wurde mit weiteren Details ergänzt, die eine Aktualisierung des Emulators vorschlagen, da dieses Problem von einigen Emulatoren kürzlich behoben wurde. (I8c815, b/282191686)
  • Machen Sie androidx.test.uiautomator:uiautomator:2.2.0 als api-Abhängigkeit anstelle einer implementation-Abhängigkeit. (I1981e)

Version 1.2.0-beta01

18. Juli 2023

androidx.benchmark:benchmark-*:1.2.0-beta01 wurde veröffentlicht. Version 1.2.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Probleme wurden behoben, die in der Benchmarkausgabe in Studio manchmal unterdrückt wurden und dass führende Leerzeichen in der Benchmarkausgabe nicht in Studio angezeigt wurden (Ia61d0, b/227205461, b/286306579, b/285912360).
  • Der Kommentar für FrameTimingMetric wurde korrigiert. Der untergeordnete Messwert heißt frameDurationCpuMs. (Ib097f, b/288830934).

Version 1.2.0-alpha16

21. Juni 2023

androidx.benchmark:benchmark-*:1.2.0-alpha16 wurde veröffentlicht. Version 1.2.0-alpha16 enthält diese Commits.

API-Änderungen

  • Die BaselineProfileRule.collectBaselineProfile() API wurde in BaselineProfileRule.collect() umbenannt. (I4b665)

Fehlerkorrekturen

  • MacroBenchmark-Unterstützung für androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360)
  • Die Erstellung von MicroBenchmark-Profilen wurde in eine separate Phase verschoben. Sie wird also nach der Messung nacheinander statt als Ersatz durchgeführt. Falls vorhanden, sind jetzt auch MethodTracing-Trace-Abschnitte im erfassten Perfetto-Trace enthalten. (I9f657, b/285014599)
  • Fügen Sie die Messung der Anzahl mit Mode.Sum zu TraceSectionMetric hinzu. (IC121a, b/264398606)

Version 1.2.0-alpha15

7. Juni 2023

androidx.benchmark:benchmark-*:1.2.0-alpha15 wurde veröffentlicht. Version 1.2.0-alpha15 enthält diese Commits.

Neue Funktionen

  • Experimentelle MemoryUsageMetric zum Verfolgen der Arbeitsspeichernutzung einer Zielanwendung hinzugefügt. (I56453, b/133147125, b/281749311)
  • Unterstützung für vollständig benutzerdefinierte Perfetto-Konfigurationen mit PerfettoTrace.record hinzufügen (If9d75, b/280460183)
  • Es wurde eine Property hinzugefügt, mit der die Erstellung des Basisprofils übersprungen werden kann. Nutzung: ./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. (I37fda, b/283447020)

API-Änderungen

  • Die collectBaselineProfile API generiert immer stabile Basisprofile. Die collectStableBaselineProfile API wurde entfernt. Verwenden Sie stattdessen collectBaselineProfile. (I17262, b/281078707)
  • Das Argument filterPredicate von BaselineProfileRule wurde in einen Nicht-Null-Wert mit einem entsprechenden Standardwert geändert, damit das Standardfilterverhalten in Dokumenten klarer erkennbar ist. (I3816e)

Fehlerkorrekturen

  • Deaktivieren Sie IsolationActivity und Perfetto-Tracing in dryRunMode, um die Leistung erheblich zu verbessern, da diese den Großteil der Laufzeit ausmachen. (Ie4f7d)
  • Unterstützung für das Sampling von Aufrufstacks in Makro-Benchmarks mit den Instrumentierungstestargumenten androidx.benchmark.profiling.mode=StackSampling und androidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489)
  • Absturzfehler beim Verwerfen von Shadern unter Android U (API 34) sowie in Emulatoren wurden behoben. (I031ca, b/274314544)

Version 1.2.0-alpha14

3. Mai 2023

androidx.benchmark:benchmark-*:1.2.0-alpha14 wurde veröffentlicht. Version 1.2.0-alpha14 enthält diese Commits.

Fehlerkorrekturen

  • Fehler bei FrameTimingMetric beheben, ohne Frames mit inkonsistenten Frame-IDs zu ignorieren. Dies würde dazu führen, dass einige Animationen in neueren Plattformversionen (API 31 und höher) viele Frames ignorieren, während RenderThread animiert wurde (z.B. während einer Welle). (I747d2, b/279088460)
  • Das Parsen des Trace-Prozessors für Traces, die größer als 64 MB sind, wurde behoben. (Ief831, b/269949822)
  • Das Erstellen des Basisprofils unter Android U schlug aufgrund der unterschiedlichen Ausgabe des Befehls pm dump-profiles fehl. (Id1392, b/277645214)
  • Fehler im GPU-Sperrskript für die Uhr zum korrekten Vergleich von Strings (I53e54, b/213935715)

Version 1.2.0-alpha13

5. April 2023

androidx.benchmark:benchmark-*:1.2.0-alpha13 wurde veröffentlicht. Version 1.2.0-alpha13 enthält diese Commits.

API-Änderungen

  • Beim Generieren von Referenzprofilen wurde ein Profiltypparameter hinzugefügt, um die künftige Funktion für Startprofile zu unterstützen (Ie20d7, b/275093123).
  • Es wurde eine neue experimentelle TraceMetric API zum Definieren von vollständig benutzerdefinierten Messwerten basierend auf dem Inhalt eines Perfetto-Trace hinzugefügt. (I4ce31, b/219851406)
  • Fügen Sie einen experimentellen Messwert hinzu, um die Anzahl der Seitenfehler während einer Benchmark zu ermitteln. (I48db0)

Version 1.2.0-alpha12

22. März 2023

androidx.benchmark:benchmark-*:1.2.0-alpha12 wurde veröffentlicht. Version 1.2.0-alpha12 enthält diese Commits.

Neue Funktionen

  • Das neue Gradle-Plug-in für das Basisprofil wird in der Alphaversion veröffentlicht, sodass es einfacher ist, ein Basisprofil zu generieren, und der Entwickler-Workflow wird dadurch vereinfacht.

API-Änderungen

  • Die Unterstützung für Perfetto-Tracing in API 21 und 22, die sowohl MicroBenchmarks als auch die experimentellen PerfettoTrace APIs umfasst, wurde entfernt. Vor dieser Version waren UiAutomation-Verbindungen auf einigen Geräten unzuverlässig. (I78e8c)
  • Öffentliche experimentelle API für PerfettoTraceProcessor hinzugefügt, um das Parsen von Trace-Inhalten zu ermöglichen. Dies ist ein Schritt hin zu vollständig benutzerdefinierten Messwerten, die auf Perfetto-Trace-Daten basieren. (I2659e, b/219851406)

Version 1.2.0-alpha11

8. März 2023

androidx.benchmark:benchmark-*:1.2.0-alpha11 wurde veröffentlicht. Version 1.2.0-alpha11 enthält diese Commits.

Fehlerkorrekturen

  • Die Abstürze in MacrobenchmarkRule und BaselineProfileRule bei der Neuinstallation oder Extraktion von Profilen aus einem App Bundle mit mehreren APKs wurden behoben. (I0d8c8, b/270587281)

Version 1.2.0-alpha10

22. Februar 2023

androidx.benchmark:benchmark-*:1.2.0-alpha10 wurde veröffentlicht. Version 1.2.0-alpha10 enthält diese Commits.

Neue Funktionen

  • Unter Android 14 und höher installiert MacroBenchmark dank einer neuen Plattformfunktion keine Zielanwendungen mehr neu, um den Kompilierungsstatus zurückzusetzen. Bisher war es notwendig, ein gerootetes Gerät zu haben oder den gesamten Anwendungsstatus (z.B. die Nutzeranmeldung) zu entfernen, bevor eine Benchmark ausgeführt werden konnte. (I9b08c, b/249143766)

Fehlerkorrekturen

  • DryRunMode wurde so behoben, dass bei einem leeren Profil nicht mehr abstürzt, weil die Kompilierung übersprungen wird. Stattdessen wird eine einzelne Iteration ausgeführt und das Profil extrahiert, um sicherzustellen, dass etwas erfasst wird. (I2f05d, b/266403227)
  • Der PowerMetric-Absturz bei der Überprüfung auf das Vorhandensein von PowerStats auf alten API-Ebenen wurde behoben. (5faaf9, b/268253898)

Version 1.2.0-alpha09

11. Januar 2023

androidx.benchmark:benchmark-*:1.2.0-alpha09 wurde veröffentlicht. Version 1.2.0-alpha09 enthält diese Commits.

Fehlerkorrekturen

  • Die Übergabe von None an das Instrumentierungsargument androidx.benchmark.enabledRules wurde aktiviert, um alle Benchmarks / das Generieren von Referenzprofilen zu deaktivieren. (I3d7fd, b/258671856)
  • PerfettoTrace-Aufnahme in App-Modulen (d.h. nicht selbst instrumentierenden Test-APKs) korrigieren (I12cfc)
  • Feste Reihenfolge der ADB-Pull-Argumente des Basisprofils in der Studio-Ausgabe (I958d1, b/261781624)
  • ARM Emulator API 33 wird jetzt korrekt als solche erkannt, wenn versucht wird, eine Makro-Benchmark auszuführen, und gibt die Warnung korrekt aus. (69133b,b/262209591)
  • Überprüfung des Akkustands bei Geräten ohne Akku in MacroBenchmark überspringen (fe4114, b/232448937)

Version 1.2.0-alpha08

7. Dezember 2022

androidx.benchmark:benchmark-*:1.2.0-alpha08 wurde veröffentlicht. Version 1.2.0-alpha08 enthält diese Commits.

API-Änderungen

  • Es wurden experimentelle neue APIs PerfettoTrace.record {} und PerfettoTraceRule hinzugefügt, um Perfetto-Traces (auch als System-Traces bezeichnet) im Rahmen eines Tests zu erfassen und so das Testverhalten und die Leistung zu prüfen. (I3ba16)
  • BaselineProfileRule akzeptiert jetzt ein Filterprädikat anstelle einer Liste von Paketpräfixen. Dadurch erhält der Test die volle Kontrolle über die Filterung. (I93240)
  • Fügen Sie eine experimentelle API BaselineProfileRule.collectStableBaselineProfile hinzu, die wartet, bis ein Basisprofil für n Iterationen stabil ist. (I923f3)
  • Sie können jetzt ein Präfix für den Ausgabedateinamen angeben, wenn Sie Basisprofile mit BaselineProfileRule generieren. (I7b59f, b/260318655)

Fehlerkorrekturen

  • Verbessern Sie die Sicherheit beim Schreiben von Dateiausgaben. Damit sollte verhindert werden, dass Ausgabedateien im Hintergrund nicht geschrieben / angehängt werden, insbesondere bei API 21/22. (If8c44, b/227510293)
  • Korrigieren Sie die Trace-Ausgabe von simpleperf, damit die Datei korrekt erstellt und platziert werden kann. Dadurch sollten auch allgemein Probleme behoben werden, bei denen eine Datei erfolglos von Gradle abgerufen wurde. (I12a1c, b/259424099)
  • Fehlermeldung zum Verbessern der Profileinstaller-Fehlermeldung, die ausgegeben wird, wenn profileinstaller zu alt ist. Damit werden Sie jetzt angewiesen, die Profileinstaller-Version (1.2.1) zum Messen von Basisprofilen unter API 31 bis 33 zu aktualisieren, anstatt anzugeben, dass sie nicht unterstützt wird. (Ia517f, b/253519888)
  • Mehrere Fehler bei Shell-Befehlsfehlern bei Fehlermeldung Erforderliche API <=23 drucken, u. a. fehlgeschlagene Binäreinrichtung der Perfetto-Erfassung und Fehler bei der Trace-Erfassung (Ib6b87, b/258863685)
  • Erstellte Profilregeln automatisch sortieren, um die Anzahl der Änderungen zu minimieren, die sich im Laufe der Zeit ändern (beim Einchecken von Profilregeln in die Versionsverwaltung). (IE2509)
  • Der Absturz bei nicht gerooteten Builds unter Android 13 (API 33) mit der Meldung Expected no stderr from echo 3 > /proc/sys/vm/drop_caches (I6c245, b/259508183) wurde behoben.

Bekannte ProblemeMacrobenchmarkScope.dropShaderCache() kann aufgrund einer noch nicht veröffentlichten Broadcast-Registry im profileinstaller-Manifest abstürzen. (I5c728, b/258619948) Um das Problem in profileinstaller:1.3.0-alpha02 zu umgehen, fügen Sie der Datei „AndroidManifest.xml“ Ihrer App (nicht der Ihrer Benchmark) Folgendes hinzu:

  <!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
  <receiver
    android:name="androidx.profileinstaller.ProfileInstallReceiver"
    android:permission="android.permission.DUMP"
    android:exported="true">
    <intent-filter>
        <action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
    </intent-filter>
  </receiver>

Version 1.2.0-alpha07

9. November 2022

androidx.benchmark:benchmark-*:1.2.0-alpha07 wurde veröffentlicht. Version 1.2.0-alpha07 enthält diese Commits.

API-Änderungen

  • Fügt die PowerMetric API für die Messung von Energie und Leistung in Makro-Benchmarks hinzu. (Ife601, b/220183779)
  • Fehler bei MacrobenchmarkScope.dropShaderCache() behoben, durch den der Shader-Cache tatsächlich gelöscht wird. Dadurch werden etwa 20 ms an Rauschen aus den StartupMode.COLD-Benchmarks entfernt, da Shader jetzt konsistent bei jeder Iteration gelöscht werden. Bisher wurden bei der Partial-Kompilierung mit Aufwärmiterationen falsch schnelle Zahlen gemeldet, da Shader-Caching während des Aufwärmvorgangs wahrscheinlicher war. Für diese Korrektur ist entweder ein gerootetes Gerät oder die Verwendung von profileinstaller:1.3.0-alpha02 in der Ziel-App erforderlich. Informationen zu API-Änderungen der ProfileInstaller-Bibliothek findest du auf der Seite ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • TraceSectionMode("label", Mode.Sum) wurde hinzugefügt, mit dem die Gesamtzeit gemessen werden kann, die für mehrere Trace-Abschnitte mit demselben Label aufgewendet wurde. Beispielsweise gibt „TraceSectionMetric("inflate", Mode.Sum)“ den Messwert „inflateMs“ für die Gesamtzeit in einer Makro-Benchmark aus, die für die Inflation aufgewendet wurde. Die Anforderung für API 29 wurde ebenfalls entfernt, da TraceSectionMetric mit androidx.tracing.Trace zusammenarbeitet, um zu niedrigeren API-Levels bei Verwendung von forceEnableAppTracing in der Ziel-App zu gelangen. (Id7b68, b/231455742)

Fehlerkorrekturen

  • Verbesserte Sicherheit aller internen Shell-Befehle durch Überprüfung aller Ausgaben/Fehler. (I5984d, b/255402908, b/253094958)
  • Geben Sie das Gerät im Befehl adb pull für das Basisprofil an, damit der Pull-Befehl einfach kopiert werden kann, wenn mehrere Geräte verbunden sind (bis zu einem Emulator) (I6ac6c, b/223359380).
  • Fügen Sie einen Fehler hinzu, wenn die Makro-Benchmark-Test-APK nicht zur Selbstinstrumentierung eingerichtet ist. Dieser Fehler verhindert Makro-Benchmarking innerhalb des Prozesses der Ziel-App. In diesem Fall wäre es nicht in der Lage, die App zu kompilieren, zu beenden oder einen Kaltstart zu starten. Außerdem wäre es nicht in der Lage, die eigenen Berechtigungen zu steuern (I4279b).
  • Es wurde ein Problem in measureRepeated() behoben, bei dem StartupMode.COLD den Zielprozess nach setupBlock nicht beendet hat. Wenn setupBlock jetzt mit der App interagiert, wird der App-Prozess weiter ausgeführt und eine Kaltstartmessung ist ungültig. (I8ebb7)

Version 1.2.0-alpha06

24. Oktober 2022

androidx.benchmark:benchmark-*:1.2.0-alpha06 wurde veröffentlicht. Version 1.2.0-alpha06 enthält diese Commits.

API-Änderungen

  • BaselineProfileRule erfordert unter Android 13 (API 33) kein Root mehr und ist nicht mehr experimentell. (Ie0a7d, b/250083467, b/253094958)
    • Mit dieser Änderung wird auch behoben, wie Profile einer App auf nicht gerooteten Geräten auf das Laufwerk geleert werden. Es muss jedoch die „profileinstaller“-Abhängigkeit der Ziel-App aktualisiert werden.
    • Wenn Sie BaselineProfileRule oder CompilationMode.Partial(warmupIterations) auf einem nicht gerooteten Gerät verwenden möchten, müssen Sie auch Ihre Ziel-App aktualisieren, um androidx.profileinstaller.profileinstaller:1.3.0-alpha01 zu verwenden. Dadurch wird das Profil korrekt auf das Laufwerk geleert, sodass es kompiliert/extrahiert werden kann.

Fehlerkorrekturen

  • Der SampledProfiling-Absturz bei API 33 und höher wurde behoben. (I40743, b/236109374)

Version 1.2.0-alpha05

5. Oktober 2022

androidx.benchmark:benchmark-*:1.2.0-alpha05 wurde veröffentlicht. Version 1.2.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Frame-Aufschlüsselung im System Trace Viewer in Studio für vom Benchmark erfasste Traces korrigieren (I3f3ae, b/239677443)
  • Korrigieren Sie FrameTimingMetric, damit für FrameOverrun API 31 statt 29 erforderlich ist (I716dd, b/220702554).
  • Legen Sie die Iteration in BaselineProfileRule fest und geben Sie klar aus, wenn das Zielpaket nicht installiert ist (wurde bereits für MacroBenchmarkRule durchgeführt). (Ic09a3, b/227991471)

Version 1.2.0-alpha04

21. September 2022

androidx.benchmark:benchmark-*:1.2.0-alpha04 wurde veröffentlicht. Version 1.2.0-alpha04 enthält diese Commits.

Neue Funktionen

  • Zusätzliche Unterstützung für das dryRunMode.enable-Instrumentierungsargument zur MakroBenchmark (bereits in Mikro verfügbar), um die lokale Entwicklung zu beschleunigen und die App-Automatisierung zu validieren (z.B. in „Vorabsenden“). Dadurch werden die Iterationen 1 überschrieben, die Kompilierung übersprungen, alle Konfigurationsfehler werden unterdrückt und die Ausgabe der .json-Datei für Messungen deaktiviert. (Ib51b4, b/175149857)

    In der Gradle-Befehlszeile:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
    

    In build.gradle:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true'
        }
    }
    

Fehlerkorrekturen

  • Der Fehler „StartupTimingMetric“ wurde so behoben, dass gemessene Aktivitäten nicht mehr über MacrobenchmarkScope.startActivityAndWait() gestartet werden müssen. Das bedeutet, dass der Messwert Startvorgänge von z.B. Benachrichtigungen, Context.startActivity(), aktivitätsbasierte Navigation in der App oder Shell-Befehlen erfassen kann. (Ia2de6, b/245414235)
  • Es wurde ein Fehler behoben, bei dem startActivityAndWait durch eine Reduzierung der strengen Frame-Erkennung eine Zeitüberschreitung beim Warten auf den Abschluss des Starts für Emulatoren verursachte. (Ibe2c6, b/244594339, b/228946895)

Version 1.2.0-alpha03

7. September 2022

androidx.benchmark:benchmark-*:1.2.0-alpha03 wurde veröffentlicht. Version 1.2.0-alpha03 enthält diese Commits.

Neue Funktionen

  • Es wurden experimentelle APIs für die unabhängige Verwendung von BenchmarkState, getrennt von BenchmarkRule / JUnit4, hinzugefügt. (Id478f, b/228489614)

Fehlerkorrekturen

  • Leanback-Fallback für startActivityAndWait wurde hinzugefügt. (01ed77, b/242899915)

Version 1.2.0-alpha02

24. August 2022

androidx.benchmark:benchmark-*:1.2.0-alpha02 wurde veröffentlicht. Version 1.2.0-alpha02 enthält diese Commits.

API-Änderungen

  • Die Standardeinstellung ist am force stop für MacrobenchmarkScope.killProcess(), auch wenn das Gerät gerootet ist, außer während der Erstellung des Baseline-Profils. Dies kann mit einem optionalen booleschen Argument überschrieben werden. (02cce9, b/241214097)

Fehlerkorrekturen

  • Unterstützung der grundlegenden Profilerstellung für System-Apps. (I900b8, b/241214097)
  • Die Prüfung auf ODPM-Power-Messwerte auf nicht gerooteten Geräten wird unterstützt. (a38c78, b/229623230)

Version 1.2.0-alpha01

27. Juli 2022

androidx.benchmark:benchmark-*:1.2.0-alpha01 wurde veröffentlicht. Version 1.2.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Neue Tracing-Perfetto-Komponente, die Tools zum Aktivieren von Tracing über das Perfetto SDK in einer App ermöglicht, in der die Tracing-Funktion sichtbar ist (I2cc7f)
  • Es wurde ein androidx.benchmark.enabledRules-Instrumentierungsargument hinzugefügt, um das Filtern von Makro-Benchmark-Ausführungen nur nach Benchmarks oder nur nach der Generierung von Referenzprofilen zu ermöglichen. Übergeben Sie "MacroBenchmark" oder "BaselineProfile", um nur eine Art von Test auszuführen, z.B. wenn nur BaselineProfiles in einem Emulator generiert wird. Eine durch Kommas getrennte Liste wird ebenfalls unterstützt. (I756b7, b/230371561)

    Beispiel: in der build.gradle-Datei Ihrer MakroBenchmark:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    Oder über die Gradle-Befehlszeile:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

API-Änderungen

  • Neue PowerMetric für das Messen von Energie und Energie in Benchmarks hinzugefügt. (I9f39b, b/220183779)
  • Der neue Kompilierungsmodus CompilationMode.Ignore wurde hinzugefügt, um das Zurücksetzen und Kompilieren des Profils zu überspringen. (Ibbcf8, b/230453509)
  • BaselineProfileRule#collectBaselineProfile wurde ein neuer Parameter hinzugefügt, um die Ausgabedatei nach Paketnamen zu filtern (If7338, b/220146561)
  • Ermöglicht dem Entwickler, das Gerät zu entladen, um den Energieverbrauch zu messen. (I6a6cb)
  • Die Funktion zum Leeren des Shader-Caches in MacrobenchmarkScope wurde hinzugefügt. (I32122)
  • Entwickler können die Anzeige des Messwerttyps konfigurieren und die gewünschten Subsystemkategorien angeben. (I810c9)
  • Bisher wurde bei Ausführung auf einem nicht unterstützten Gerät ein UnsupportedOperationException in die Benchmark aufgenommen. Jetzt wird UOE nur angezeigt, wenn der Messwert auf dem nicht unterstützten Gerät verwendet wird (d. h. PowerMetric.configure). (I5cf20, b/227229375)
  • TotalPowerMetric und TotalEnergyMetric für die Messung von Gesamtleistung und -energie in jeder Systemkategorie in Makro-Benchmarks wurden hinzugefügt. (I3b26b, b/224557371)

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem kompilierte Methoden zwischen den einzelnen Makro-Benchmarks in nicht gerooteten Builds nicht korrekt zurückgesetzt wurden. Dafür muss die APK-Datei leider bei jeder Iteration neu installiert werden, wodurch die Anwendungsdaten für jede Makro-Benchmark gelöscht werden. (I31c74, b/230665435)
  • Absturz der Trace-Aufzeichnung in API 21/22 beheben (If7fd6, b/227509388, b/227510293, b/227512788)
  • Die Erkennung des Abschlusses des Starts von Aktivitäten wurde überarbeitet, um die Ausnahme „Keine Messwerte können gelesen werden“ in Start-Makro-Benchmarks zu beheben. (Ia517c)

Version 1.1.1

Version 1.1.1

9. November 2022

androidx.benchmark:benchmark-*:1.1.1 wurde veröffentlicht. Version 1.1.1 enthält diese Commits.

Fehlerkorrekturen

  • Das Problem android.system.ErrnoException: open failed: EACCES wurde auf einigen Geräten mit Android11 (API 30) oder höher behoben. Das hier ist eine Top-Empfehlung von 1.2.0-alpha01. (aosp/2072249)

Version 1.1.0

Version 1.1.0

15. Juni 2022

androidx.benchmark:benchmark-*:1.1.0 wurde veröffentlicht. Version 1.1.0 enthält diese Commits.

  • Diese Version ist mit androidx.benchmark:benchmark-*:1.1.0-rc03 identisch.

Wichtige Änderungen seit Version 1.0.0

Version 1.1.0-rc03

1. Juni 2022

androidx.benchmark:benchmark-*:1.1.0-rc03 wurde veröffentlicht. Version 1.1.0-rc03 enthält diese Commits.

Fehlerkorrekturen

  • Vermeiden Sie es, das Zielpaket bei jeder Benchmark-Iteration neu zu installieren. ( aosp/2093027, b/231976084)

  • Entferne die 300ms-Verzögerung von pressHome(). (aosp/2086030, b/231322975)

  • Verbessern Sie die Geschwindigkeit der MacroBenchmark-Iteration, indem Sie die im Hintergrund verwendeten Shell-Befehle optimieren. (aosp/2086023, b/231323582)

  • Unterstützung für verwaltete Gradle-Geräte beim Generieren von Baseline-Profilen mit MacroBenchmarks. (aosp/2062228, b/228926421)

Version 1.1.0-rc02

11. Mai 2022

androidx.benchmark:benchmark-*:1.1.0-rc02 wurde veröffentlicht. Version 1.1.0-rc02 enthält diese Commits.

  • Hinweis: Diese Version enthält eine Verhaltensänderung, da Apps jetzt zwischen den einzelnen Benchmarks vollständig neu installiert werden, um genaue Messungen zu ermöglichen.

Fehlerkorrekturen/Verhaltensänderungen

  • Ein Problem wurde behoben, bei dem die App-Kompilierung zwischen Makro-Benchmarks und bei nicht gerooteten Builds nicht korrekt zurückgesetzt wurde. Dadurch wird häufig behoben, dass das Ausführen mehrerer Tests dazu führt, dass CompilationMode wenig oder gar keine Auswirkungen auf die Messungen hat. Um dieses Problem zu umgehen, wird nun jede Testmethode von der Ziel-App vollständig neu installiert. Dadurch werden die Anwendungsdaten zwischen den einzelnen Makro-Benchmarks gelöscht. (I31c74, b/230665435)

  • Da dies verhindert, dass Apps den Status vor Tests einrichten, kann jetzt die Kompilierung / Neuinstallation übersprungen werden, um dieses Problem zu umgehen. Sie können das Ziel beispielsweise mit dem Shell-Befehl cmd package compile -f -m speed <package> vollständig kompilieren und dann den Kompilierungsschritt der Makro-Benchmark überspringen.

    Beispiel: in der build.gradle-Datei Ihrer MakroBenchmark:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false'
        }
    }
    

    Oder über die Gradle-Befehlszeile:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • Durch Hinzufügen eines androidx.benchmark.enabledRules-Instrumentierungsarguments ist es möglich, ein Modul zwischen Makro-Benchmarks und Tests zum Generieren von Referenzprofilen zu teilen. Übergeben Sie "MacroBenchmark" oder "BaselineProfile", um nur einen Testtyp auszuführen, z.B. beim Generieren von BaselineProfiles in einem Emulator. (I756b7, b/230371561)

    Beispiel: in der build.gradle-Datei Ihrer MakroBenchmark:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    Oder über die Gradle-Befehlszeile:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

Version 1.1.0-rc01

20. April 2022

androidx.benchmark:benchmark-*:1.1.0-rc01 wurde veröffentlicht. Version 1.1.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Links für die Ausgabe des Referenzprofils in Android Studio verwenden jetzt einen eindeutigen Dateinamen. So werden in der Ausgabe immer die neuesten Ergebnisse bei Verwendung eines BaselineProfileRule ausgegeben. ( aosp/2057008, b/228203086 )

Version 1.1.0-beta06

6. April 2022

androidx.benchmark:benchmark-*:1.1.0-beta06 wurde veröffentlicht. Version 1.1.0-beta06 enthält diese Commits.

Fehlerkorrekturen

  • Absturz der Trace-Aufzeichnung in API 21/22 beheben (If7fd6, b/227509388)
  • Die Erkennung des Abschlusses des Starts von Aktivitäten wurde überarbeitet, um die Ausnahme „Keine Messwerte können gelesen werden“ in Start-Makro-Benchmarks zu beheben. (Ia517c)
  • Startmesswerte für Makro-Benchmarks bei Verwendung von CompilationMode.None() wurden korrigiert. Vor dieser Änderung schien „CompilationMode.Partial()“ langsamer als Compilation.None() zu sein. (611ac9)

Version 1.1.0-beta05

23. März 2022

androidx.benchmark:benchmark-*:1.1.0-beta05 wurde veröffentlicht. Version 1.1.0-beta05 enthält diese Commits.

Fehlerkorrekturen

  • Beenden Sie das Paket, nachdem Sie die Profilinstallation übersprungen haben, wenn Sie CompilationMode.None verwenden. (aosp/1991373).
  • Ein Problem wurde behoben, bei dem MacroBenchmarks bei Verwendung von StartupMode.COLD keine Startmesswerte erfassen konnten. (aosp/2012227 b/218668335)

Version 1.1.0-beta04

23. Februar 2022

androidx.benchmark:benchmark-*:1.1.0-beta04 wurde veröffentlicht. Version 1.1.0-beta04 enthält diese Commits.

Fehlerkorrekturen

  • Probleme mit fehlenden Messwerten in Android 10 und NoSuchElementException aufgrund nicht korrekter Erfassung von Prozessnamen in Traces wurden behoben. (Ib4c17, b/218668335)

  • Verwenden Sie PowerManager für die Erkennung der thermischen Drosselung unter Q (API 29) und höher. Dadurch wird die Häufigkeit falsch-positiver Ergebnisse bei der Erkennung von thermischen Drosselung (Benchmark-Wiederholung nach einer Cool-down-Einstellung von 90 Sekunden) erheblich reduziert und die Benchmarks bei Nutzer-Builds erheblich beschleunigt. Außerdem bietet es eine Drosselungserkennung, auch wenn die Uhren gesperrt sind (wenn sie für die physische Umgebung des Geräts zu hoch sperrt). (I9c027, b/217497678, b/131755853)

  • Filtern der simpleperf-Stichprobenprofilerstellung nur nach measureRepeated-Thread, um die Prüfung zu vereinfachen (Ic3e12, b/217501939)

  • Unterstützung von Messwerten aus benannten UI-Unterprozessen in Multi-Prozess-Anwendungen (Ice6c0, b/215988434)

  • Regeln für das Baseline-Profil nach Android 9 (SDK 28) filtern. aosp/1980331 b/216508418

  • Überspringen Sie die Profilinstallation bei Verwendung von Compilation.None(). Außerdem kannst du Warnungen senden, wenn in der App eine ältere Version von androidx.profileinstaller und das Android-Gradle-Plug-in verwendet wird. aosp/1977029

Version 1.1.0-beta03

9. Februar 2022

androidx.benchmark:benchmark-*:1.1.0-beta03 wurde veröffentlicht. Version 1.1.0-beta03 enthält diese Commits.

API-Änderungen

  • AudioUnderrunMetric wurde der MakroBenchmark-Bibliothek unter dem Flag „experimental“ hinzugefügt, um die Erkennung von Audio-Unterläufen zu ermöglichen (Ib5972).
  • BaselineProfileRule akzeptiert keinen setup-Block mehr, da dies genauso funktioniert wie profileBlock. (Ic7dfe, b/215536447)

    Beispiel:

    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            setupBlock = {
                startActivityAndWait()
            },
            profileBlock = {
                // ...
            }
        )
    }
    
    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            profileBlock = {
                startActivityAndWait()
                // ...
            }
        )
    }
    

Fehlerkorrekturen

  • Ein Problem wurde behoben, bei dem Microbench-Profiler-Traces in nachfolgenden Ausführungen nicht aktualisiert wurden, wenn sie in der Studio-Ausgabe verknüpft wurden (I5ae4d, b/214917025).
  • Kompilierungs-Shell-Befehle auf API 23 (Ice380) verhindern
  • Umbenennung von FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi, um klarzustellen, dass es sich um Dauer und nicht um Zeitstempel handelt und um Präfixe abzugleichen. (I0eba3, b/216337830)

Version 1.1.0-beta02

26. Januar 2022

androidx.benchmark:benchmark-*:1.1.0-beta02 wurde veröffentlicht. Version 1.1.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Die Ergebnisse des MicroBenchmark-Stack-Stichproben-/Methoden-Tracing-Profils werden jetzt, ähnlich wie bei anderen Profilerstellungsausgaben, in der Studio-Ausgabe verknüpft. Der Zuordnungsmesswert wird nicht unterdrückt. (Idcb65, b/214440748, b/214253245)
  • BaselineProfileRule gibt jetzt den Befehl adb pull in der Logcat- und Studio-Ausgabe aus, um die generierte BaselineProfile-Textdatei abzurufen. (f08811)

Version 1.1.0-beta01

12. Januar 2022

androidx.benchmark:benchmark-*:1.1.0-beta01 wurde veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde behoben, dass die Profiler-Argumentaktivierung ignoriert wird. (I37373, b/210619998)
  • Veraltete CompliationModes (I98186, b/213467659) entfernt
  • Das Argument des Basisprofils von CompilationMode.Partial wurde zur besseren Übersichtlichkeit in Enum geändert. (Id67ea)

Version 1.1.0-alpha13

15. Dezember 2021

androidx.benchmark:benchmark-*:1.1.0-alpha13 wurde veröffentlicht. Version 1.1.0-alpha13 enthält diese Commits.

API-Änderungen

  • Fügen Sie der Microbench-Ausgabe unter Android Q (API 29 und höher) System Tracing mit geringem Aufwand hinzu. Beachten Sie, dass benutzerdefiniertes Tracing (über die android.os.Trace oder androidx.tracing Jetpack APIs) derzeit nicht erfasst wird, um Auswirkungen auf die Ergebnisse zu vermeiden. Dieses Tracing sollte bei der Diagnose von Instabilität hilfreich sein, insbesondere von Quellen außerhalb der Benchmark. (I298be, b/205636583, b/145598917)
  • CompilationModes wurde in drei Klassen eingeteilt: „Full“, „None“ und „Partial“. Früher wurden sie uneinheitlich nach Kompilierungsargumenten (die wir jetzt als Implementierungsdetails behandeln) und Funktionen benannt. Dadurch werden die Vor- und Nachteile sowie mögliche Kombinationen und das Verhalten der verschiedenen Plattformversionen deutlicher. (I3d7bf, b/207132597)
  • Einrichtung und Messung sind jetzt immer paarweise angeordnet. Sie können jetzt den Paketnamen und die Iteration abfragen. In bestimmten Aufwärmszenarien kann die Iteration null sein. (Id3b68, b/208357448, b/208369635)

Fehlerkorrekturen

  • Fehler behoben, bei dem CompilationMode.Speed fälschlicherweise als None behandelt wurde (I01137)

Version 1.1.0-alpha12

17. November 2021

androidx.benchmark:benchmark-*:1.1.0-alpha12 wurde veröffentlicht. Version 1.1.0-alpha12 enthält diese Commits.

Neue Funktionen

  • Fügen Sie den experimentellen TraceSectionMetric-Typ für benutzerdefinierte Trace-basierte Zeitmessungen hinzu. (I99db1, b/204572664)

Fehlerkorrekturen

  • Aktiviere bei jedem Durchlauf den Ruhemodus des Geräts, damit die Benutzeroberfläche getestet werden kann. Hierfür muss der Sperrbildschirm deaktiviert sein. (Ibfa28, b/180963442)
  • Mehrere Abstürze im StackSampling-Profilerstellungsmodus auf Emulatoren und nicht gerooteten Geräten wurden behoben (Icdbda, b/202719335).
  • Entfernung von 0,5 Sekunden Ruhezustand am Ende jeder Iteration.Wenn durch diese Änderung Messwerte fehlen, melden Sie bitte einen Fehler. (Iff6aa)
  • Reduzieren Sie die Wahrscheinlichkeit, dass Daten verloren gehen, und verringern Sie den Arbeitsspeicher-Overhead durch Tracing (Id2544, b/199324831, b/204448861).
  • Reduzieren Sie die Trace-Größe um ca. 40 %, indem Sie zum kompakten geplanten Speicherformat wechseln. (Id5fb6, b/199324831)
  • Implementierungen von Startmesswerten wurden aktualisiert, sodass sie immer am Ende des Renderingthreads enden. Dies wird in den verschiedenen Plattformversionen einheitlicher sein und den In-App-Messungen besser entsprechen. (IC6b55)

Version 1.1.0-alpha11

3. November 2021

androidx.benchmark:benchmark-*:1.1.0-alpha11 wurde veröffentlicht. Version 1.1.0-alpha11 enthält diese Commits.

API-Änderungen

  • Der Macro-Benchmark hat jetzt einen minSdkVersion von 23. (If2655)
  • Es wird eine neue experimentelle BaselineProfileRule hinzugefügt, mit der Referenzprofile für die kritische Nutzerreise der App erstellt werden können. Detaillierte Dokumentation folgen. (Ibbefa, b/203692160)
  • Entfernt die Schnittstellenvariante "measureRepeated", die für Java-Aufrufer hinzugefügt wurde, da dies zu Unklarheiten bei der Durchführung bzw. Lösung der Methode führte. Java-Aufrufer müssen wieder Unit.Instance vonmeasureRepeated zurückgeben. Wenn Ihnen dies nicht gefällt, melden Sie den Fehler. Wir werden ihn in einer zukünftigen Version noch einmal prüfen. (Ifb23e, b/204331495)

Version 1.1.0-alpha10

27. Oktober 2021

androidx.benchmark:benchmark-*:1.1.0-alpha10 wurde veröffentlicht. Version 1.1.0-alpha10 enthält diese Commits.

API-Änderungen

  • Backport von StartupTimingMetric, um auf API 23 zurückzuportieren. Mit dieser neuen Implementierung wird auch die Funktion „reportFullyDrawn()“ besser verarbeitet, um zu warten, bis der entsprechende Inhalt gerendert wurde. (If3ac9, b/183129298)
  • JvmOverloads wurde mehreren MacroBenchmarkScope-Methoden für Java-Aufrufer hinzugefügt. (I644fe, b/184546459)
  • Geben Sie eine alternative Funktion „MacroBenchmarkRule.measureRepeated“ an, die eine Consumer<MacrobenchmarkScope> für die idiomatische Verwendung in der Sprache Java verwendet. (If74ab, b/184546459)

Fehlerkorrekturen

  • Das Problem wurde behoben, wenn Traces nicht früh genug gestartet wurden und Messwerte fehlen. Damit wird erwartet, dass Ausnahmen vom Typ „Während der Benchmark können keine Messwerte gelesen werden“ behoben werden, die von der Bibliothek selbst verursacht wurden. (I6dfcb, b/193827052, b/200302931)
  • FrameNegativeSlack wurde in FrameOverrun umbenannt, um seine Bedeutung zu verdeutlichen, d. h. wie weit der Frame sein Zeitbudget überschritten hat. (I6c2aa, b/203008701)

Version 1.1.0-alpha09

13. Oktober 2021

androidx.benchmark:benchmark-*:1.1.0-alpha09 wurde veröffentlicht. Version 1.1.0-alpha09 enthält diese Commits.

Fehlerkorrekturen

  • Unterstützung beim Löschen eines Kernel-Seiten-Cache ohne Root auf API 31/S+, wodurch die Genauigkeit von StartupMode.COLD-Starts erhöht wird. (Iecfdb, b/200160030)

Version 1.1.0-alpha08

29. September 2021

androidx.benchmark:benchmark-*:1.1.0-alpha08 wurde veröffentlicht. Version 1.1.0-alpha08 enthält diese Commits.

API-Änderungen

  • Scroll-Makro-Benchmarks aktivieren, um zu API 23 zurückzukehren (If39c2, b/183129298)
  • Hinzufügen eines neuen Messwertstichprobenmesswerts zur UI- und JSON-Ausgabe, der auf Perzentile mehrerer Stichproben pro Iteration konzentriert ist. (I56247, b/199940612)
  • In den Benchmarkbibliotheken zu Gleitkommamesswerten wechseln (auf der Studio-Benutzeroberfläche abgeschnitten). (I69249, b/197008210)

Version 1.1.0-alpha07

1. September 2021

androidx.benchmark:benchmark-*:1.1.0-alpha07 wurde veröffentlicht. Version 1.1.0-alpha07 enthält diese Commits.

API-Änderungen

  • Mindest-API-Level wurde auf 21 erhöht, um die niedrigste API-Ebene widerzuspiegeln, die in Zukunft unterstützt werden soll. Die aktuell unterstützte Mindest-API-Anzahl wird weiterhin über requiredApi() übertragen und ist derzeit 29 (I440d6, b/183129298).

Fehlerkorrekturen

  • ProfileInstaller wurde korrigiert, damit Apps, die Referenzprofile verwenden, MacroBenchmarks mit CompilationMode.BaselineProfile leichter ausführen können. (I42657, b/196074999) HINWEIS: erfordert auch eine Aktualisierung auf androidx.profileinstaller:profileinstaller:1.1.0-alpha04 oder höher.
  • Die Benchmarks für StartupMode.COLD und CompilationMode.None sind jetzt stabiler. (I770cd, b/196074999)

Version 1.1.0-alpha06

18. August 2021

androidx.benchmark:benchmark-*:1.1.0-alpha06 wurde veröffentlicht. Version 1.1.0-alpha06 enthält diese Commits.

API-Änderungen

  • Das androidx.benchmark.iterations-Instrumentierungsargument wurde hinzugefügt, um das manuelle Überschreiben der Iterationsanzahl bei lokalen Tests/Profilen zu ermöglichen. (6188be, b/194137879)

Fehlerkorrekturen

Bekannte Probleme

  • CompilationMode.BaselineProfile ist noch in der Entwicklung. Verwenden Sie sie nicht, um herauszufinden, wie gut ein Profil im Moment ist.

Version 1.1.0-alpha05

4. August 2021

androidx.benchmark:benchmark-*:1.1.0-alpha05 wurde veröffentlicht. Version 1.1.0-alpha05 enthält diese Commits.

1.1.0-alpha04 wurde vor der Veröffentlichung aufgrund eines unregelmäßigen Absturzes abgebrochen. b/193827052

API-Änderungen

  • startActivityAndwait wurde so geändert, dass der Start über am start gestartet wird. Dadurch wird die Zeit jedes Durchlaufs der Messung um etwa 5 Sekunden verkürzt, was auf Kosten der Tatsache besteht, dass Intent-Parcelables nicht mehr unterstützt werden. (I5a6f5, b/192009149

Fehlerkorrekturen

  • Sie können die Aggressivität der Erkennung von thermischen Drosselungen reduzieren und die Referenz neu berechnen, wenn Drosselungen häufig erkannt werden. (I7327b)
  • FrameTimingMetric wurde korrigiert, sodass es unter Android S Beta (Ib60cc, b/193260119) funktioniert.
  • Verwende ein EmptyActivity, um die Ziel-App aus einem Status mit erzwungener Beendigung zu versetzen und so CompilationMode.BaselineProfile besser zu unterstützen. (Id7cac, b/192084204)
  • Die Erweiterung der Trace-Datei wurde in .perfetto-trace geändert, damit sie dem Plattformstandard entspricht. (I4c236, b/174663039)
  • StartupTimingMetric gibt jetzt den Messwert "completeDrawnMs" aus, um die Zeit bis zum Abschluss des Renderings Ihrer Anwendung zu messen. Rufen Sie zum Definieren dieses Messwerts für Ihre App „Activity.reportFullyDrawn“ auf, wenn der ursprüngliche Inhalt bereit ist, z. B. wenn die anfänglichen Listenelemente aus der Datenbank oder dem Netzwerk geladen werden. Die Methode reportFullyDrawn ist ohne Build-Versionsprüfungen für ComponentActivity verfügbar. Der Test muss lange genug ausgeführt werden, um den Messwert zu erfassen (startActivityAndWarten wartet nicht auf „reportFullyDrawn“). (If1141, b/179176560)
  • Kosten für das Anhängen von Ui-Metadaten an Traces um mehr als 50 ms reduzieren (Ic8390, b/193923003)
  • Deutlich erhöhte Abfragehäufigkeit beim Beenden des Tracings, wodurch sich die Benchmarklaufzeit beim Start beispielsweise um mehr als 30 % verringern kann (Idfbc1, b/193723768)

Version 1.1.0-alpha03

16. Juni 2021

androidx.benchmark:benchmark-*:1.1.0-alpha03 wurde veröffentlicht. Version 1.1.0-alpha03 enthält diese Commits.

Neue Funktionen

Fehlerkorrekturen

  • Der Gradle-Beispielcode zum Unterdrücken von Benchmark-Fehlern wurde aktualisiert. Er verwendet nun eine nicht verworfene API mit einer Syntax, die auch .gradle.kts-Nutzer unterstützt.

    Z. B.

    testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
    

Version 1.1.0-alpha02

18. Mai 2021

Die Benchmark-Version 1.1.0-alpha02 stellt eine wichtige Komponente beim Benchmarking dar: MacroBenchmark. Neben dem Benchmarking, mit dem Sie CPU-Schleifen messen können, können Sie mit MacroBenchmark auch die gesamte App-Interaktion wie Starten und Scrollen messen und Traces erfassen. Weitere Informationen finden Sie in der Dokumentation zur Bibliothek.

androidx.benchmark:benchmark-*:1.1.0-alpha02 wurde veröffentlicht. Version 1.1.0-alpha02 enthält diese Commits.

Neue Funktionen

MacroBenchmark-Artefakte hinzugefügt (androidx.benchmark:benchmark-macro-junit4 und androidx.benchmark:benchmark-macro)

  • Erfassen Sie Start-, Scroll- und Animationsmesswerte aus Ihrer App, lokal oder in CI.
  • Traces in Android Studio erfassen und prüfen

Fehlerkorrekturen

  • Shell-Berechtigungsprobleme mit Ausgabeverzeichnis unter Android 12 umgehen. Hinweis: Damit auf betroffenen Geräten weiterhin Ausgabedateien erfasst werden können, ist möglicherweise eine Aktualisierung des Android-Gradle-Plug-ins auf Canary-Version 7.0.0 und von Android Studio auf Arctic Fox (2020.3.1) erforderlich. (Icb039)
  • Konfigurations-Caching in BenchmarkPlugin (6be1c1, b/159804788) wird unterstützt.
  • Vereinfachte Dateiausgabe – standardmäßig aktiviert, in einem Verzeichnis, das requestLegacyExternalStorage=true nicht erfordert (8b5a4d, b/172376362)
  • Es wurde ein Problem mit Logcat-Warnungen für das Drucken von Bibliotheken behoben, die darauf hinweisen, dass der JIT-Thread in Plattformversionen, in denen er nicht vorhanden ist, nicht gefunden wird. (I9cc63, b/161847393)
  • Fehler bei der maximalen Frequenz des Lesegeräts behoben. (I55c7a)

Version 1.1.0-alpha01

10. Juni 2020

androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 und androidx.benchmark:benchmark-junit4:1.1.0-alpha01 wurden veröffentlicht. Version 1.1.0-alpha01 enthält diese Commits.

Neue Funktionen von Version 1.1

  • Zuordnungsmesswert: Benchmarks durchlaufen jetzt nach Warmup und Timing eine zusätzliche Phase, in der die Anzahl der Zuweisungen erfasst wird. Zuweisungen können bei älteren Versionen der Plattform zu Leistungsproblemen führen (140 ns in O wird zu 8ns in M – gemessen auf Nexus5X mit gesperrten Uhren). Dieser Messwert wird in der Android Studio-Konsolenausgabe und in der
  • Unterstützung der Profilerstellung: Sie können jetzt Profildaten für eine Benchmarkausführung erfassen, um zu prüfen, warum Ihr Code möglicherweise langsam ausgeführt wird. Benchmark unterstützt die Erfassung entweder der Methodenaufzeichnung oder der Stichprobenerhebung aus ART. Diese Dateien können mit dem Profiler in Android Studio überprüft werden. Klicken Sie dazu auf File > Open (Datei > Öffnen).
  • Das Benchmark-Gradle-Plug-in bietet jetzt Standardeinstellungen, um die Einrichtung zu vereinfachen:
    • testBuildType ist standardmäßig freigegeben, um die Verwendung von Abhängigkeiten mit integrierter Codeabdeckung zu vermeiden. Der Release-BuildType wird auch als Standard-BuildType konfiguriert. Dadurch kann Android Studio beim ersten Öffnen eines Projekts automatisch die richtige Build-Variante auswählen. (b/138808399)
    • signingConfig.debug wird als Standardkonfiguration für die Signatur verwendet (b/153583269).

** Fehlerkorrekturen **

  • Der Overhead für den Übergang zur Aufwärmphase konnte deutlich reduziert werden, da die erste Messung für jede Benchmark künstlich höher war als für andere. Dieses Problem trat in sehr kleinen Benchmarks (maximal 1 Mikrosekunde) aus. (b/142058671)
  • Es wurde InstrumentationResultParser-Fehler behoben, der für jede Benchmark beim Ausführen über die Befehlszeile ausgegeben wurde. (I64988, b/154248456)

Bekannte Probleme

  • Befehlszeile und Gradle-Aufrufe von Benchmark geben die Ergebnisse nicht direkt aus. Sie können dies umgehen, indem Sie entweder Studio verwenden oder die JSON-Ausgabedatei für die Ergebnisse parsen.
  • Für Benchmarkberichte kann der Bericht nicht von Geräten abgerufen werden, auf denen eine App mit einer App-ID mit der Endung „android“ oder „download“ installiert ist. Die Groß-/Kleinschreibung wird dabei nicht berücksichtigt. Nutzer, bei denen dieses Problem auftritt, sollten das Android-Gradle-Plug-in auf Version 4.2-alpha01 oder höher aktualisieren.

Version 1.0.0

Benchmarkversion 1.0.0

20. November 2019

androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0 und androidx.benchmark:benchmark-junit4:1.0.0 wurden ohne Änderungen an 1.0.0 bis rc01 veröffentlicht. Version 1.0.0 enthält diese Commits.

Hauptfunktionen von Version 1.0.0

Mit der Benchmark-Bibliothek können Sie Leistungs-Benchmarks für App-Code schreiben und schnell Ergebnisse erhalten.

Sie verhindert Build- und Laufzeitkonfigurationsprobleme und stabilisiert die Geräteleistung, um genaue und konsistente Messungen zu gewährleisten. Führen Sie die Benchmarks direkt in Android Studio oder in Continuous Integration aus, um die Codeleistung im Zeitverlauf zu beobachten und Regressionen zu vermeiden.

Zu den wichtigsten Funktionen gehören:

  • Uhrstabilisierung
  • Automatische Thread-Priorisierung
  • Unterstützung für UI-Leistungstests, wie im RecyclerView-Beispiel
  • JIT-fähiges Aufwärmen und Looping
  • JSON-Benchmark-Ausgabe für die Nachbearbeitung

Version 1.0.0-rc01

23. Oktober 2019

androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01 und androidx.benchmark:benchmark-junit4:1.0.0-rc01 wurden veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.

Neue Funktionen

  • Systrace-Tracing wurde den Benchmarks hinzugefügt.

Fehlerkorrekturen

  • Es wurde ein Problem mit der Instabilität von Messwerten behoben, bei dem die JIT aufgrund einer herabgestuften Priorisierung nicht vor dem Aufwärmen beendet wurde (b/140773023).
  • Einheitliches JSON-Ausgabeverzeichnis für Android-Gradle-Plug-in 3.5 und 3.6

Version 1.0.0-beta01

9. Oktober 2019

androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 und androidx.benchmark:benchmark-junit4:1.0.0-beta01 wurden veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.

Neue Funktionen

  • Führen Sie vor jedem Aufwärmvorgang eine automatische Speicherbereinigung aus, um die Speicherauslastung von einer Benchmark bis zur nächsten zu reduzieren (b/140895105).

Fehlerkorrekturen

  • Die Abhängigkeit androidx.annotation:android-experimental-lint wurde hinzugefügt, damit der Java-Code Lint-Fehler korrekt erzeugt, wenn die experimentelle API nicht verwendet wird, ähnlich wie die experimentelle Kotlin-Anmerkung für Kotlin-Aufrufer.
  • Die Verwendung des additionalTestOutputDir-Instrumentierungsarguments für die Ausgabe im Android-Gradle-Plug-in 3.6 wird jetzt korrekt erkannt, um zu erkennen, wann AGP die Datenkopien verarbeitet.
  • Korrigieren Sie die nicht erkannte Taktfrequenz in JSON, damit -1 korrekt gedruckt wird (b/141945670).

Version 1.0.0-alpha06

18. September 2019

androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 und androidx.benchmark:benchmark-junit4:1.0.0-alpha06 wurden veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.

Neue Funktionen

  • Es wurde eine Prüfung auf falsche Verwendung des alten Pakets für den Test-Runner hinzugefügt, die jetzt eine hilfreichere Fehlermeldung bietet.

API-Änderungen

  • Die experimentelle Anmerkung ExperimentalAnnotationReport ist jetzt korrekt öffentlich. Für die Nutzung der experimentellen BenchmarkState#report API ist jetzt diese Annotation erforderlich

Version 1.0.0-alpha05

5. September 2019

androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 und androidx.benchmark:benchmark-junit4:1.0.0-alpha05 wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • BenchmarkState.reportData API ist jetzt als experimentell gekennzeichnet

Fehlerkorrekturen

  • Fehlerkorrektur für das Skript zur Zeitsperre, das auf Geräten, auf denen das Shell-Dienstprogramm cut oder expr fehlt, nicht funktionierte.
  • Es wurde ein Problem mit der Aufgabe ./gradlew lockClocks behoben, die auf Geräten hängen blieb, die mit einer älteren Version des SU-Dienstprogramms gerootet waren, die das Flag -c nicht unterstützt.

Version 1.0.0-alpha04

7. August 2019

androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 und androidx.benchmark:benchmark-junit4:1.0.0-alpha04 wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Es wurde auch eine neue Dokumentation zur Verwendung der Benchmark-Bibliothek ohne Gradle hinzugefügt, sowohl für die Verwendung mit verschiedenen Build-Systemen (z. B. Bazel oder Buck) als auch für die Ausführung in CI. Weitere Informationen finden Sie unter Benchmarks ohne Gradle erstellen und Benchmarks in Continuous Integration ausführen.

Neue Funktionen

  • Gradle-Plug-in
    • Deaktiviert jetzt automatisch die Testabdeckung und legt standardmäßig AndroidBenchmarkRunner fest (b/138374050)
    • Unterstützung für neue AGP-basierte Datenkopien beim Ausführen von Benchmarks und bei der Verwendung von AGP 3.6+
  • Ergänzungen im JSON-Format
    • Gesamte Benchmark-Testlaufzeit der Ausgabe (b/133147694)
    • @Parameterized Benchmarks, die einen Namensstring (z. B. @Parameters(name = "size={0},depth={1}")) verwenden, geben jetzt Parameternamen und -werte pro Benchmark in der JSON-Ausgabe aus (b/132578772).
  • Probelaufmodus (b/138785848)
    • Es wurde ein Probelaufmodus hinzugefügt, in dem jede Benchmark-Schleife nur einmal ausgeführt wird, um nach Fehlern/Abstürzen zu suchen, ohne Messungen zu erfassen. Dies kann z.B. nützlich sein, wenn Sie zum Beispiel schnell Benchmarks im Vorab einreichen, um zu prüfen, ob sie fehlerhaft sind.

API-Änderungen

  • Die Modulstruktur wurde durch Aufteilung der Bibliothek geändert (b/138451391).
    • benchmark:benchmark-junit4 enthält Klassen mit JUnit-Abhängigkeit: AndroidBenchmarkRunner und BenchmarkRule. Beide wurden in das androidx.benchmark.junit4-Paket verschoben.
    • benchmark:benchmark-common enthält den Rest der Logik, einschließlich der BenchmarkState API
    • Durch diese Aufteilung kann die Bibliothek in Zukunft Benchmarking ohne JUnit4 APIs unterstützen
  • Konfigurationswarnungen werden jetzt als Fehler behandelt und führen zum Absturz des Tests (b/137653596).
    • Dies geschieht, um genaue Messungen zu fördern, insbesondere in CI.
    • Diese Fehler lassen sich mit einem Instrumentierungsargument auf Warnungen reduzieren. Beispiel: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

Fehlerkorrekturen

  • Fehler beim Schreiben in externen Speicher auf Q-Geräten bieten aussagekräftigere Meldungen mit Vorschlägen zur Behebung des Problems.
  • Die Bildschirme werden während Benchmark-Ausführungen automatisch aktiviert und funktionieren nicht mehr, wenn der Bildschirm ausgeschaltet ist

Externe Beiträge

  • Vielen Dank an Sergey Zakharov für den Beitrag zur Verbesserung der JSON-Ausgabe und die Behebung von Problemen mit dem Display.

Version 1.0.0-alpha03

2. Juli 2019

androidx.benchmark:benchmark:1.0.0-alpha03 und androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 wurden veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • Die Schlafdauer aufgrund von Temperaturdrosselung pro Benchmark im vollständigen JSON-Bericht angeben

Fehlerkorrekturen

  • Das Gradle-Plug-in sollte nicht mehr erforderlich sein, nachdem Android-Plug-ins und die Android-Blockierung
  • Unterstützung für Benchmarkberichte auf Android 10-Geräten mit eingeschränktem Speicher

Version 1.0.0-alpha02

6. Juni 2019

androidx.benchmark:1.0.0-alpha02 und androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 wurden freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.

Beachten Sie, dass das JSON-Schema als API behandelt wird. Wir planen, die gleichen Stabilitätsbeschränkungen wie bei anderen APIs zu befolgen: stabil (mit sehr seltenen Ausnahmen) einmal in der Betaphase und in der endgültigen Version behoben, mit nur Ergänzungen von Nebenversionen und Änderungen/Entfernungen in Hauptversionen.

API-Änderungen

  • Überarbeitetes JSON-Schema. Weitere Änderungen am JSON-Schema sind wahrscheinlich auf Ergänzungen beschränkt:

    • Die Struktur des Ergebnisobjekts wurde neu organisiert, um in Zukunft weitere Messwertgruppen zu unterstützen (b/132713021).
    • Kontextinformationen zum Testlauf, wie Geräte- und Build-Informationen und ob Uhren gesperrt sind, wurden dem Objekt der obersten Ebene hinzugefügt (b/132711920).
    • Namen von Zeitmesswerten enthalten jetzt das Wort "ns" (b/132714527).
    • Zusätzliche Statistiken pro gemeldetem Messwert (Maximum, Medianwert, Minimum) und entfernte vereinfachte Nano-Zusammenfassungsstatistiken (b/132713851)
  • XML-Ausgabe entfernt (b/132714414)

  • Erkennung der Wärmedrosselung wurde aus der BenchmarkState.reportData API entfernt (b/132887006)

Fehlerkorrekturen

  • Problem behoben, bei dem ./gradlew lockClocks auf einigen neueren Betriebssystemgeräten nicht fixiert war (b/133424037)
  • Drosselungserkennung für Emulator deaktiviert (b/132880807)

Version 1.0.0-alpha01

7. Mai 2019

androidx.benchmark:benchmark:1.0.0-alpha01 wurde veröffentlicht. Die in dieser Version enthaltenen Commits sind hier verfügbar.