Benchmark

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

Abhängigkeiten deklarieren

Um eine Abhängigkeit von Benchmark hinzuzufügen, müssen Sie das Maven-Repository von Google zu für Ihr Projekt. Gelesen Maven-Repository von Google für weitere Informationen Informationen.

Makro-Benchmark

So verwenden Sie MacroBenchmark: Fügen Sie in Ihrem Projekt der Datei build.gradle die folgenden Abhängigkeiten hinzu: Ihr Makro-Benchmark-Modul:

Cool

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

Kotlin

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

Mikro-Benchmark

MicroBenchmark verwenden Fügen Sie in Ihrem Projekt der Datei build.gradle die folgenden Abhängigkeiten hinzu: Ihr MicroBenchmark-Modul:

Cool

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

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

Kotlin

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

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

Die MicroBenchmark-Bibliothek bietet auch ein Gradle-Plug-in für die Verwendung mit Ihrem MicroBenchmark-Modul. Dieses Plug-in legt Standardeinstellungen für die Build-Konfiguration für das Modul fest, richtet Benchmark-Ausgabekopie an den Host, und stellt die Aufgabe ./gradlew lockClocks.

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

Cool

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

Kotlin

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

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

Cool

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 zur Verbesserung dieser Bibliothek. In der bestehende Probleme in dieser Bibliothek, bevor Sie eine neue erstellen. So können Sie für ein vorhandenes Problem abstimmen: 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

21. August 2024

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

Änderungen an Mikro-Benchmarks seit Version 1.2.0

  • Das Methoden-Tracing ist bei der Ausführung auf den meisten Geräten in MicroBenchmarks standardmäßig aktiviert <ph type="x-smartling-placeholder">
      </ph>
    • Das Methoden-Tracing wird nach den Messungen als separate Phase ausgeführt.
    • Das Methoden-Tracing auf einigen Plattform- und ART-Versionen wirkt sich auf spätere Messphasen aus. Bei diesen Versionen ist das Methoden-Tracing standardmäßig deaktiviert und in der Studio-Ausgabe wird eine Warnung ausgegeben.
  • Benchmarks und ANRs des Hauptthreads <ph type="x-smartling-placeholder">
      </ph>
    • Es wurde measureRepeatedOnMainThread für UI-Thread-Benchmarks hinzugefügt, z.B. für diejenigen, die mit UIs zum Schreiben/Aufrufen interagieren, um ANR-Fehler zu vermeiden, wenn sie viele Sekunden lang ausgeführt werden.
    • Methoden-Traces werden übersprungen, wenn davon auszugehen ist, dass die Frist zur ANR-Vermeidung überschritten wird. Setzen Sie androidx.benchmark.profiling.skipWhenDurationRisksAnr auf „false“, um dieses Verhalten zu deaktivieren (nicht für CI-Ausführungen empfohlen).
  • Minimierung <ph type="x-smartling-placeholder">
      </ph>
    • Eingebettete Proguard-Regeln zur Verbesserung von MicroBenchmarking bei aktivierter Reduzierung
    • Minification/R8 in einem Bibliotheksmodul erfordert AGP 8.3 und kann über android.buildTypes.release.androidTest.enableMinification in deinem build.gradle aktiviert werden
    • Es wurde die experimentelle BlackHole.consume() API hinzugefügt, um die Eliminierung von veraltetem Code zu verhindern (If6812, b/286091643)
  • Messwerte <ph type="x-smartling-placeholder">
      </ph>
    • Experimenteller CPU-Ereigniszähler (Messwerte aus perf_event_open, der auf den meisten Plattformversionen Root erfordert), Zugriff über InstrumentationArgument androidx.benchmark.cpuEventCounter.enable (kann auf true gesetzt werden) und androidx.benchmark.cpuEventCounter.events können z. B. festgelegt werden. bis (Instructions,CpuCycles). Dies sollte von einigen Emulatoren für die Fehlerbehebung bei Nutzerfehlern unterstützt werden,

MACROBenchmark-Änderungen seit Version 1.2.0

  • Überarbeitung der Methodenverfolgung für Makro-Benchmarks.
    • Methoden-Traces sind jetzt auf die Dauer der measureBlock beschränkt und können mehrere Sitzungen erfassen, wenn der Prozess mehrmals gestartet wird.
    • Bisher funktionierte das Methoden-Tracing nur für StartupMode.COLD-Benchmarks. Für measureBlocks, die den Zielprozess nicht neu gestartet haben, wird nichts erfasst.
    • 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)
  • Dump von ART-Profilen in einzelnen warmUp-Iterationen korrekt, wenn der Prozess beendet wird, damit CompilationMode.Partial(warmup=N)-Messungen genauer sind. (I17923)
  • Fehlermeldung bei Drop Shader-Broadcast <ph type="x-smartling-placeholder">
      </ph>
    • Es wurden Debugging-Vorschläge zum Löschen der Shader-Broadcast-Fehlermeldung hinzugefügt
    • 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: <ph type="x-smartling-placeholder">
        </ph>
      • 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).
  • 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)
  • Brechen Sie Dexopt-Jobs im Hintergrund ab, bevor Sie eine MacroBenchmark ausführen, um Störungen zu reduzieren. (I989ed)
  • MacroBenchmark wartet jetzt 1 Sekunde, bis die Zielanwendung ein ART-Profil leert (zuvor hat es 500 ms gewartet). (I85a50, b/316082056)
  • Überarbeitung von TraceSectionMetric <ph type="x-smartling-placeholder">
      </ph>
    • Hinweis: Die unten aufgeführten TraceSectionMetric-Änderungen können sich auf die Ausgaben in der CI-Nutzung auswirken und zu Unterbrechungen führen oder das Parsen unterbrechen
    • „Summe“ ist jetzt die Standardeinstellung, da dieser Messwert meistens für wiederkehrende Ereignisse verwendet wird und zuerst Daten in diesen Fällen verworfen würden
    • Anpassbarer und mehr Modi verfügbar
    • Modusnamen sind jetzt in Namen der Messwertausgabe eingebettet (in Studio und JSON).
    • Unterstützt jetzt Segmente, die mit Trace.{begin|end}AsyncSection erstellt wurden.
  • Messwerte <ph type="x-smartling-placeholder">
      </ph>
    • Stromversorgung – PowerMetric.deviceSupportsHighPrecisionTracking, PowerMetric.deviceBatteryHasMinimumCharge() und PowerMetric.deviceSupportsPowerEnergy() hinzugefügt
    • Metric.getResult wurde entsprechend dem Rückgabetyp in getMeasurements umbenannt
    • 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 werden Log.w()- und keine Startmesswerte gemeldet, wenn Nicht-Frame-Ereignisse fehlen. Ausnahmen werden ausgelöst, wenn ein Start erkannt wird. Ausgenommen hiervon sind Frame-Timing-Informationen (aus UI-/RT-Slices). (Id240f, b/329145809)
    • frameCount wurde zu FrameTimingMetric hinzugefügt, um bei der Erkennung von Szenarien zu helfen, in denen sich Messungen ändern, weil sich die Anzahl der produzierten 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, sofern er in Dokumenten verfügbar ist, und die Gründe dafür. (I18749, b/329478323)
    • 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)
    • 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)

Baseline-Profilerfassung / Änderungen am Gradle-Plug-in seit Version 1.2.0

  • Die maximale empfohlene AGP-Version wurde auf 9.0.0-alpha01 erhöht.
  • Achten Sie darauf, dass die Aufgaben mergeArtProfile und mergeStartupProfile immer auf die Erstellung des Basisprofils warten. (I623d6, b/343086054)
  • Wenn Sie ein Basisprofil erstellen, wird eine Zusammenfassung der Änderungen ausgegeben (I824c8, b/269484510).
  • DSL zum Deaktivieren von Warnungen hinzugefügt (Ic4deb, b/331237001)
  • Beheben Sie das Problem, damit für Benchmarks generierte Referenzprofile verwendet werden, wenn „automaticGenerationDuringBuild“ deaktiviert ist (Ic144f, b/333024280).
  • Korrigieren 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)
  • Fehlerkorrektur für das Einbeziehen von Referenzprofilen der Bibliothek in AAR vor 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)

Weitere wichtige Änderungen seit Version 1.2.0

  • Trace-Erfassung <ph type="x-smartling-placeholder">
      </ph>
    • Der EXITCODE 2-Fehler beim Start von „perfetto“ wurde von einem Fehler auf eine protokollierte Warnung reduziert.
    • AIDL-Tracing standardmäßig in Benchmarks aktivieren(erfordert API 28) (Ia0af2, b/341852305)
    • Porter-Tag-Tracing standardmäßig in Benchmarks aktivieren. Damit werden beispielsweise Wakelock-Tracepoints erfasst. (Icfe44, b/286551983)
    • Erhöhtes Zeitlimit für den Start der Trace-Erfassung, um Abstürze beim Starten des Tracings auf langsameren Geräten zu vermeiden (I98841, b/329145808)
    • Öffentliche API PerfettoTraceProcessor.Session.queryMetrics APIs mit JSON-, textproto- und proto-binären (nicht decodierten) Varianten wurden hinzugefügt. Damit können Sie in TraceProcessor integrierte Messwerte abfragen (I54d7f, b/304038382).
    • Aktivieren Sie die Blockierung des Starts des Perfetto-Trace-Eintrags, um das Risiko fehlender Daten zu Beginn des Trace zu verringern. Wird nur ab API 33 unterstützt. (Ie6e41, b/310760059)
  • JSON-Ausgabe <ph type="x-smartling-placeholder">
      </ph>
    • Zusätzliche Informationen im Benchmark-Kontext in der JSON-Ausgabe hinzugefügt: <ph type="x-smartling-placeholder">
        </ph>
      • context.artMainlineVersion – Ganzzahlversion 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 vor der Veröffentlichung (einschließlich bei Release-Builds) (Ie5020)
    • Die profilerOutput-Liste wurde zur JSON-Ausgabe hinzugefügt, um die Tools zur Profilerstellung zu erleichtern (z. B. Perfetto, Methoden-Traces) (I05ddd, b/332604449).
    • 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)
    • Wird ausgelöst, wenn Dateinamen länger als 200 Zeichen sind, um unklare Abstürze beim Schreiben oder Nachverarbeiten von Dateien zu vermeiden. (I4a5ab)

Version 1.3.0-rc01

7. August 2024

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

Fehlerkorrekturen

  • Fehler bei androidx.benchmark.cpuEventCounter mit fehlerhaften Werten für Ereignisse beheben, die keine Anweisungen auslösen (I7386a, b/286306579)
  • Korrigieren Sie resumeTiming/runWithTimingDisabled, um die Prioritätsreihenfolge der Messwerte zu berücksichtigen und die Auswirkungen des Pausierens/Fortsetzens von Messwerten mit niedrigerer Priorität auf die Ergebnisse von Messwerten mit höherer Priorität erheblich zu verringern. Wenn Sie beispielsweise CPU-Leistungszähler über das Instrumentierungsargument cpuEventCounter.enable verwenden, wird timeNs beim Pausieren/Fortsetzen nicht mehr signifikant reduziert. (I39c2e, b/286306579, b/307445225)
  • Die Wahrscheinlichkeit, dass ein Stack-Sampling dazu führt, dass measureRepeatedOnMainThread den Hauptthread nicht rechtzeitig erreicht, wurde verringert, indem die Konvertierung der Stack-Stichproben aus dem Hauptthread verschoben wurde. (I487a8, b/342237318)
  • Die manuelle Beschreibung des Zugriffs auf neue Plattform-APIs wurde entfernt, da dies bei Verwendung von R8 mit AGP 7.3 oder höher (z.B. R8-Version 3.3) und bei allen Builds bei Verwendung von AGP 8.1 oder höher (z.B. D8 Version 8.1) automatisch über die API-Modellierung erfolgt. Kunden, die AGP nicht verwenden, wird empfohlen, auf D8-Version 8.1 oder höher zu aktualisieren. Weitere Details findest du in diesem Artikel. (I9496c, b/345472586)
  • Es wurde agp-Versionsprüfung hinzugefügt, um den Paketnamen als instr arg zu senden. Vor AGP 8.4.0 kann der Paketname der Ziel-App nicht über Instrumentierungsargumente an die Instrumentierungs-App gesendet werden. (0c72a3f)

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)
  • Zusätzliche Informationen im Benchmark-Kontext in der JSON-Ausgabe hinzugefügt: <ph type="x-smartling-placeholder">
      </ph>
    • 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(), um die Verwendung zu vereinfachen, 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)
  • Power-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 in den Aufwand der Methodenverfolgung. (I61fb4, b/329146942)

API-Änderungen

  • TraceSectionMetric.Mode wurde in eine versiegelte Klasse geändert, um eine künftige Erweiterung zu ermöglichen, ohne dabei alle Operationen zu beeinträchtigen (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).
  • Korrigieren 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 des Perfetto-Trace-Eintrags, 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 (Komma) Tausendertrennzeichen zur 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 werden Log.w()- und keine Startmesswerte gemeldet, wenn Nicht-Frame-Ereignisse fehlen. Ausnahmen werden ausgelöst, wenn ein Start erkannt wird. Ausgenommen hiervon sind 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 produzierten 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, sofern 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

  • Die booleschen Parameter 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: <ph type="x-smartling-placeholder">
      </ph>
    • 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
    • Standardeinstellung in Summe geändert, da dieser Messwert meistens für wiederkehrende Ereignisse verwendet wird Beachten Sie diese Änderungen bei der CI-Nutzung, da dies zu Unterbrechungen führen kann. oder das Parsing unterbrechen. (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: <ph type="x-smartling-placeholder">
      </ph>
    • 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 wird das Absturz von StartupMode.COLD-Benchmarks von „Paket $package darf nicht vor dem Kaltstart ausgeführt werden“ behoben. weil das Beenden des Prozesses nicht vollständig erfolgreich war. (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 <ph type="x-smartling-placeholder">
      </ph>
    • 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.
  • Fehlerbehebungen <ph type="x-smartling-placeholder">

Makro-Benchmark

  • Kompilierung <ph type="x-smartling-placeholder">
      </ph>
    • 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. Neuzusammensetzungs-Tracing erstellen. 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 behoben > 64MB (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

  • Funktionen <ph type="x-smartling-placeholder">
      </ph>
    • 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 <ph type="x-smartling-placeholder">
      </ph>
    • 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 zur Steuerung von BenchmarkState ohne JUnit hinzugefügt, die unabhängig von BenchmarkRule gesteuert werden können.
    • 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.
  • Fehlerbehebungen <ph type="x-smartling-placeholder">
      </ph>
    • 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 des ART-Methoden-Trace behoben -> Perfetto-Format. (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 '=' vermeiden. und ':' in Ausgabedateinamen. (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 ausgeführt, anstatt sie zu ersetzen. 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 bestimmen. (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, um das Erstellen eines Basisprofils zu vereinfachen und den Entwickler-Workflow zu vereinfachen.

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 in 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 von 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

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 mit dem Messwert Starts erfasst werden können, z.B. Benachrichtigungen, Context.startActivity(), aktivitätsbasierte Navigation in der App oder Shell-Befehlen. (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“ nur eine Art von Test durchzufü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 Datei "build.gradle" Ihres Makros:

    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)
  • Überprüfung des Abschlusses des Starts der Aktivität wurde überarbeitet, um das Problem „Messwerte können nicht gelesen werden“ zu beheben eine Ausnahme in Start-Makro-Benchmarks. (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 gewährleisten.

Fehlerkorrekturen/Verhaltensänderungen

  • Es wurde ein Problem 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 Datei "build.gradle" Ihres Makros:

    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“ nur eine Art von Test durchzuführen, z.B. wenn BaselineProfiles in einem Emulator generiert wird. (I756b7, b/230371561)

    Beispiel: in der Datei "build.gradle" Ihres Makros:

    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)
  • Überprüfung des Abschlusses des Starts der Aktivität wurde überarbeitet, um das Problem „Messwerte können nicht gelesen werden“ zu beheben eine Ausnahme in Start-Makro-Benchmarks. (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

  • Fehlende Messwerte unter Android 10 korrigieren und NoSuchElementException verursacht, weil Prozessnamen nicht erfasst wurden in den Traces korrekt. (Ib4c17, b/218668335)

  • PowerManager für die Erkennung der thermischen Drosselung unter Q (API) verwenden 29) und höher. Dadurch wird die Häufigkeit von „false“ erheblich reduziert. Positive Werte bei der Erkennung der thermischen Drosselung (Benchmark-Wiederholung nach 90 Tagen) zweiten Abkühlphase) und beschleunigen die Benchmarks baut. Er bietet auch Drosselungserkennung, selbst wenn die Uhren (wenn die Sperre zu hoch für das physische Umgebung). (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)

  • Filtern Sie Regeln für Basisprofile nach Android 9 (SDK 28). 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
  • Umbenannt FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi, um zu verdeutlichen, dass dies die Dauer, nicht die Zeitstempel und der Abgleich von Präfixen sind. (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

  • MicroBenchmark-Stack-Stichproben / Profil für Methoden-Tracing Ergebnisse werden jetzt in der Studio-Ausgabe, ähnlich wie bei anderen Profilerstellungsausgaben, verknüpft und unterdrücken nicht die Zuordnungsmesswerts. (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
  • Argument des Basisprofils von CompilationMode.Partial wurde geändert zu Aufzählung zur Verdeutlichung. (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 damit derzeit kein benutzerdefiniertes Tracing (über die android.os.Trace oder androidx.tracing Jetpack API) erfasst wird, um Auswirkungen auf die Ergebnisse zu vermeiden. Diese Nachverfolgung sollte bei der Diagnose instabil 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

  • Experimentelles TraceSectionMetric für benutzerdefiniertes Trace-basiertes Zeitmessungen zu verwenden. (I99db1, b/204572664)

Fehlerkorrekturen

  • Beenden Sie bei jedem Durchlauf den Ruhemodus des Geräts, damit die Benutzeroberfläche getestet werden kann: erfordert, dass der Sperrbildschirm deaktiviert ist. (Ibfa28, b/180963442)
  • Behebung mehrerer Abstürze im StackSampling-Profilerstellungsmodus bei Emulatoren und nicht gerootete Geräte (Icdbda, b/202719335)
  • Entfernung von 0,5 Sekunden Ruhezustand am Ende jeder Iteration – wenn Sollten aufgrund dieser Änderung Messwerte fehlen, melden Sie den 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)
  • Aktualisierte Implementierungen von Startmesswerten, die immer am Ende enden Ende des Renderingthreads. Das wird auf allen Plattformen einheitlicher sein. und den In-App-Messungen besser zuordnen. (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)
  • Die hinzugefügte Oberflächenvariante „measureRepeated“ wird entfernt für Java-Caller, da dies zu Unklarheiten bei der Durchführung/Lösung des . Java-Aufrufer müssen wieder Unit.Instance von "measureRepeated" verwendet. Wenn Ihnen dies Unannehmlichkeiten bereitet, melden Sie uns bitte den Fehler. Wir können wir das in einer zukünftigen Version noch einmal durchgehen. (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. Dieses Bei der neuen Implementierung wird auch reportFullyDrawn() besser verarbeitet, bis die entsprechenden Inhalte gerendert wurden. (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. Dadurch wird wahrscheinlich die Meldung „Messwerte können nicht gelesen werden“ während der Benchmark“ Ausnahmen, 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 Messwerts als Stichproben zur UI- und JSON-Ausgabe mit Schwerpunkt auf Perzentile mehrerer Stichproben pro Iteration. (I56247, b/199940612)
  • Während der Benchmark zu Gleitkommamesswerten wechseln Bibliotheken (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-Ebene 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

  • Ab API 29 wurde zu Simpleperf als Standard-Profiler für die Stichprobenerhebung gewechselt. (Ic4b34, b/158303822)

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 geändert, um den Start über am start aufzurufen, wodurch Messdurchlauf um ca. 5 Sekunden verstreichen lassen, was zulasten einer fehlenden Unterstützung Intent-Parcelables. (I5a6f5, b/192009149

Fehlerkorrekturen

  • Die Aggressivität der Erkennung von Temperaturdrosselung reduzieren und die Referenz neu zu berechnen, wenn häufig Drosselungen 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 "completeDrawnMs" aus. Messwert um die Zeit zu messen, die noch dauert, bis Ihre Anwendung das Rendering abgeschlossen hat. Bis Wenn Sie diesen Messwert für Ihre App definieren, rufen Sie Activity.reportFullyDrawn auf, wenn Ihre ersten Inhalte fertig sind, z. B. wenn Ihre ersten Listenelemente aus der Datenbank oder dem Netzwerk geladen. (Die Methode „reportFullyDrawn“ ist verfügbar. ohne Build-Versionsüberprüfung für ComponentActivity). Der Test muss lange genug laufen, 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 Durch die Nachverfolgung lassen sich z.B. Start-up-Benchmark-Laufzeit um 30+% (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)
  • Problem mit Logcat-Warnung zum Drucken von Bibliotheken behoben, die nicht gefunden werden JIT-Thread auf Plattformversionen, in denen er nicht vorhanden ist. (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 Aufwärmphase und Zeitplan 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 > Öffnen.
  • Das Benchmark-Gradle-Plug-in bietet jetzt Standardeinstellungen, um die Einrichtung zu vereinfachen: <ph type="x-smartling-placeholder">
      </ph>
    • 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 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 Messwertinstabilität behoben, durch das 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 <ph type="x-smartling-placeholder">
      </ph>
    • 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 <ph type="x-smartling-placeholder">
      </ph>
    • 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) <ph type="x-smartling-placeholder">
      </ph>
    • „Probelauf“ hinzugefügt Modus, um jede Benchmark-Schleife nur einmal auszuführen, um nach Fehlern/Abstürzen zu suchen, ohne Messungen zu erfassen. Dies kann beispielsweise nützlich sein, können Sie beispielsweise 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). <ph type="x-smartling-placeholder">
      </ph>
    • 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). <ph type="x-smartling-placeholder">
      </ph>
    • 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 veröffentlicht. Die 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: einmal in der Version stabil (mit sehr seltenen Ausnahmen) Beta und behoben, wobei Nebenversionen nur ergänzt und Änderungen/Entfernungen in Haupt-Releases.

API-Änderungen

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

    • Die Struktur des Ergebnisobjekts wurde neu organisiert, um zusätzliche Messwertgruppen zu unterstützen. in der Zukunft (b/132713021)
    • Kontextinformationen zum Testlauf wurden hinzugefügt, z. B. Geräte- und Build-Informationen und ob Uhren gesperrt sind, an das Objekt der obersten Ebene (b/132711920)
    • Zeitmesswertnamen enthalten jetzt „ns“. (b/132714527)
    • Zusätzliche Statistiken pro gemeldetem Messwert (Maximum, Medianwert, Minimum) und Vereinfachte "Nanos" entfernt zusammenfassende Statistik (b/132713851)
  • XML-Ausgabe entfernt (b/132714414)

  • Erkennung der thermischen Drosselung aus der BenchmarkState.reportData API entfernt (b/132887006)

Fehlerkorrekturen

  • Problem behoben: ./gradlew lockClocks kleben auf einigen neueren Betriebssystemgeräten nicht (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. Enthaltene Commits in dieser Version verfügbar sind, hier.