Benchmark

Sie können die Leistung Ihres Codes in Android Studio genau messen.
Letzte Aktualisierung Stabile Version Release Candidate Beta-Ausgabe Alphaversion
11. Dezember 2024 1.3.3 - - 1.4.0-alpha06

Abhängigkeiten deklarieren

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

Makrobenchmark

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

Cool

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

Kotlin

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

Mikrobenchmark

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

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

Ihr Feedback hilft uns, Jetpack zu verbessern. Bitte teilen Sie uns mit, wenn Sie neue Probleme feststellen oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können einem vorhandenen Problem Ihre Stimme geben, indem Sie auf die Schaltfläche mit dem Stern klicken.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 1.4

Version 1.4.0-alpha06

11. Dezember 2024

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

API-Änderungen

  • Die Verwendung von @Language("sql") in PerfettoTraceProcessor.Session.query() wurde entfernt, da die Hervorhebung/das Parsen in Studio nicht funktioniert. (Idc2fa, b/377733398)

Fehlerkorrekturen

  • Diese Bibliothek verwendet jetzt JSpecify-Null-Anmerkungen, die sich auf den Typ beziehen. Kotlin-Entwickler sollten die folgenden Compilerargumente verwenden, um die korrekte Verwendung zu erzwingen: -Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode (I46810, b/326456246)
  • ArtMetric wurde korrigiert, um die Klassenladezeit (nicht die Initialisierung) zu erfassen. Außerdem wurden die Dokumente verbessert, um das Laufzeitverhalten zu verdeutlichen. (I9915c)
  • Führen Sie unter Android Multiuser Befehle nur als Root auf gerooteten Geräten aus. (I88b44)

Version 1.4.0-alpha05

13. November 2024

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

Fehlerkorrekturen

  • Es wurde ein Problem in API 34 und höher behoben, bei dem CompilationMode.None() eine inkonsistente Leistung aufwies, die nicht repräsentativ für die anfängliche Worst-Case-Leistung war. Dadurch wird eine Plattformänderung umgangen, durch die Apps kurz nach dem ersten Start teilweise (nur das Laden von Klassen betreffend) im ART-Kompilierungsstatus verify kompiliert werden. (Ie48d0)
  • Problem behoben, bei dem (insbesondere kurze) Protokolle erfasst werden konnten, für die keine Messungen aus den integrierten Macrobenchmark-Messwerten erfasst wurden, da der Prozessname im Perfetto-Protokoll abgeschnitten wurde. Jetzt wird dieses Problem in macrobenchmark umgangen, indem in allen vordefinierten Abfragen zusätzlich zum erwarteten Paketnamen auch nach dem abgeschnittenen Paketnamen gesucht wird. Hinweis: Bei benutzerdefinierten TraceMetric-Implementierungen oder anderen direkten Aufrufern von PerfettoSession.query kann dieses Verhalten ebenfalls implementiert werden, indem process.name LIKE "$packageName" in einer Perfetto-Abfrage durch (process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))") ersetzt wird. (I5bf01, b/377565760)

Version 1.4.0-alpha04

30. Oktober 2024

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

Neue Funktionen

  • (Experimentell) Generierung von Baseline-Profilen und Benchmarking für Apps aktivieren, die für einen sekundären Nutzer installiert wurden, z. B. für Apps auf headless Android Auto-Geräten. Diese Unterstützung wurde in einigen Szenarien getestet. Falls sie bei dir nicht funktioniert, melde bitte einen Fehler. (I9fcbe, b/356684617, b/373641155)

Fehlerkorrekturen

  • isProfileable wird jetzt immer in Benchmark-Builds überschrieben und isDebuggable wird jetzt immer sowohl in Benchmark- als auch in nonMinified-Builds (Erfassung des Baseline-Profils) überschrieben. (I487fa, b/369213505)
  • Behebung eines Fehlers bei der Kompilierungserkennung auf einigen physischen Geräten vor API 28. Betrifft JSON context.compilationMode und das Verhalten von androidx.benchmark.requireAot=true (wird nicht mehr fälschlicherweise ausgelöst) (Ic3e08, b/374362482)
  • Bei CpuEventCounter-Messwerten wird eine Ausnahme ausgelöst, wenn ungültige Messungen festgestellt werden (z.B. instructions/cpucycles==0) (I8c503)

Version 1.4.0-alpha03

16. Oktober 2024

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

API-Änderungen

  • Makrobenchmark: Hier wird ArtMetric hinzugefügt, mit dem sich die Abdeckung des Profils oder die allgemeine Leistung der Android-Laufzeit prüfen lässt. Hier werden die Anzahl und die Gesamtdauer der JIT-Ausführung, die Kursinitialisierung (sofern verfügbar) und die Kursüberprüfung erfasst. Außerdem wird CaptureInfo so geändert, dass die optionale ART-Hauptversion in die Standardversion aufgenommen wird. (I930f7)
  • Fügen Sie der JSON-Ausgabe des Benchmarks coefficientOfVariation hinzu, um die Stabilität innerhalb eines bestimmten Benchmarklaufs anzuzeigen. (Ib14ea)

Fehlerkorrekturen

  • CollectBaselineProfileTask wurde korrigiert, wenn das AVD-Gerät Leerzeichen enthält. (Ia0225, b/371642809)
  • Spekulative Fehlerbehebung für StartupMode.COLD-Ausnahmen: Package <packagename> must not be running prior to cold start!. Jetzt wartet MacrobenchmarkScope.killProcess() (einschließlich der Funktion, die vor jeder Iteration ausgeführt wird, um das Verhalten von StartupMode.COLD zu implementieren) darauf, dass alle Prozesse der App beendet wurden. (I60aa6, b/351582215)
  • Behoben: Bei einigen gerooteten Emulatoren wurde der Fehler UNLOCKED_ angezeigt. (Ic5117)
  • Diese Bibliothek verwendet jetzt JSpecify-Null-Anmerkungen, die sich auf den Typ beziehen. Kotlin-Entwickler sollten die folgenden Compilerargumente verwenden, um die korrekte Verwendung zu erzwingen: -Xjspecify-annotations=strict, -Xtype-enhancement-improvements-strict-mode (I7104f, b/326456246)

Version 1.4.0-alpha02

2. Oktober 2024

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

API-Änderungen

  • Die Gradle-Aufgaben lockClocks und unlockClocks wurden in Benchmark-Projekte verschoben, anstatt auf oberster Ebene verfügbar zu sein. Diese Änderung war erforderlich, da es leider keine Möglichkeit gibt, diese als Aktionen der obersten Ebene zu registrieren, ohne die Projektisolierung zu brechen. (I02b8f, b/363325823)

Fehlerkorrekturen

  • BaselineProfileRule erfasst jetzt Profile für Apps mit mehreren Prozessen, indem am Ende des Blocks jedem laufenden Prozess signalisiert wird, Profile zu erstellen. Wenn bei einer profilbasierten Zusammenstellung nie ein Prozess gefunden wird, an den gesendet werden soll, schlägt die Zusammenstellung fehl, da Profilen keine Daten zugewiesen werden dürfen. Außerdem wurde ein Instrumentierungsargument hinzugefügt, um die Wartezeit für Dumps zu steuern: androidx.benchmark.saveProfileWaitMillis (I0f519, b/366231469)
  • Von Benchmark 1.3.2: Es wurde behoben, dass Firebase Test Lab (FTL) keine Ergebnisdateien für Baseline-Profile oder Makrobenchmarks aus dem Gradle-Plug-in für Baseline-Profile abrufen konnte. (I2f678, b/285187547)

Wenn Sie FTL verwenden möchten, wenden Sie das Plug-in auf das Modul „Baseline-Profil“ im Plug-in-Block an. Verwenden Sie dazu Folgendes:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

Konfigurieren Sie dann Firebase Test Lab mit:

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

Außerdem muss das erstellte FTL-Gerät der Baseline-Profilerweiterung hinzugefügt werden:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

Version 1.4.0-alpha01

18. September 2024

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

Neue Funktion: Statistiken zum App-Start

  • Die erste Version der Statistiken zum App-Start kann in Macrobenchmark aktiviert werden. (09fae38)

So aktivieren Sie die Funktion in einem Start-Benchmark:

  @Test
  fun startup {
      macrobenchmarkRule.measureRepeated(
          
          packageName = "com.example.my.application.id"
          metrics = listOf(StartupTimingMetric()),
          iterations = 5,
          startupMode = StartupMode.COLD,
          compilationMode = CompilationMode.None(),
          experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
          ) {
          scope.startActivityAndWait(...)
      }
  }

Wenn Sie dann den Start-Benchmark ausführen, wird der Ablauf nach gängigen Problemen durchsucht und die Ergebnisse werden nach den Messwerten in der Studio-Testausgabe auf dem Tab „Benchmark“ ausgegeben, z.B.:

StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│   ├──   timeToFullDisplayMs                min  1,147.2,   median  1,208.8,   max  1,307.4
│   └──   timeToInitialDisplayMs             min  1,147.2,   median  1,208.8,   max  1,307.4
├── App Startup Insights
│   ├── App in debuggable mode (expected: false)
│   │   └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│   ├── Potential CPU contention with another process (expected: < 100000000ns)
│   │   └── seen in iterations: 4(105022546ns)
│   └── Main Thread - Binder transactions blocked (expected: false)
│       └── seen in iterations: 7(true)
└── Traces
    └── Iteration 0 1 2 3 4 5 6 7 8 9

Diese Funktion befindet sich noch in der Entwicklungsphase. Verbesserungen an der Dokumentation und der Erweiterbarkeit sind geplant. Wir freuen uns aber über Feedback.

Neue Funktionen

  • Die Gradle-Property androidx.baselineprofile.suppressWarnings wurde hinzugefügt, um alle Warnungen zu Referenzprofilen zu unterdrücken. (314153a)
  • Microbench-Messwerte werden jetzt in Perfetto-Traces als Zähler angezeigt. (3214854)
  • Fügen Sie experimentelle Scripts zum Deaktivieren von JIT hinzu (erfordert Root-Zugriff / Neustart der Laufzeit) und zum Zurücksetzen des Geräteleistungs-/Teststatus. Diese werden derzeit nicht als Gradle-Aufgaben veröffentlicht. (7c3732b)
  • Es wurde ein Benchmark-Argument hinzugefügt, um Tests beim Ausführen im Emulator zu überspringen. Wenn die automaticGenerationDuring-Build-Funktion aktiviert ist, wird durch Benchmarks auch die Generierung eines Baseline-Profils ausgelöst. Dies funktioniert nicht, wenn Emulatoren verwendet werden. Mit dem neuen Argument skipBenchmarksOnEmulator können wir den Test stattdessen überspringen. (0c2ddcd)
  • Logik zum Aktivieren von Leistungsereignissen für API 23 und höher ändern (2550048)

API-Änderungen

  • Das vorhandene experimentelle PerfettoConfig-Argument für MacrobenchmarkRule.measureRepeated() wurde in das neue ExperimentalConfig-Objekt verschoben.

Fehlerkorrekturen

  • Anzahl der Wiederholungsversuche für lockClocks.sh erhöhen (99e9dac)
  • Erstellen Sie keine nonMinified- und Benchmark-Buildtypen, falls sie bereits vorhanden sind. Aufgrund eines Fehlers wurden nonMinified- und Benchmark-Buildtypen auch dann neu erstellt, wenn sie bereits vorhanden waren. (e75f0a5)
  • Ignorieren Sie nicht endende Segmente aus den TraceSectionMetric-Ergebnissen. (a927d20)
  • Die Emulatorprüfung wurde verbessert, um das Präfix sdk_ zu berücksichtigen. (1587de8)
  • Nicht laufende Pakete in FrameTimingGfxInfoMetric als gelöscht behandeln (35cc79c)
  • Korrektur von androidx.benchmark.cpuEventCounter, durch die fehlerhafte Werte für andere Ereignisse als Anweisungsereignisse verursacht wurden (06edd59)
  • resumeTiming/runWithTimingDisabled wurde so korrigiert, dass die Prioritätsreihenfolge der Messwerte berücksichtigt wird. Außerdem wurde die Auswirkung der Pausierung/Fortsetzung von Messwerten mit niedrigerer Priorität auf die Ergebnisse von Messwerten mit höherer Priorität deutlich reduziert. Wenn Sie beispielsweise CPU-Leistungszähler über das Instrumentierungsargument cpuEventCounter.enable verwenden, wird „timeNs“ bei Pausieren/Fortsetzen nicht mehr deutlich reduziert. (5de0968)

Version 1.3

Version 1.3.3

16. Oktober 2024

androidx.benchmark:benchmark-*:1.3.3 wird veröffentlicht. Version 1.3.3 enthält diese Commits.

Fehlerkorrekturen

  • Problem mit CollectBaselineProfileTask behoben, wenn AVD-Gerät Leerzeichen enthält (Ia0225, b/371642809)

Version 1.3.2

2. Oktober 2024

androidx.benchmark:benchmark-*:1.3.2 wird veröffentlicht. Version 1.3.2 enthält diese Commits.

Fehlerkorrekturen

  • Behoben wurde ein Problem, bei dem in Firebase Test Lab (FTL) keine Ergebnisdateien für Baseline-Profile oder Makrobenchmarks aus dem Gradle-Plug-in für Baseline-Profile abgerufen werden konnten. (I2f678, b/285187547)

Wenn Sie FTL verwenden möchten, wenden Sie das Plug-in auf das Modul „Baseline-Profil“ im Plug-in-Block an. Verwenden Sie dazu Folgendes:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

Konfigurieren Sie dann Firebase Test Lab mit:

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

Außerdem muss das erstellte FTL-Gerät der Baseline-Profilerweiterung hinzugefügt werden:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

Version 1.3.1

18. September 2024

androidx.benchmark:benchmark-*:1.3.1 wird veröffentlicht. Version 1.3.1 enthält diese Commits.

Fehlerkorrekturen

  • Die Gradle-Eigenschaft androidx.baselineprofile.suppressWarnings wurde hinzugefügt, um alle Warnungen für das Baseline-Profil zu unterdrücken (I7c36e, b/349646646)
  • Das Gradle-Plug-in für das Baseline-Profil wurde so geändert, dass vorhandene nonMinified… und benchmark… verwendet werden, wenn sie von der App erstellt wurden, anstatt Wrapper zu erstellen. (Ia8934, b/361370179)
  • Fehlerbehebung bei java.lang.AssertionError: ERRORS (not suppressed): EMULATOR, wenn automaticGenerationDuringBuild in Emulatoren aktiviert ist. Mit dem neuen Argument wird der Test stattdessen übersprungen. (If3f51, b/355515798)
  • Minimierung von Mikrobenchmarks – Unterklassen von org.junit.runner.notification.RunListener in der Benchmark-Bibliothek Proguard beibehalten (Ic8ed5, b/354264743)
  • Korrigieren Sie TraceSectionMetric in „Nicht endende Segmente ignorieren“. Bisher wurde für diese Elemente eine Dauer von -1 angenommen, z.B. bei der Addition oder beim Berechnen der Mindestdauer. (If74b7)
  • Ein Problem in FrameTimingGfxInfoMetric wurde behoben, bei dem der Messwert beim Starten abstürzte, wenn der Prozess noch nicht ausgeführt wurde. (I6e412)

Version 1.3.0

21. August 2024

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

Änderungen an den Mikrobenchmarks seit Version 1.2.0

  • Das Methoden-Tracing ist in Mikrobenchmarks standardmäßig aktiviert, wenn sie auf den meisten Geräten ausgeführt werden.
    • Die Methode wird in einer separaten Phase nach den Messungen gefolgt. So können aus einem einzigen Benchmarklauf sowohl genaue Messungen als auch Methodenaufzeichnungen ausgegeben werden.
    • Die Methode „Method Tracing“ bei einigen Android-Betriebssystemen und ART-Versionen wirkt sich auf spätere Analysephasen aus. Bei diesen Versionen ist die Methode standardmäßig deaktiviert und eine Warnung wird in der Studio-Ausgabe ausgegeben.
  • Benchmarks für den Hauptthread und ANRs
    • measureRepeatedOnMainThread wurde für UI-Thread-Benchmarks hinzugefügt (z.B. für solche, die mit Compose-/View-UIs interagieren), um ANRs bei einer Ausführung über mehrere Sekunden zu vermeiden.
    • Methoden-Traces werden übersprungen, wenn sie voraussichtlich die Frist für die Vermeidung von ANRs überschreiten. Legen Sie androidx.benchmark.profiling.skipWhenDurationRisksAnr auf „false“ fest, um dieses Verhalten zu deaktivieren. Dies wird für CI-Ausführungen nicht empfohlen, da ANRs bei langen CI-Ausführungen zu Problemen führen können.
  • Minimierung
    • Eingebettete ProGuard-Regeln zur Verbesserung des Mikrobenchmarkings bei aktivierter Minimierung
    • Für die Minimierung/R8 in einem Bibliotheksmodul ist AGP 8.3 erforderlich. Sie kann über android.buildTypes.release.androidTest.enableMinification in build.gradle aktiviert werden.
    • Es wurde eine experimentelle BlackHole.consume() API hinzugefügt, um die Beseitigung von Totcode zu verhindern (If6812, b/286091643)
  • Messwerte
    • Experimentelle CPU-Ereigniszählerfunktion (Messwerte von perf_event_open, für die auf den meisten Versionen der Plattform Root-Zugriff erforderlich ist), Zugriff über InstrumentationArgument androidx.benchmark.cpuEventCounter.enable (kann auf true festgelegt werden) und androidx.benchmark.cpuEventCounter.events kann z. B. auf (Instructions,CpuCycles) festgelegt werden. Diese Funktion sollte auf einigen Userdebug-Emulatoren unterstützt werden, aber der Support wurde nicht auf allen verfügbaren Emulatoren getestet.

Änderungen am MACRObenchmark seit Version 1.2.0

  • Überarbeitung des Methoden-Tracings für Makrobenchmarks.
    • Jetzt sind Methodenaufzeichnungen 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 und es wurden keine Daten für measureBlocks erfasst, bei denen der Zielprozess nicht neu gestartet wurde.
    • Feste Methoden-Traces werden im Makro-Benchmark gelöscht, sodass Methoden-Traces auch auf langsameren Geräten vollständig erfasst und gültig sein sollten. (I6349a, b/329904950)
  • Das ART-Profil wird während einzelner warmUp-Iterationen korrekt gedumpt, wenn der Prozess beendet wird, damit die CompilationMode.Partial(warmup=N)-Messungen genauer sind. (I17923)
  • Fehlermeldung beim Senden von Drop-Shadern
    • Vorschläge zur Fehlerbehebung bei der Fehlermeldung „Shader-Übertragung fehlgeschlagen“ hinzugefügt
    • Fügen Sie zwei Instrumentierungsargumente hinzu, um das Verhalten beim Auslagern von Shadern zu überschreiben und Abstürze beim Benchmarking von Apps ohne ProfileInstaller 1.3 zu vermeiden:
      • androidx.benchmark.dropShaders.enable=true/false : Kann verwendet werden, um alle Shader-Drops zu überspringen (auch bei StartupMode.Cold-Starts), insbesondere beim Benchmarking von Apps, die noch nicht ProfileInstaller 1.3 verwenden.
      • androidx.benchmark.dropShaders.throwOnFailure=true/false : Kann verwendet werden, um Fehler beim Ablegen von Shadern zu tolerieren, z. B. beim Benchmarking von Apps ohne Profileinstaller 1.3 (I4f573)
  • Es wurde eine experimentelle MacrobenchmarkRule#measureRepeated-Variante hinzugefügt, die eine benutzerdefinierte PerfettoConfig für die vollständige benutzerdefinierte Perfetto-Sitzungsaufzeichnung verwendet. Hinweis: Falsch konfigurierte Konfigurationen können dazu führen, dass integrierte Messklassen fehlschlagen. (Idfd3d, b/309841164, b/304038384)
  • Brechen Sie DeXopt-Jobs im Hintergrund ab, bevor Sie einen Makro-Benchmark ausführen, um Störungen zu vermeiden. (I989ed)
  • Der Makrobenchmark wartet jetzt 1 Sekunde, bis die Zielanwendung ein ART-Profil leerte (früher 500 ms). (I85a50, b/316082056)
  • Überarbeitung von TraceSectionMetric
    • Hinweis: Die folgenden TraceSectionMetric-Änderungen können sich auf die Ausgabe bei der CI-Nutzung auswirken und zu Unterbrechungen oder einem Abbruch des Parsings führen.
    • „Summe“ ist jetzt der Standardwert, da dieser Messwert am häufigsten für wiederholte Ereignisse verwendet wird und in diesen Fällen zuerst Daten verworfen würden.
    • Die Funktion wurde angepasst, um sie besser anpassbar zu machen. Es stehen jetzt mehr Modi zur Verfügung.
    • Modusnamen sind jetzt in den Messwertausgabenamen eingebettet (in Studio und JSON)
    • Unterstützt jetzt mit Trace.{begin|end}AsyncSection erstellte Scheiben.
  • Messwerte
    • Energiesparmodus: PowerMetric.deviceSupportsHighPrecisionTracking, PowerMetric.deviceBatteryHasMinimumCharge() und PowerMetric.deviceSupportsPowerEnergy() wurden hinzugefügt
    • Metric.getResult in getMeasurements umbenannt, um dem Rückgabetyp zu entsprechen
    • Allen Starterkennungsfehlern wurden log.w-/Ausnahmelabels hinzugefügt. Das ändert nichts am aktuellen Verhalten (einige Fehler werden also geworfen, andere werden bei der Starterkennung stummgeschaltet), sondern macht es nur verständlicher. In der Regel sind das diejenigen, bei denen Log.w() und keine Startmesswerte erfasst werden. Es werden Ausnahmen geworfen, wenn der Start erkannt wird, mit Ausnahme von Informationen zur Frame-Zeit (aus UI-/RT-Scheiben). (Id240f, b/329145809)
    • Der Messwert frameCount wurde zu FrameTimingMetric hinzugefügt, um Szenarien zu erkennen, in denen sich Messwerte ändern, weil sich die Anzahl der generierten Frames geändert hat (neue Animationen hinzugefügt, Fehler bei der Ungültigkeit behoben). (I1e5aa)
    • Es wurde erläutert, warum frameOverrunMs der bevorzugte Messwert für das Tracking ist, wenn er in Dokumenten verfügbar ist. (I18749, b/329478323)
    • Behoben wurde ein Problem, bei dem nicht abgeschlossene Frames am Anfang und Ende des Tracings zusammengeführt werden konnten, was zu einer falschen Meldung als einzelner extrem langer Frame führte. (I39353, b/322232828)
    • Der FrameTimingMetric-Fehler wurde verbessert, wenn keine Frames erstellt werden. Außerdem wird bei fehlgeschlagenem Parsen von Messwerten immer ein Link zur Fehlerbehebung ausgegeben. (I956b9)
    • Behebung eines Absturzes in FrameTimingMetric, wenn die Frame-ID nicht geparst werden konnte, insbesondere auf bestimmten OEM-Geräten. (Ia24bc, b/303823815, b/306235276)
    • Die Strenge der Prüfungen in FrameMetrics wurde gelockert und Fehlermeldungen wurden detaillierter. (Iadede)

Änderungen bei der Erfassung des Basisprofils und dem 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 mergeArtProfile- und mergeStartupProfile-Aufgaben immer auf die Erstellung des Baseline-Profils warten. (I623d6, b/343086054)
  • Wenn ein Baseline-Profil erfolgreich generiert wurde, wird eine Zusammenfassung der Änderungen ausgegeben (I824c8, b/269484510).
  • DSL hinzugefügt, um Warnungen zu deaktivieren (Ic4deb, b/331237001)
  • Behebung eines Problems, durch das bei deaktiviertem automaticGenerationDuringBuild keine generierten Baseline-Profile für Benchmarks verwendet wurden (Ic144f, b/333024280)
  • Korrektur von BaselineProfile-Überschreibungen von Gradle-Plug-in-Eigenschaften, um die Generierung von Baseline-Profilen und Benchmarking zu ermöglichen, wenn ein nonMinified- oder Benchmark-Buildtyp angepasst wird. (Ib8f05, b/324837887)
  • Behebung eines Problems beim Einfügen von Bibliotheks-Baseline-Profilen in AAR vor AGP 8.3.0-alpha15. (I1d2af, b/313992099)
  • Die Ausgabe-URL für Baseline und Startprofil am Ende der Generierungsaufgabe wurde korrigiert. (I802e5, b/313976958)

Weitere wichtige Änderungen seit Version 1.2.0

  • TraceCapture
    • Der Fehler „EXITCODE 2“ beim Starten von perfetto nach einem Fehler wurde zu einer protokollierten Warnung reduziert.
    • AIDL-Tracing standardmäßig in Benchmarks aktivieren(erfordert API 28) (Ia0af2, b/341852305)
    • Porter-Tag-Verfolgung standardmäßig in Benchmarks aktivieren So werden beispielsweise Wakelock-Tracepoints erfasst. (Icfe44, b/286551983)
    • Das Zeitlimit für den Beginn der Ablaufverfolgung wurde erhöht, um Abstürze beim Starten der Ablaufverfolgung auf langsameren Geräten zu vermeiden (I98841, b/329145808)
    • Es wurden öffentliche APIs für PerfettoTraceProcessor.Session.queryMetrics mit JSON-, textproto- und proto-binären (nicht decodierten) Varianten hinzugefügt. Damit können Sie in TraceProcessor integrierte Messwerte abfragen (I54d7f, b/304038382).
    • Aktivieren Sie den Blockierungsstart im Perfetto-Trace-Eintrag, um das Risiko von fehlenden Daten zu Beginn des Tracings zu verringern. Nur mit API 33 und höher unterstützt. (Ie6e41, b/310760059)
  • JSON-Ausgabe
    • In der JSON-Ausgabe wurden zusätzliche Informationen im Benchmark-Kontext hinzugefügt:
      • context.artMainlineVersion – Ganzzahlversion des Art-Mainline-Moduls (falls auf dem Gerät vorhanden, andernfalls -1)
      • context.build.id – entspricht android.os.Build.ID
      • context.build.version.codename – entspricht android.os.Build.VERSION.CODENAME
      • context.build.version.abbreviatedCodename – entspricht dem ersten Buchstaben des Pre-Release-Codenamens (auch bei Release-Builds) (Ie5020)
    • Der JSON-Ausgabe wurde eine profilerOutput-Liste hinzugefügt, um die Verwendung von Tools für Profiling-Traces (z.B. Perfetto, Methoden-Traces) zu vereinfachen (I05ddd, b/332604449)
    • Es wurde eine Warnung hinzugefügt, wenn der Android Test Orchestrator in Benchmark-Modulen verwendet wird, da dadurch JSON-Ausgabedateien 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 bei der Nachbearbeitung von Dateien zu vermeiden. (I4a5ab)

Version 1.3.0-rc01

7. August 2024

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

Fehlerkorrekturen

  • Behebung eines Problems, durch das androidx.benchmark.cpuEventCounter fehlerhafte Werte für Ereignisse ausgegeben hat, die keine Anweisungen sind (I7386a, b/286306579)
  • resumeTiming/runWithTimingDisabled wurde so angepasst, dass die Prioritätsreihenfolge der Messwerte berücksichtigt wird. Außerdem wurde die Auswirkung der Pausierung/Fortsetzung von Messwerten mit niedrigerer Priorität auf die Ergebnisse von Messwerten mit höherer Priorität deutlich reduziert. Wenn Sie beispielsweise CPU-Leistungszähler über das Instrumentierungsargument cpuEventCounter.enable verwenden, wird „timeNs“ bei Pausieren/Fortsetzen nicht mehr deutlich reduziert. (I39c2e, b/286306579, b/307445225)
  • Durch die Verlagerung der Umwandlung der Stack-Stichprobenerhebung aus dem Haupt-Thread wurde die Wahrscheinlichkeit verringert, dass measureRepeatedOnMainThread die harte Zeitüberschreitung des Haupt-Threads erreicht. (I487a8, b/342237318)
  • Die manuelle Kennzeichnung 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 für alle 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)
  • AGP-Versionsprüfung hinzugefügt, um den Paketnamen als Instruktivitätsargument zu senden. Vor AGP 8.4.0 konnte der Name des Ziel-App-Pakets 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 wird veröffentlicht. Version 1.3.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Beim Starten von Perfetto muss EXITCODE 2 ordnungsgemäß verarbeitet werden, um eine Warnung zu protokollieren, aber fortzufahren.

Version 1.3.0-beta01

12. Juni 2024

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

API-Änderungen

  • MethodTracing.affectsMeasurementOnThisDevice wurde aus Gründen der Einheitlichkeit in AFFECTS_MEASUREMENT_ON_THIS_DEVICE umbenannt. (I1bdfa)
  • Es wurde eine experimentelle BlackHole.consume() API hinzugefügt, um die Beseitigung von Totcode in Mikrobenchmarks zu verhindern. (If6812, b/286091643)
  • Der Microbenchmark wird jetzt korrekt ausgelöst, um zu verhindern, dass das Methoden-Tracing die Messungen beeinträchtigt. Das tritt auf bestimmten Geräten auf, wenn die Methode „Method Tracing“ erzwungen wird (über Instrumentierungsargumente oder MicrobenchmarkConfig) und wenn nach einem Methoden-Trace eine Messung versucht wird. Auf den betroffenen Geräten wird API 26–30 oder eine bestimmte ART-Mainline-Modulversion ausgeführt, die von dieser Störung betroffen ist. Sie können während der Laufzeit über ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice erkannt werden. (Iafb92, b/303660864)

Fehlerkorrekturen

  • Die empfohlene maximale AGP-Version wurde auf 9.0.0-alpha01 erhöht. (I5bbb0)
  • Dem Benchmark-Kontext wurde der Kompilierungsmodus hinzugefügt (If5612, b/325512900)
  • AIDL-Tracing standardmäßig aktivieren (erfordert API 28) (Ia0af2, b/341852305)
  • In der JSON-Ausgabe wurden zusätzliche Informationen im Benchmark-Kontext hinzugefügt:
    • context.artMainlineVersion – Ganzzahlversion des Art-Mainline-Moduls (falls auf dem Gerät vorhanden, andernfalls -1)
    • context.build.id = android.os.Build.ID
    • context.build.version.codename = android.os.Build.VERSION.CODENAME
    • context.build.version.abbreviatedCodename – entspricht dem ersten Buchstaben des Pre-Release-Codenamens (auch bei Release-Builds) (Ie5020)
  • StackSampling berücksichtigt jetzt androidx.benchmark.profiling.sampleDurationSeconds (Ib1d53)
  • Ändern Sie „macro->common dependency“ in „api()“, damit Sie z.B. PerfettoTrace und PerfettoConfig leichter verwenden können. (Icdae3, b/341851833)
  • Achten Sie darauf, dass mergeArtProfile- und mergeStartupProfile-Aufgaben immer auf die Erstellung des Baseline-Profils warten. (I623d6, b/343086054)
  • Berücksichtigen Sie den Aktivierungsstatus der Variante, wenn Sie entscheiden, ob sie aktiviert werden soll. (I5d19e, b/343249144)
  • Das Standard-Zeitlimit für den Start 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 wird veröffentlicht. Version 1.3.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Deutlichere Ausnahme, wenn der Macrobench-Messwert für alle Iterationen Nullwerte zurückgibt (Iab58f, b/314931695)
  • Den ProGuard-Regeln von MicroBench wurden zusätzliche Problemumgehungsregeln hinzugefügt, einschließlich Unterstützung für Listener-Regeln und andere beobachtete Warnungen / Fehler. (I14d8f, b/329126308, b/339085669)
  • Die Methodenaufzeichnung wird während eines Makro-Benchmarks als separate Phase ausgeführt und hat keinen Einfluss mehr auf die Messungen. (If9a50, b/285912360, b/336588271)
  • Zusätzliche Vorschläge zur Fehlerbehebung für die Meldung „Shader-Übertragung fehlgeschlagen“ hinzugefügt. (I5efa6, b/325502725)

Version 1.3.0-alpha04

1. Mai 2024

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

API-Änderungen

  • Es wurde eine experimentelle MacrobenchmarkRule#measureRepeated-Variante hinzugefügt, die eine benutzerdefinierte PerfettoConfig für die vollständige benutzerdefinierte Perfetto-Sitzungsaufzeichnung verwendet. Hinweis: Falsch konfigurierte Konfigurationen können dazu führen, dass integrierte Messklassen fehlschlagen. (Idfd3d, b/309841164, b/304038384)
  • Benennen Sie PowerMetric.deviceSupportsPowerEnergy in PowerMetric.deviceSupportsHighPrecisionTracking um (I5b82f).
  • Die Optionen PowerMetric.deviceBatteryHasMinimumCharge() und PowerMetric.deviceSupportsPowerEnergy() wurden hinzugefügt, um Benchmarks je nach Geräteleistung zu ändern oder zu überspringen. (I6a591, b/322121218)

Fehlerkorrekturen

  • Vergleich mit dem vorherigen Baseline-Profil hinzugefügt (I824c8, b/269484510)
  • DSL hinzugefügt, um Warnungen zu deaktivieren (Ic4deb, b/331237001)
  • Ausnahme für Infoprotokoll geändert, wenn Benchmarkvarianten deaktiviert sind (I8a517, b/332772491)
  • Die Erfassung von Methoden-Traces für einen Makro-Benchmark wird auf die Dauer der tatsächlichen measureBlock() beschränkt. Bisher wurde der Dienst beim Start des Zielprozesses gestartet und unterstützte nur Kaltstarts (Iee85a, b/300651094)
  • Abstürze vermeiden, wenn der Perfetto-Trace-Prozessor langsam startet (I98841, b/329145808)

Version 1.3.0-alpha03

17. April 2024

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

Neue Funktionen

  • Es werden öffentliche API-PerfettoTraceProcessor.Session.queryMetrics-APIs mit JSON-, Textproto- und Proto-Binärvarianten (nicht decodiert) hinzugefügt. Damit können Sie in TraceProcessor integrierte Messwerte abfragen (I54d7f, b/304038382).
  • Der JSON-Ausgabe wurde profilerOutput hinzugefügt, um die Verwendung von Tools für Profiling-Traces (z.B. perfetto, Methoden-Traces) zu vereinfachen. (I05ddd, b/332604449)
  • Der Perfetto-Konfiguration für Benchmarks wurde das Tag „power“ hinzugefügt. So 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 zu verhindern, dass Methodenaufrufe übersprungen werden, wenn die erwartete Dauer zu einem ANR führen kann. Dies wird bei CI-Ausführungen dringend empfohlen.
  • Das experimentelle Inst-Argument androidx.benchmark.profiling.perfCompare.enable wurde hinzugefügt. Legen Sie es auf „wahr“ fest, um die Zeit zwischen Mess- und Profilierungsphase zu vergleichen. Nützlich z.B. zur Bewertung des Overheads des Methoden-Tracings. (I61fb4, b/329146942)

API-Änderungen

  • TraceSectionMetric.Mode in eine versiegelte Klasse geändert, um zukünftige Erweiterungen zu ermöglichen, ohne vollständige Wenn-Beschreibungen zu brechen (I71f7b)
  • TraceSectionMetric.Mode.Average und .Count wurden hinzugefügt und die Argumente wurden neu angeordnet, sodass das häufigste Argument (Modus) in der Argumentliste an erster Stelle steht. Dadurch müssen weniger Parameternamen angegeben werden. (Ibf0b0, b/315830077, b/322167531)
  • Metric.getResult in getMeasurements umbenannt, um dem Rückgabetyp zu entsprechen (I42595)

Fehlerkorrekturen

  • Behebung eines Problems, durch das bei deaktiviertem automaticGenerationDuringBuild keine generierten Baseline-Profile für Benchmarks verwendet wurden (Ic144f, b/333024280)
  • Korrektur von BaselineProfile-Überschreibungen von Gradle-Plug-in-Eigenschaften, um die Generierung von Baseline-Profilen und Benchmarking zu ermöglichen, wenn ein nonMinified- oder Benchmark-Buildtyp angepasst wird. (Ib8f05, b/324837887)
  • Feste Methoden-Traces werden im Makro-Benchmark gelöscht, sodass Methoden-Traces auch auf langsameren Geräten vollständig erfasst und gültig sein sollten. (I6349a, b/329904950)
  • Aktivieren Sie den Blockierungsstart im Perfetto-Trace-Eintrag, um das Risiko von fehlenden Daten zu Beginn des Tracings zu verringern. Nur mit API 33 und höher unterstützt. (Ie6e41, b/310760059)
  • Es wurde eine Warnung hinzugefügt, wenn der Android Test Orchestrator in Benchmark-Modulen verwendet wird, da dadurch JSON-Ausgabedateien pro Modul wiederholt überschrieben werden. (Ia1af6, b/286899049)
  • Tausendertrennzeichen „,“ (Komma) für Einheitlichkeit in der Studio-Ausgabe erzwingen, wobei die Gerätesprache ignoriert wird (I3e921, b/313496656)
  • TraceSectionMetric unterstützt jetzt mit Trace.{begin|end}AsyncSection erstellte Segmente. (I91b32, b/300434906)
  • Allen Starterkennungsfehlern wurden log.w-/Ausnahmelabels hinzugefügt. Das ändert nichts am aktuellen Verhalten (einige Fehler werden also geworfen, andere werden bei der Starterkennung stummgeschaltet), sondern macht es nur verständlicher. In der Regel sind das diejenigen, bei denen Log.w() und keine Startmesswerte erfasst werden. Es werden Ausnahmen geworfen, wenn der Start erkannt wird, mit Ausnahme von Informationen zur Frame-Zeit (aus UI-/RT-Scheiben). (Id240f, b/329145809)
  • Brechen Sie DeXopt-Jobs im Hintergrund ab, bevor Sie einen Makro-Benchmark ausführen, um Störungen zu vermeiden. (I989ed)
  • Der Messwert frameCount wurde zu FrameTimingMetric hinzugefügt, um Szenarien zu erkennen, in denen sich Messwerte ändern, weil sich die Anzahl der generierten Frames geändert hat (neue Animationen hinzugefügt, Fehler bei der Ungültigkeit behoben). (I1e5aa)
  • Es wurde erläutert, warum frameOverrunMs der bevorzugte Messwert für das Tracking ist, wenn er in Dokumenten verfügbar ist. (I18749, b/329478323)

Version 1.3.0-alpha02

20. März 2024

androidx.benchmark:benchmark-*:1.3.0-alpha02 wird 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 befindet sich in der experimentellen Phase und erfordert AGP 8.3 für die Minimierung von Bibliotheksmodultests. Mit den folgenden Anweisungen können Sie die R8-Minimierung/-Optimierung in der 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

  • Die Warnung zur Methodenverfolgung wird jetzt in einer separaten Zeile von der Microbench-Ausgabe angezeigt. (I0455c, b/328308833)

Version 1.3.0-alpha01

21. Februar 2024

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

API-Änderungen

  • Die booleschen MicrobenchmarkConfig-Parameter wurden umbenannt, um das unnötige Wort „sollte“ zu vermeiden (Ia8f00, b/303387299)
  • BenchmarkRule.measureRepeatedOnMainThread wurde hinzugefügt, damit Benchmarks für den Hauptthread (z.B. solche, die sich auf Ansichten oder Compose-UIs beziehen) ANRs vermeiden können, insbesondere bei großen Suiten in der CI. (I5c86d)
  • FrameTimingGfxInfoMetric wurde hinzugefügt, eine experimentelle alternative Implementierung von FrameTimingMetric mit Messungen, die direkt von der Plattform stammen, anstatt aus dem Perfetto-Trace extrahiert zu werden. (I457cb, b/322232828)
  • Es wurde die Möglichkeit hinzugefügt, während einzelner warmUp-Iterationen ein ART-Profil zu erstellen. (I17923)
  • Mehrere Änderungen an der TraceSectionMetric API:
    • Mode.Min, Mode.Max hinzufügen
    • Labelargument hinzufügen, um den Abschnittsnamen als Messwertlabel zu überschreiben
    • Der Ausgabe wurde der Modusname hinzugefügt, um die Bedeutung des Messwerts zu verdeutlichen.
    • Der Standardwert wurde in „Summe“ geändert, da dieser Messwert hauptsächlich für wiederholte Ereignisse verwendet wird. Beachten Sie diese Änderungen bei der Verwendung von Conversion-Interaktionen, da sie zu Unterbrechungen führen oder das Parsen beeinträchtigen können. (Ic1e82, b/301892382, b/301955938)

Fehlerkorrekturen

  • Verbesserte Fehlermeldung im Gradle-Plug-in für das Baseline-Profil, wenn das angegebene verwaltete Gerät nicht vorhanden ist (Idea2b, b/313803289)
  • Fehlerbehebung beim Einfügen von Bibliotheks-Baseline-Profilen in AAR vor AGP 8.3.0-alpha15 (I1d2af, b/313992099)
  • Ausgabe-URL für Baseline- und Startprofil am Ende der Generierungsaufgabe korrigiert (I802e5, b/313976958)
  • Die Zeitüberschreitungen für Datenquellen wurden angepasst, um das Problem mit java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] zu beheben (I8dc7d, b/323601788)
  • Fügen Sie zwei Instrumentierungsargumente hinzu, um das Verhalten beim Auslagern von Shadern zu überschreiben und Abstürze beim Benchmarking von Apps ohne ProfileInstaller 1.3 zu vermeiden:
    • androidx.benchmark.dropShaders.enable=true/false : Kann verwendet werden, um alle Shader-Drops zu überspringen (auch bei StartupMode.Cold-Starts), insbesondere beim Benchmarking von Apps, die noch nicht ProfileInstaller 1.3 verwenden.
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : Kann verwendet werden, um Fehler beim Ablegen von Shadern zu tolerieren, z. B. beim Benchmarking von Apps ohne Profileinstaller 1.3 (I4f573)
  • Überspringen Sie die Methodenaufzeichnung im UI-Thread, wenn sie voraussichtlich länger als einige Sekunden dauert, und bereinigen Sie die Methodenaufzeichnungen, wenn eine Ausnahme geworfen wird. (I6e768)
  • Wird ausgelöst, wenn Dateinamen länger als 200 Zeichen sind, um unklare Abstürze beim Schreiben oder bei der Nachbearbeitung von Dateien zu vermeiden. (I4a5ab)
  • Behoben wurde ein Problem, bei dem nicht abgeschlossene Frames am Anfang und Ende des Tracings miteinander gekoppelt werden konnten, was zu einer falschen Meldung als einzelner extrem langer Frame führte. (I39353, b/322232828)
  • Verwenden Sie --skip verification unter API 30 oder höher, wenn Sie ein Paket unter API 30–33 neu installieren, um ART-Profile in Nutzerbuilds zu löschen. So lassen sich Play Protect-Warnungen umgehen, die bei einigen Geräteklassen zu Fehlern führen. (Ic9e36)
  • Verwenden Sie am force-stop, um Apps zu beenden, die keine System-Apps wie die System-UI oder der Launcher sind. (I5e028)
  • Macrobenchmark wartet jetzt auf 1 second, bis die Zielanwendung ein ART-Profil leerte (früher wurde auf 500 ms gewartet). (I85a50, b/316082056)
  • Der FrameTimingMetric-Fehler wurde verbessert, wenn keine Frames erstellt werden. Außerdem wird bei fehlgeschlagenem Parsen von Messwerten immer ein Link zur Fehlerbehebung ausgegeben. (I956b9)
  • Behebung eines Absturzes in FrameTimingMetric, wenn die Frame-ID nicht geparst werden konnte, insbesondere auf bestimmten OEM-Geräten. (Ia24bc, b/303823815, b/306235276)
  • Die Strenge der Prüfungen in FrameMetrics wurde gelockert und Fehlermeldungen wurden detaillierter. (Iadede)

Version 1.2

Version 1.2.4

17. April 2024

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

Fehlerkorrekturen

  • Das Problem wurde behoben, dass das Srcset des Referenzprofils in Benchmarkvarianten nicht eingerichtet wurde. Außerdem wird automaticGenerationDuringBuild in Bibliotheken korrigiert, die eine zyklische Abhängigkeit verursachen. (I28ab7, b/333024280)
  • Verwenden Sie am force-stop, um Apps zu beenden, die keine System-Apps wie die System-UI oder der Launcher sind. Dadurch werden Abstürze von StartupMode.COLD-Benchmarks behoben, die aufgrund der Meldung „Paket $package darf vor dem Kaltstart nicht ausgeführt werden!“ auftreten, wenn das Beenden des Prozesses nicht vollständig erfolgreich war. (I5e028)

Version 1.2.3

24. Januar 2024

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

Fehlerkorrekturen

  • Ausnahme aus dem Baseline-Profil-Gradle-Plug-in entfernt, wenn die AGP-Version 8.3.0 oder höher ist
  • Behebung eines Problems beim Einfügen von Bibliotheks-Baseline-Profilen in AAR vor AGP 8.3.0-alpha15.

Version 1.2.2

1. Dezember 2023

androidx.benchmark:benchmark-*:1.2.2 wird 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 wird veröffentlicht. Version 1.2.1 enthält diese Commits.

Neue Funktionen

  • Verbesserte Fehlermeldung, wenn Nutzer Testvarianten deaktivieren (b/307478189)
  • Es wurden Properties hinzugefügt, um die Einbindung von AS-Tests zu unterstützen (b/309805233, b/309116324).

Version 1.2.0

18. Oktober 2023

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

Wichtige Änderungen seit Version 1.1.0

Baseline-Profile

  • Das neue Baseline Profile Gradle Plugin automatisiert die Erfassung und Einbindung von Baseline-Profilen in Ihren Test- und Build-Workflow.
  • BaselineProfileRule.collect ist jetzt stabil. Es handelt sich um eine optimierte und vereinfachte Version der vorherigen experimentellen BaselineProfileRule.collectBaselineProfile API.
    • Geben Sie einfach packageName an und steigern Sie die Leistung Ihrer App.
  • Bei Bibliotheken, die Baseline-Profile generieren, können Sie die generierten Regeln jetzt entweder im Code (BaselineProfileRule.collect-Argument) oder noch einfacher im Gradle-Plug-in filtern.
  • Fehlerkorrekturen
    • Korrigierte Erfassung des Baseline-Profils unter Android U und höher (Id1392, b/277645214)

Macrobenchmark

  • Compilation
    • Der Kompilierungsstatus wird bei Macrobenchmark jetzt bei jeder Kompilierung korrekt zurückgesetzt. Unter Android 14 muss das APK neu installiert werden. Daher wird für die Messung von Status (z. B. Nutzeranmeldung) dringend empfohlen, Android 14 oder höher zu verwenden.
    • Sie können das Problem auch umgehen, indem Sie die App-Kompilierung separat steuern und die Kompilierung mit CompilationMode.Ignore() oder dem Instrumentierungsargument überspringen.
  • Argumente für die Instrumentierung

    • Unterstützung für das Instrumentierungsargument androidx.benchmark.dryRunMode.enable (bereits im Mikrobenchmark verfügbar) für schnellere Validierungsläufe (z.B. beim Erstellen des Benchmarks oder vor dem Einreichen)
    • Unterstützung für androidx.benchmark.profiling.mode=StackSampling und MethodTracing.
    • androidx.benchmark.enabledRules wurde hinzugefügt, um die Laufzeitfilterung von Baseline-Profilen und Makrobenchmark-Regeln zu ermöglichen
    • Das Argument androidx.benchmark.perfettoSdkTracing.enable wurde hinzugefügt, um das Tracing mit tracing-perfetto zu aktivieren, z.B. das Compose-Recomposition-Tracing. Hinweis: Bei Verwendung mit StartupMode.COLD wird das Timing erheblich beeinträchtigt, da die Tracing-Bibliothek beim Starten der App geladen und aktiviert wird.
  • Voraussetzungen

    • Für Macrobenchmark ist jetzt ProfileInstaller 1.3.0 oder höher in der Ziel-App erforderlich, um die Profilerfassung/-rücksetzung und das Löschen des Shader-Caches zu aktivieren.
  • Neue experimentelle Metrics APIs

    • Die experimentelle Funktion TraceSectionMetric wurde hinzugefügt, mit der sich einfache Zeitangaben aus trace("") {}-Blöcken in Ihrer App extrahieren lassen. Mit TraceMetric können Sie die vollständigen Abfragefunktionen von Perfetto TraceProcessor nutzen.
    • Die experimentelle Schaltfläche PowerMetric zum Erfassen von Informationen zur Stromnutzung wurde hinzugefügt.
    • Das experimentelle Feld MemoryCountersMetric zum Zählen von Seitenfehlern wurde hinzugefügt.
    • Die experimentelle PerfettoTraceProcessor API wurde hinzugefügt. Sie wird intern verwendet, um Messwerte aus System-Traces (Perfetto-Traces) zu extrahieren.
  • Fehlerkorrekturen

    • Abstürze beim Installieren oder Extrahieren von Profilen aus einer App, die aus mehreren APKs installiert wurde (z.B. aus einem App-Bundle), wurden behoben.
    • Es wurde behoben, dass FrameTimingMetric Frames mit inkonsistenten Frame-IDs ignoriert wurden (in der Regel Frames während von Wellen bei API 31 und höher) (I747d2, b/279088460)
    • Fehler beim Parsen von Protokollen mit mehr als 64 MB behoben (Ief831, b/269949822)
    • Fehler behoben, die auftraten, wenn das Betriebssystem-Image des Geräts (insbesondere des Emulators) nicht richtig für die Ablaufverfolgung oder Kompilierung konfiguriert war
    • Akkustandprüfung für Geräte ohne Akku (Mikro- und Makrogeräte) überspringen
    • Verbesserte Dateiausgabe mit klareren Fehlermeldungen bei ungültigen Ausgabeverzeichnissen und sichereren Standardeinstellungen
    • Verbesserte Stabilität von StartupMode.COLD durch konsequentes Löschen des Shader-Cache (auch über MacrobenchmarkScope.dropShaderCache verfügbar)
    • Leanback-Fallback für startActivityAndWait korrigiert

Mikrobenchmark

  • Funktionen
    • Das Profiling wurde in eine separate Phase nach anderen Messwerten verschoben, sodass in einem Testlauf sowohl genaue Zeitangaben als auch Profiling-Ergebnisse angezeigt werden können.
  • Experimentelle APIs
    • Die experimentelle MicrobenchmarkConfig API zum Definieren benutzerdefinierter Messwerte und Konfigurieren von Tracing und Profiling wurde hinzugefügt. Kann verwendet werden, um Methoden-Traces oder Tracepoints zu erfassen (beachten Sie jedoch den Overhead beim Tracing).
    • Es wurden experimentelle APIs hinzugefügt, mit denen BenchmarkState unabhängig von BenchmarkRule gesteuert werden kann, ohne JUnit.
    • Es wurde ein experimenteller PerfettoTrace-Eintrag hinzugefügt, um Perfetto-Traces mit benutzerdefinierter Konfiguration getrennt von Benchmark-APIs zu erfassen.
  • Fehlerkorrekturen
    • Problembehebung für fehlende anführende Leerzeichen in der Benchmark-Ausgabe von Android Studio
    • Problem behoben, durch das 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.
    • Die Leistung von dryRunMode wurde durch das Überspringen von IsolationActivity und Perfetto-Tracing massiv verbessert (bis zu 10-mal schnellerer Modus für den Trockenlauf bei älteren Betriebssystemversionen).

Version 1.2.0-rc02

6. Oktober 2023

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

Fehlerkorrekturen

  • Die Benchmarkdateiausgabe wurde korrigiert, damit das Kopieren von BaselineProfile-Plug-in-Dateien nicht mehr unterbrochen wird. Die Dateien wurden generiert und vom Gerät kopiert, aber so umbenannt, dass sie vom Gradle-Plug-in nicht erkannt wurden. (I8dbcc, b/303034735, b/296453339)
  • Die tracing-perfetto-Fehlermeldungen beim Laden wurden klarer formuliert, wenn Code aus dem Macrobenchmark-Modul in die Zielanwendung eingefügt wird.

Version 1.2.0-rc01

20. September 2023

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

Fehlerkorrekturen

  • Wenn die Perfetto SDK-Analyse in einem Benchmark nicht initialisiert werden kann, wird jetzt eine Ausnahme mit einer Anleitung zur Behebung des Problems geworfen. (I6c878, b/286228781)
  • Behebung des OOM-Absturzes beim Konvertieren von ART-Methoden-Traces in das perfetto-Format. (I106bd, b/296905344)
  • (Makrobenchmark) Das Label für die Methodenaufzeichnung wurde bei der Verknüpfung in der Studio-Testausgabe klarer formuliert. Außerdem wurden die Dateinamen für die Methodenaufzeichnung so festgelegt, dass sie auf dem Gerät/Host eindeutig sind, damit sie nicht überschrieben werden, wenn mehrere Benchmarks ausgeführt werden. (I08e65, b/285912360)
  • Sorgt dafür, dass das Gerät beim Erfassen eines Baseline-Profils aktiv ist. (I503fc)

Version 1.2.0-beta05

30. August 2023

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

Neue Funktionen

  • Das Baseline Profile Gradle Plugin unterstützt jetzt das Android Gradle Plugin 8.3. (aosp/2715214)

Version 1.2.0-beta04

23. August 2023

androidx.benchmark:benchmark-*:1.2.0-beta04 wird 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 von parametrisierten Tests), indem Sie die Ausgabedateinamen weiter bereinigen und „=“ und „:“ in den Ausgabedateinamen vermeiden. (I759d8)

Version 1.2.0-beta03

9. August 2023

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

API-Änderungen

  • Es wurde ein Argument hinzugefügt, um TraceSectionMetric nur auf das Zielpaket zu filtern. Diese Option ist standardmäßig aktiviert (Ia219b, b/292208786)

Fehlerkorrekturen

  • Das Instrumentierungsargument fullTracing.enable wurde in perfettoSdkTracing.enable umbenannt, um für Konsistenz mit dem Artefaktnamen und anderen Referenzen zu sorgen. fullTracing.enable funktioniert weiterhin als Fallback. (I7cc00)
  • Interne Tracepoints der Benchmark-Bibliothek (einschließlich Microbenchmark-Schleifen-/Phasen-Tracing) werden jetzt im Studio-System-Trace-Viewer angezeigt und in Perfetto unter dem richtigen Prozess verschachtelt. (I6b2e7, b/293510459)
  • Der Fehler „NOT-PROFILEABLE“ bei Macrobenchmark wurde in API 31 und höher entfernt. Außerdem wird die Prüfung, ob ein Gerät für die Profilierung geeignet ist, auf gerooteten Geräten mit eng/userdebug übersprungen. (I2abac, b/291722507)
  • Wenn Sie Dex-Layoutoptimierungen verwenden, werden Startprofilregeln jetzt auch als Baseline-Profilregeln betrachtet. (aosp/2684246, b/293889189)

Version 1.2.0-beta02

26. Juli 2023

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

API-Änderungen

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

Fehlerkorrekturen

  • Fehler in macrobench melden, wenn das Betriebssystem für die Ablaufverfolgung falsch konfiguriert ist. Dieser Fehler wurde kürzlich in den ARM64-Emulatoren der API 26/28 behoben. (I0a328, b/282191686)
  • Es wurde ein Detail zum Fehler beim Zurücksetzen der Kompilierung hinzugefügt, um das Aktualisieren des Emulators vorzuschlagen, da dieses Problem bei einigen Emulatoren vor Kurzem behoben wurde. (I8c815, b/282191686)
  • Machen Sie androidx.test.uiautomator:uiautomator:2.2.0 zu einer api- statt einer implementation-Abhängigkeit. (I1981e)

Version 1.2.0-beta01

18. Juli 2023

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

Fehlerkorrekturen

  • Warnungen, die in der Benchmark-Ausgabe in Studio manchmal unterdrückt wurden, wurden behoben. Außerdem wurde ein Problem behoben, bei dem führende Leerzeichen in der Benchmark-Ausgabe in Studio nicht angezeigt wurden (Ia61d0, b/227205461, b/286306579, b/285912360)
  • Kommentar für FrameTimingMetric 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 wird veröffentlicht. Version 1.2.0-alpha16 enthält diese Commits.

API-Änderungen

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

Fehlerkorrekturen

  • Unterstützung für Makro-Benchmarks für androidx.benchmark.profiling.mode = MethodTracing (I7ad37, b/285912360)
  • Das Mikrobenchmark-Profiling wurde in eine separate Phase verschoben. Es erfolgt also nach der Messung, anstatt sie zu ersetzen. MethodTracing-Trace-Abschnitte sind jetzt auch im erfassten Perfetto-Trace enthalten, sofern vorhanden. (I9f657, b/285014599)
  • Fügen Sie TraceSectionMetric mit Mode.Sum einen Zählwert hinzu. (Ic121a, b/264398606)

Version 1.2.0-alpha15

7. Juni 2023

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

Neue Funktionen

  • Es wurde eine experimentelle MemoryUsageMetric zum Überwachen der Speichernutzung einer Zielanwendung hinzugefügt. (I56453, b/133147125, b/281749311)
  • Unterstützung für vollständig benutzerdefinierte Perfetto-Konfigurationen mit PerfettoTrace.record hinzugefügt (If9d75, b/280460183)
  • Property zum Überspringen der Generierung des Baseline-Profils hinzugefügt. Verwendung: ./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. (I37fda, b/283447020)

API-Änderungen

  • Die collectBaselineProfile API generiert immer stabile Baseline-Profile. Die collectStableBaselineProfile API wurde entfernt und sollte stattdessen durch collectBaselineProfile ersetzt werden. (I17262, b/281078707)
  • Das Argument filterPredicate von BaselineProfileRule wurde in einen nicht-null-Wert mit einem entsprechenden Standardwert geändert, damit das Standardfilterverhalten in den Dokumenten klarer ist. (I3816e)

Fehlerkorrekturen

  • Deaktivieren Sie IsolationActivity und Perfetto-Tracing in dryRunMode, um die Leistung erheblich zu verbessern, da diese Funktionen den Großteil der Laufzeit in Anspruch genommen haben. (Ie4f7d)
  • Unterstützung für Stichprobenerhebungen des Aufrufstacks in Makrobenchmarks mit den Instrumentierungstestargumenten androidx.benchmark.profiling.mode=StackSampling und androidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489)
  • Behebung eines Absturzes beim Setzen von Shadern unter Android U (API 34) und in Emulatoren. (I031ca, b/274314544)

Version 1.2.0-alpha14

3. Mai 2023

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

Fehlerkorrekturen

  • Behebung des Problems, dass FrameTimingMetric Frames mit inkonsistenten Frame-IDs ignoriert. Dies würde dazu führen, dass bei einigen Animationen auf neueren Plattformversionen (API 31 und höher) viele Frames ignoriert werden, während RenderThread animiert wird (z.B. bei einer Wellenbewegung). (I747d2, b/279088460)
  • Das Parsen von Trace-Prozessoren für Traces, die größer als 64 MB sind, wurde korrigiert. (Ief831, b/269949822)
  • Behoben wurde ein Fehler, bei dem die Erstellung des Baseline-Profils auf Android U aufgrund der unterschiedlichen Ausgabe des Befehls pm dump-profiles fehlgeschlagen ist. (Id1392, b/277645214)
  • Script zum Sperren der GPU-Taktfrequenz korrigiert, damit Strings richtig verglichen werden (I53e54, b/213935715)

Version 1.2.0-alpha13

5. April 2023

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

API-Änderungen

  • Beim Generieren von Baseline-Profilen wurde der Parameter „Profiltyp“ hinzugefügt, um die kommende Funktion für Startprofile zu unterstützen (Ie20d7, b/275093123)
  • Es wurde eine neue experimentelle TraceMetric API zum Definieren vollständig benutzerdefinierter Messwerte basierend auf dem Inhalt einer Perfetto-Spur hinzugefügt. (I4ce31, b/219851406)
  • Fügen Sie einen experimentellen Messwert hinzu, um die Anzahl der Seitenfehler während eines Benchmarks zu ermitteln. (I48db0)

Version 1.2.0-alpha12

22. März 2023

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

Neue Funktionen

  • Das neue Gradle-Plug-in für Baseline-Profile wird in der Alphaversion veröffentlicht. Damit lässt sich ein Baseline-Profil einfacher erstellen und der Entwickler-Workflow wird vereinfacht.

API-Änderungen

  • Die Unterstützung für Perfetto-Tracing in API 21 und 22 wurde entfernt. Dazu gehören sowohl Mikrobenchmarks als auch die experimentellen PerfettoTrace APIs. Vor dieser Version waren UiAutomation-Verbindungen auf einigen Geräten nicht zuverlässig. (I78e8c)
  • Es wurde eine öffentliche experimentelle API für PerfettoTraceProcessor hinzugefügt, um das Parsen von Trace-Inhalten zu ermöglichen. Dies ist ein Schritt in Richtung vollständig benutzerdefinierter Messwerte, 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 wird veröffentlicht. Version 1.2.0-alpha11 enthält diese Commits.

Fehlerkorrekturen

  • Abstürze in MacrobenchmarkRule und BaselineProfileRule beim Neuinstallieren oder Extrahieren 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 wird veröffentlicht. Version 1.2.0-alpha10 enthält diese Commits.

Neue Funktionen

  • Unter Android 14 und höher werden Zielanwendungen von Macrobenchmark nicht mehr neu installiert, um den Kompilierungsstatus zurückzusetzen. Das ist dank einer neuen Plattformfunktion möglich. Bisher war es erforderlich, ein gerootetes Gerät zu haben oder vor jedem Benchmark-Lauf den gesamten Anwendungsstatus (z.B. Nutzeranmeldung) zu entfernen. (I9b08c, b/249143766)

Fehlerkorrekturen

  • DryRunMode stürzt nicht mehr ab, wenn das Profil leer ist, weil die Kompilierung übersprungen wird. Stattdessen wird eine einzelne Iteration ausgeführt und das Profil extrahiert, damit etwas erfasst wird. (I2f05d, b/266403227)
  • Behebung des Absturzes von PowerMetric beim Prüfen der Verfügbarkeit von Leistungsstatistiken auf alten API-Ebenen. (5faaf9, b/268253898)

Version 1.2.0-alpha09

11. Januar 2023

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

Fehlerkorrekturen

  • Es ist jetzt möglich, None an das Instrumentierungsargument androidx.benchmark.enabledRules zu übergeben, um die Generierung aller Benchmarks / Referenzprofile zu deaktivieren. (I3d7fd, b/258671856)
  • Behebung eines Problems beim Erfassen von PerfettoTrace in App-Modulen (d.h. nicht selbst instrumentierte Test-APKs) (I12cfc)
  • Die Reihenfolge der ADB-Pull-Argumente für das Baseline-Profil in der Studio-Ausgabe wurde korrigiert (I958d1, b/261781624)
  • Die Arm-Emulator-API 33 wird jetzt beim Ausführen eines Makrobenchmarks korrekt erkannt und die Warnung wird korrekt ausgegeben. (69133b,b/262209591)
  • Akkustandprüfung bei Geräten ohne Akku im Makrobenchmark überspringen (fe4114, b/232448937)

Version 1.2.0-alpha08

7. Dezember 2022

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

API-Änderungen

  • Die experimentellen APIs PerfettoTrace.record {} und PerfettoTraceRule wurden hinzugefügt, um Perfetto-Traces (auch als System-Traces bezeichnet) im Rahmen eines Tests zu erfassen und das Testverhalten und die Leistung zu prüfen. (I3ba16)
  • BaselineProfileRule akzeptiert jetzt ein Filterprädikat anstelle einer Liste von Paketpräfixen. So haben Sie beim Test die volle Kontrolle über das Filtern. (I93240)
  • Fügen Sie eine experimentelle API BaselineProfileRule.collectStableBaselineProfile hinzu, die wartet, bis ein Baseline-Profil für N Iterationen stabil ist. (I923f3)
  • Es ist jetzt möglich, beim Generieren von Baseline-Profilen mit BaselineProfileRule ein Präfix für den Ausgabedateinamen anzugeben. (I7b59f, b/260318655)

Fehlerkorrekturen

  • Die Sicherheit beim Schreiben von Dateiausgaben wurde verbessert, um zu verhindern, dass Ausgabedateien stillschweigend nicht geschrieben oder angehängt werden, insbesondere bei API 21/22. (If8c44, b/227510293)
  • Korrigieren Sie die simpleperf-Trace-Ausgabe, damit die Datei richtig erstellt und platziert wird. Außerdem sollten damit allgemeiner Probleme behoben werden, bei denen eine Datei von gradle nicht erfolgreich abgerufen wird. (I12a1c, b/259424099)
  • Verbesserte Fehlermeldung, die ausgegeben wird, wenn der Profileinstaller zu alt ist. Sie werden jetzt aufgefordert, die Version von „profileinstaller“ (1.2.1) zu aktualisieren, um Baseline-Profile für API 31 bis 33 zu messen, anstatt dass Sie darüber informiert werden, dass die Version nicht unterstützt wird. (Ia517f, b/253519888)
  • Fehler bei Shell-Befehlen behoben, die bei der Fehlermeldung „Print needed API <=23“ auftreten, einschließlich fehlgeschlagener Einrichtung der Perfetto-Capture-Binärdatei und fehlgeschlagener Trace-Aufzeichnungen (Ib6b87, b/258863685)
  • Generierte Profilregeln automatisch sortieren, um die Anzahl der Änderungen zu minimieren, die im Laufe der Zeit auftreten (beim Check-in von Profilregeln in die Versionskontrolle). (Ie2509)
  • Behebung eines Absturzes 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)

Bekannte ProblemeMacrobenchmarkScope.dropShaderCache() kann aufgrund einer fehlenden Registrierung für die Übertragung im Manifest des Profileinstallers abstürzen, das noch nicht veröffentlicht wurde. (I5c728, b/258619948) Um das Problem in profileinstaller:1.3.0-alpha02 zu umgehen, fügen Sie der AndroidManifest.xml Ihrer Anwendung (nicht der des Benchmarks) 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 wird veröffentlicht. Version 1.2.0-alpha07 enthält diese Commits.

API-Änderungen

  • Die PowerMetric API zum Messen von Energie und Leistung in Makrobenchmarks wurde hinzugefügt. (Ife601, b/220183779)
  • MacrobenchmarkScope.dropShaderCache() wurde korrigiert, damit der Shader-Cache tatsächlich gelöscht wird. Dadurch werden etwa 20 ms Rauschen aus StartupMode.COLD-Benchmarks entfernt, da Shader jetzt bei jeder Iteration konsequent gelöscht werden. Bisher wurden bei der Partial-Kompilierung mit Aufwärmiterationen fälschlicherweise zu hohe Werte gemeldet, da das Shader-Caching während des Aufwärmens häufiger vorkam. Für diese Fehlerbehebung ist entweder ein gerootetes Gerät oder die Verwendung von profileinstaller:1.3.0-alpha02 in der Ziel-App erforderlich. Informationen zu den API-Änderungen der ProfileInstaller-Bibliothek finden Sie auf der Seite ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • TraceSectionMode("label", Mode.Sum) wurde hinzugefügt, um die Gesamtzeit zu messen, die in mehreren Trace-Abschnitten mit demselben Label verbracht wurde. Beispiel: TraceSectionMetric("inflate", Mode.Sum) meldet den Messwert inflateMs für die Gesamtzeit in einem Makrobenchmark, die für die Inflation aufgewendet wurde. Außerdem wurde die Anforderung an API 29 entfernt, da TraceSectionMetric mit androidx.tracing.Trace bis hinunter zu niedrigeren API-Levels zusammenarbeitet, wenn forceEnableAppTracing in der Ziel-App verwendet wird. (Id7b68, b/231455742)

Fehlerkorrekturen

  • Die Sicherheit aller internen Shell-Befehle wurde durch Validierung aller Ausgaben/Fehler verbessert. (I5984d, b/255402908, b/253094958)
  • Gerät im adb pull-Befehl des Baseline-Profils angeben, damit der Pull-Befehl einfach kopiert werden kann, wenn mehrere Geräte verbunden sind (bis zu einem Emulator) (I6ac6c, b/223359380)
  • Fehler hinzufügen, wenn die Macrobenchmark-Test-APK nicht als selbst instrumentiert eingerichtet ist Dieser Fehler verhindert das Makrobenchmarking innerhalb des Prozesses der Ziel-App. Während des Prozesses konnte macrobench die App nicht kompilieren/beenden/kalt starten oder seine eigenen Berechtigungen steuern (I4279b)
  • Ein Problem in measureRepeated() wurde behoben, durch das StartupMode.COLD den Zielprozess nach setupBlock nicht beendet hat. Wenn setupBlock jetzt mit der App interagiert, wird der App-Prozess nicht mehr ausgeführt und es wird keine gültige Kaltstartmessung durchgeführt. (I8ebb7)

Version 1.2.0-alpha06

24. Oktober 2022

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

API-Änderungen

  • Für BaselineProfileRule ist unter Android 13 (API 33) keine Root-Berechtigung mehr erforderlich und die API ist nicht mehr experimentell. (Ie0a7d, b/250083467, b/253094958)
    • Durch diese Änderung wird auch behoben, wie Profile von einer App auf nicht gerooteten Geräten auf die Festplatte geschrieben werden. Es ist jedoch erforderlich, die Abhängigkeit des Profileinstallers der Ziel-App zu aktualisieren.
    • Wenn Sie BaselineProfileRule oder CompilationMode.Partial(warmupIterations) auf einem nicht gerooteten Gerät verwenden möchten, müssen Sie auch Ihre Ziel-App auf androidx.profileinstaller.profileinstaller:1.3.0-alpha01 aktualisieren. Dadurch kann das Profil korrekt auf die Festplatte geschrieben werden, damit es kompiliert oder extrahiert werden kann.

Fehlerkorrekturen

  • Behebung des Absturzes von SampledProfiling bei API 33 und höher. (I40743, b/236109374)

Version 1.2.0-alpha05

5. Oktober 2022

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

Fehlerkorrekturen

  • Behebung eines Fehlers bei der Frame-Aufschlüsselung in der Studio-System-Trace-Ansicht für Benchmark-Aufzeichnungen (I3f3ae, b/239677443)
  • Korrigieren Sie FrameTimingMetric, sodass für FrameOverrun API 31 anstelle von 29 erforderlich ist (I716dd, b/220702554)
  • Iteration in BaselineProfileRule festlegen und eine klare Fehlermeldung ausgeben, wenn das Zielpaket nicht installiert ist (wurde bereits für MacrobenchmarkRule gemacht). (Ic09a3, b/227991471)

Version 1.2.0-alpha04

21. September 2022

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

Neue Funktionen

  • Unterstützung für das Instrumentierungsargument dryRunMode.enable für Macrobenchmark hinzufügen (bereits in Micro verfügbar), um die lokale Entwicklung zu beschleunigen und die App-Automatisierung zu validieren (z.B. in presubmit). Dadurch wird die Anzahl der Iterationen auf „1“ überschrieben, die Kompilierung übersprungen, alle Konfigurationsfehler unterdrückt und die Ausgabe der JSON-Datei für die Messung 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

  • Bei StartupTimingMetric ist es nicht mehr erforderlich, dass gemessene Aktivitäten über MacrobenchmarkScope.startActivityAndWait() gestartet werden. Das bedeutet, dass der Messwert beispielsweise Startvorgänge über Benachrichtigungen, Context.startActivity(), die aktivitätsbasierte Navigation in der App oder Shell-Befehle erfassen kann. (Ia2de6, b/245414235)
  • Fehler behoben, bei dem startActivityAndWait bei Emulatoren beim Warten auf den Abschluss des Starts ein Zeitlimit überschreitet, indem die Strenge der Frame-Erkennung verringert wurde. (Ibe2c6, b/244594339, b/228946895)

Version 1.2.0-alpha03

7. September 2022

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

Neue Funktionen

  • Es wurden experimentelle APIs hinzugefügt, mit denen BenchmarkState unabhängig von BenchmarkRule / JUnit4 verwendet werden kann. (Id478f, b/228489614)

Fehlerkorrekturen

Version 1.2.0-alpha02

24. August 2022

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

API-Änderungen

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

Fehlerkorrekturen

  • Unterstützung der Generierung von Baseline-Profilen für System-Apps. (I900b8, b/241214097)
  • Unterstützung der Prüfung von ODPM-Energiemesswerten auf nicht gerooteten Geräten (a38c78, b/229623230)

Version 1.2.0-alpha01

27. Juli 2022

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

Neue Funktionen

  • Neue Komponente „tracing-perfetto-common“, mit der Tools das Perfetto SDK-Tracing in einer App aktivieren können, die es freigibt (I2cc7f)
  • Das Instrumentierungsargument androidx.benchmark.enabledRules wurde hinzugefügt, um Makrobenchmark-Ausführungen auf Benchmarks oder nur auf die Generierung von Baseline-Profilen zu filtern. Geben Sie „Macrobenchmark“ oder „BaselineProfile“ an, um nur einen Testtyp auszuführen, z.B. wenn Sie nur BaselineProfiles in einem Emulator generieren möchten. Durch Kommas getrennte Liste wird ebenfalls unterstützt. (I756b7, b/230371561)

    Beispiel in der build.gradle-Datei Ihres Makrobenchmarks:

    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 zum Messen von Energie- und Leistungsaufgaben in Benchmarks hinzugefügt. (I9f39b, b/220183779)
  • Neuer Kompilierungsmodus CompilationMode.Ignore hinzugefügt, um das Zurücksetzen des Profils und die Kompilierung 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 es Entwicklern, das Gerät zu entladen, um den Stromverbrauch zu messen. (I6a6cb)
  • Es wurde die Möglichkeit hinzugefügt, den Shader-Cache in MacrobenchmarkScope zu löschen. (I32122)
  • Hiermit können Entwickler die Anzeige des Messwerttyps und die gewünschten Untersystemkategorien konfigurieren. (I810c9)
  • Bisher wurde im Benchmark ein UnsupportedOperationException ausgegeben, wenn der Benchmark auf einem nicht unterstützten Gerät ausgeführt wurde. Jetzt tritt der Fehler nur noch auf, wenn der Messwert auf dem nicht unterstützten Gerät verwendet wird (z. B. PowerMetric.configure). (I5cf20, b/227229375)
  • TotalPowerMetric und TotalEnergyMetric wurden hinzugefügt, um die Gesamtleistung und ‑energie in jeder Systemkategorie in Makrobenchmarks zu messen. (I3b26b, b/224557371)

Fehlerkorrekturen

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

Version 1.1.1

Version 1.1.1

9. November 2022

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

Fehlerkorrekturen

  • Behebung von android.system.ErrnoException: open failed: EACCES, die auf einigen Geräten mit Android 11 (API 30) oder höher auftreten. Dies ist eine Auswahl von Fehlerkorrekturen aus 1.2.0-alpha01. (aosp/2072249)

Version 1.1.0

Version 1.1.0

15. Juni 2022

androidx.benchmark:benchmark-*:1.1.0 wird 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 wird veröffentlicht. Version 1.1.0-rc03 enthält diese Commits.

Fehlerkorrekturen

  • Installieren Sie das Zielpaket nicht bei jeder Benchmark-Iteration neu. ( aosp/​​2093027, b/231976084)

  • Entfernen Sie die 300ms-Verzögerung aus pressHome(). (aosp/2086030, b/231322975)

  • Verbessern Sie die Iterationsgeschwindigkeit des Makrobenchmarks, indem Sie die Shell-Befehle optimieren, die im Hintergrund verwendet werden. (aosp/2086023, b/231323582)

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

Version 1.1.0-rc02

11. Mai 2022

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

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

Fehlerkorrekturen/Verhaltensänderungen

  • Ein Problem wurde behoben, durch das die App-Kompilierung zwischen Makrobenchmarks nicht richtig zurückgesetzt wurde und bei nicht gerooteten Builds überhaupt nicht zurückgesetzt wurde. Dadurch werden viele Fälle behoben, in denen mehrere Tests dazu geführt haben, dass CompilationMode nur wenig oder gar keinen Einfluss auf die Messungen hatte. Um dieses Problem zu umgehen, wird in der Ziel-App jetzt jede Testmethode 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 können, ist es jetzt möglich, die Kompilierung / Neuinstallation zu überspringen, um dieses Problem zu umgehen. Sie können beispielsweise das Ziel mit einem Shell-Befehl cmd package compile -f -m speed <package> vollständig kompilieren und dann den Kompilierungsschritt von macrobenchmark überspringen.

    Beispiel in der build.gradle-Datei Ihres Makrobenchmarks:

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

    Oder über die Gradle-Befehlszeile:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • Es ist jetzt möglich, ein Modul für Makrobenchmarks und Tests zur Generierung von Baseline-Profilen zu verwenden. Dazu muss das Instrumentierungsargument androidx.benchmark.enabledRules hinzugefügt werden. Geben Sie „Macrobenchmark“ oder „BaselineProfile“ an, um nur einen Testtyp auszuführen, z.B. wenn Sie BaselineProfiles in einem Emulator generieren. (I756b7, b/230371561)

    Beispiel in der build.gradle-Datei Ihres Makrobenchmarks:

    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 wird veröffentlicht. Version 1.1.0-rc01 enthält diese Commits.

Fehlerkorrekturen

  • Für Links zur Ausgabe von Baseline-Profilen in Android Studio wird jetzt ein eindeutiger Dateiname verwendet. So spiegelt die Ausgabe immer die neuesten Ergebnisse der Verwendung eines BaselineProfileRule wider. ( aosp/2057008, b/228203086 )

Version 1.1.0-beta06

6. April 2022

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

Fehlerkorrekturen

  • Behebung des Absturzes bei der Aufzeichnung von Protokollen in API 21/22 (If7fd6, b/227509388)
  • Die Erkennung des Abschlusses des Aktivitätsstarts wurde überarbeitet, um den Fehler „Keine Messwerte können gelesen werden“ in Makrobenchmarks beim Start zu beheben. (Ia517c)
  • Startmesswerte für Makrobenchmarks bei Verwendung von CompilationMode.None() korrigiert Vor dieser Änderung erschien CompilationMode.Partial() langsamer als Compilation.None(). (611ac9).

Version 1.1.0-beta05

23. März 2022

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

Fehlerkorrekturen

  • Paket beenden, nachdem die Profilinstallation übersprungen wurde, wenn CompilationMode.None verwendet wird (aosp/1991373)
  • Ein Problem wurde behoben, bei dem Macrobenchmarks bei Verwendung vonStartupMode.COLD keine Startmesswerte erfassen konnte. (aosp/2012227 b/218668335)

Version 1.1.0-beta04

23. Februar 2022

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

Fehlerkorrekturen

  • Behebung von fehlenden Messwerten unter Android 10 und NoSuchElementException, die durch nicht korrekt in den Protokollen erfasste Prozessnamen verursacht wurden. (Ib4c17, b/218668335)

  • Verwenden Sie PowerManager für die Erkennung von thermischer Drosselung bei Q (API 29) und höher. Dadurch wird die Häufigkeit von Falschpositiven bei der Erkennung von thermischer Drosselung deutlich reduziert (Benchmark wird nach 90 Sekunden Wartezeit wiederholt) und Benchmarks werden bei Nutzerbuilds deutlich beschleunigt. Außerdem wird die Drosselung auch dann erkannt, wenn Taktfrequenzen gesperrt sind (wenn sie für die Umgebung des Geräts zu hoch eingestellt sind). (I9c027, b/217497678, b/131755853)

  • Filtern Sie das gesamplete Profiling von simpleperf auf den measureRepeated-Thread, um die Prüfung zu vereinfachen (Ic3e12, b/217501939)

  • Unterstützung von Messwerten aus benannten UI-Unterprozessen in mehrstufigen Apps (Ice6c0, b/215988434)

  • Filtern Sie die Regeln für das Baseline-Profil, um sie auf Android 9 (SDK 28) auszurichten. aosp/1980331 b/216508418

  • Profilinstallation bei Verwendung von Compilation.None() überspringen Melden Sie außerdem Warnungen, wenn die App eine ältere Version von androidx.profileinstaller und des Android Gradle-Plug-ins verwendet. aosp/1977029

Version 1.1.0-beta03

9. Februar 2022

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

API-Änderungen

  • AudioUnderrunMetric wurde der Macrobenchmark-Bibliothek mit dem experimentellen Flag hinzugefügt, um Unterbrechungen bei der Audiowiedergabe zu erkennen (Ib5972)
  • Für BaselineProfileRule wird kein setup-Block mehr akzeptiert, da dieser genauso funktioniert wie der profileBlock-Block. (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

  • Das Problem wurde behoben, dass MicroBench-Profiler-Traces bei nachfolgenden Ausführungen nicht aktualisiert wurden, wenn sie in der Studio-Ausgabe verknüpft waren (I5ae4d, b/214917025)
  • Kompilierungs-Shell-Befehle unter API 23 (Ice380) verhindern
  • FrameCpuTime in FrameDurationCpu und FrameUiTime in FrameDurationUi umbenannt, um zu verdeutlichen, dass es sich um Zeiträume und nicht um Zeitstempel handelt, und um die Übereinstimmung mit den Präfixen zu verbessern. (I0eba3, b/216337830)

Version 1.1.0-beta02

26. Januar 2022

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

Fehlerkorrekturen

  • Die Ergebnisse von Microbenchmark-Stack-Sampling-/Method-Tracing-Profilen sind jetzt in der Studio-Ausgabe verknüpft, ähnlich wie andere Profiling-Ausgaben, und der Allokationsmesswert wird nicht unterdrückt. (Idcb65, b/214440748, b/214253245)
  • BaselineProfileRule druckt jetzt den Befehl adb pull in 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 wird veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.

Fehlerkorrekturen

  • Behebung des Problems, dass das Profiler-Argument „enable“ ignoriert wurde. (I37373, b/210619998)
  • Die eingestellte CompliationModes (I98186, b/213467659) wurde entfernt.
  • Das Argument für das Baseline-Profil von CompilationMode.Partial wurde aus Gründen der Übersichtlichkeit in „enum“ geändert. (Id67ea)

Version 1.1.0-alpha13

15. Dezember 2021

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

API-Änderungen

  • Der Microbench-Ausgabe unter Android Q (API 29 und höher) wird jetzt ein System-Tracing mit geringem Overhead hinzugefügt. Derzeit werden damit keine benutzerdefinierten Tracings (über die android.os.Trace- oder androidx.tracing-Jetpack APIs) erfasst, um die Ergebnisse nicht zu beeinflussen. Diese Informationen sollten Ihnen helfen, Instabilitäten zu diagnostizieren, insbesondere solche, die von Quellen außerhalb des Benchmarks stammen. (I298be, b/205636583, b/145598917)
  • Unterteilen Sie CompilationModes in drei Klassen: „Voll“, „Kein“ und „Teilweise“. Bisher wurden sie uneinheitlich nach Kompilierungsargumenten (die wir jetzt als Implementierungsdetails behandeln) und Funktionen benannt. So werden die Vor- und Nachteile, möglichen Kombinationen und das Verhalten auf verschiedenen Plattformversionen klarer. (I3d7bf, b/207132597)
  • Einrichtung und Analyse werden jetzt immer paarweise und in der richtigen Reihenfolge angezeigt. Sie können jetzt den Paketnamen und die Iteration abfragen. In bestimmten Warm-up-Szenarien ist die Iteration jedoch möglicherweise null. (Id3b68, b/208357448, b/208369635)

Fehlerkorrekturen

  • Behoben: CompilationMode.Speed wurde fälschlicherweise als None behandelt (I01137)

Version 1.1.0-alpha12

17. November 2021

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

Neue Funktionen

  • Fügen Sie den experimentellen Messwert „TraceSectionMetric“ für benutzerdefinierte sitzungsbasierte Zeitmessungen hinzu. (I99db1, b/204572664)

Fehlerkorrekturen

  • Gerät bei jeder Iteration aktivieren, damit die Benutzeroberfläche getestet werden kann. Dazu muss der Sperrbildschirm deaktiviert sein. (Ibfa28, b/180963442)
  • Mehrere Abstürze im StackSampling-Profilierungsmodus auf Emulatoren und nicht gerooteten Geräten wurden behoben (Icdbda, b/202719335)
  • Die 0,5-Sekunden-Pause am Ende jeder Iteration wurde entfernt.Wenn Sie nach dieser Änderung fehlende Messwerte sehen, senden Sie bitte einen Fehlerbericht. (Iff6aa)
  • Die Wahrscheinlichkeit von Datenverlusten wird reduziert und der Speicheraufwand durch das Tracing wird gesenkt (Id2544, b/199324831, b/204448861)
  • Durch den Wechsel zum kompakten Speicherformat für den Zeitplan lässt sich die Größe der Protokolle um etwa 40% reduzieren. (Id5fb6, b/199324831)
  • Die Implementierungen der Startmesswerte wurden aktualisiert, sodass sie immer am Ende des Renderthreads enden. So sind die Daten plattformübergreifend konsistenter und stimmen besser mit In-App-Messwerten überein. (Ic6b55)

Version 1.1.0-alpha11

3. November 2021

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

API-Änderungen

  • Der Makro-Benchmark hat jetzt eine minSdkVersion von 23. (If2655)
  • Es wird eine neue experimentelle BaselineProfileRule hinzugefügt, mit der Baseline-Profile für die kritische User Journey der App generiert werden können. Eine detaillierte Dokumentation folgt. (Ibbefa, b/203692160)
  • Die Schnittstellenvariante „measureRepeated“ wurde entfernt, die für Java-Caller hinzugefügt wurde, da sie zu Unklarheiten beim Ausführen/Auflösen der Methode führte. Java-Aufrufer müssen wieder Unit.Instance von measureRepeated zurückgeben. Wenn Sie das als störend empfinden, können Sie einen Fehler melden. Wir werden das in einer zukünftigen Version prüfen. (Ifb23e, b/204331495)

Version 1.1.0-alpha10

27. Oktober 2021

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

API-Änderungen

  • Backport von StartupTimingMetric für API 23. Bei dieser neuen Implementierung wird auch reportFullyDrawn() besser verarbeitet, um zu warten, bis die entsprechenden Inhalte gerendert wurden. (If3ac9, b/183129298)
  • JvmOverloads wurden mehreren MacrobenchmarkScope-Methoden für Java-Caller hinzugefügt. (I644fe, b/184546459)
  • Alternative MacrobenchmarkRule.measureRepeated-Funktion bereitstellen, die für die idiomatische Verwendung in der Java-Sprache ein Consumer<MacrobenchmarkScope> verwendet (If74ab, b/184546459)

Fehlerkorrekturen

  • Fehlerbehebung für nicht früh genug gestartete Traces und fehlende Messwertdaten. Dadurch werden voraussichtlich Ausnahmen vom Typ „Keine Messwerte während des Benchmarks gelesen“ behoben, die von der Bibliothek selbst verursacht wurden. (I6dfcb, b/193827052, b/200302931)
  • „FrameNegativeSlack“ wurde in „FrameOverrun“ umbenannt, um seine Bedeutung zu verdeutlichen: um wie viel der Frame sein Zeitbudget überschritten hat. (I6c2aa, b/203008701)

Version 1.1.0-alpha09

13. Oktober 2021

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

Fehlerkorrekturen

  • Unterstützung für das Löschen des Kernel-Seitencaches ohne Root unter API 31/S und höher, was die Genauigkeit von StartupMode.COLD-Starts erhöht. (Iecfdb, b/200160030)

Version 1.1.0-alpha08

29. September 2021

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

API-Änderungen

  • Scroll-Makrobenachweise aktivieren, um sie bis API 23 auszuführen (If39c2, b/183129298)
  • Benutzeroberfläche und JSON-Ausgabe um einen neuen Typ von Stichprobenmesswert ergänzt, der sich auf die Perzentile mehrerer Stichproben pro Iteration konzentriert. (I56247, b/199940612)
  • In den Benchmark-Bibliotheken zu Gleitkommamesswerten wechseln (in der Studio-Benutzeroberfläche werden sie abgeschnitten). (I69249, b/197008210)

Version 1.1.0-alpha07

1. September 2021

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

API-Änderungen

  • Das 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-Version wird weiterhin über RequiredApi() übermittelt und beträgt derzeit 29 (I440d6, b/183129298).

Fehlerkorrekturen

  • ProfileInstaller wurde verbessert, damit Apps mit Baseline-Profilen Makro-Benchmarks mit CompilationMode.BaselineProfile einfacher ausführen können. (I42657, b/196074999) HINWEIS: Es ist auch eine Aktualisierung auf androidx.profileinstaller:profileinstaller:1.1.0-alpha04 oder höher erforderlich.
  • 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 wird veröffentlicht. Version 1.1.0-alpha06 enthält diese Commits.

API-Änderungen

  • Das Instrumentierungsargument androidx.benchmark.iterations wurde hinzugefügt, um die Iterationszahl beim lokalen Testen/Profilieren manuell zu überschreiben. (6188be, b/194137879)

Fehlerkorrekturen

Bekannte Probleme

  • CompilationMode.BaselineProfile ist noch in der Entwicklung. Verwenden Sie sie vorerst nicht, um zu bestimmen, wie gut ein Profil ist.

Version 1.1.0-alpha05

4. August 2021

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

1.1.0-alpha04 wurde vor der Veröffentlichung aufgrund eines sporadisch auftretenden Absturzes abgebrochen. b/193827052

API-Änderungen

  • startActivityAndWait wurde durch das Aufrufen des Starts über am start ersetzt. Dadurch wird die Zeit für jede Messiteration um etwa 5 Sekunden verkürzt. Allerdings werden Intent-Parcelables nicht mehr unterstützt. (I5a6f5, b/192009149

Fehlerkorrekturen

  • Die Aggressivität der Erkennung von thermischer Drosselung verringern und den Baseline-Wert neu berechnen, wenn häufig Drosselungen erkannt werden. (I7327b)
  • FrameTimingMetric funktioniert jetzt auch unter Android S Beta (Ib60cc, b/193260119)
  • Verwenden Sie ein EmptyActivity, um die Ziel-App aus dem Zustand zu holen, in dem sie zwangsweise angehalten wurde, um CompilationMode.BaselineProfile besser zu unterstützen. (Id7cac, b/192084204)
  • Die Erweiterung der Ablaufverfolgungsdatei wurde in .perfetto-trace geändert, um dem Plattformstandard zu entsprechen. (I4c236, b/174663039)
  • Der Messwert „StartupTimingMetric“ gibt jetzt den Messwert „fullyDrawnMs“ aus, um die Zeit bis zum vollständigen Rendern der Anwendung zu messen. Wenn Sie diesen Messwert für Ihre App definieren möchten, rufen Sie Activity.reportFullyDrawn auf, wenn die ursprünglichen Inhalte bereit sind, z. B. wenn die ursprünglichen Listenelemente aus der Datenbank oder dem Netzwerk geladen werden. (Methode „reportFullyDrawn“ ohne Buildversionsprüfungen bei „ComponentActivity“ verfügbar) Hinweis: Der Test muss lang genug laufen, damit der Messwert erfasst werden kann. Bei startActivityAndWait wird nicht auf reportFullyDrawn gewartet. (If1141, b/179176560)
  • Die Kosten für das Anhängen von UI-Metadaten an Traces wurden um mehr als 50 ms reduziert (Ic8390, b/193923003)
  • Die Abfragehäufigkeit beim Beenden des Tracings wurde drastisch erhöht, wodurch sich beispielsweise die Benchmarklaufzeit beim Starten um mehr als 30 % reduzieren lässt (Idfbc1, b/193723768)

Version 1.1.0-alpha03

16. Juni 2021

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

Neue Funktionen

Fehlerkorrekturen

  • Der Beispiel-Gradle-Code zum Unterdrücken von Benchmark-Fehlern wurde aktualisiert, um eine nicht eingestellte API mit einer Syntax zu verwenden, 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 enthält eine wichtige Komponente für Benchmarks: den Makro-Benchmark. Mit Benchmark können Sie nicht nur CPU-Schleifen messen, sondern mit macrobenchmark auch App-Interaktionen wie Start und Scrollen und Traces erfassen. Weitere Informationen finden Sie in der Dokumentation zur Bibliothek.

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

Neue Funktionen

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

  • Leistungsmesswerte für Start, Scrollen und Animationen Ihrer App lokal oder in der CI erfassen
  • Traces in Android Studio erfassen und prüfen

Fehlerkorrekturen

  • Problembehebung für Shell-Berechtigungen mit Ausgabeverzeichnis unter Android 12 (Hinweis: Es kann erforderlich sein, das Android Gradle-Plug-in auf Version 7.0.0 Canary und Android Studio auf Arctic Fox (2020.3.1) zu aktualisieren, um weiterhin Ausgabedateien auf betroffenen Geräten zu erfassen). (Icb039)
  • Unterstützung für das Caching von Konfigurationen im BenchmarkPlugin (6be1c1, b/159804788)
  • Vereinfachte Dateiausgabe – standardmäßig aktiviert, in einem Verzeichnis, für das keine requestLegacyExternalStorage=true erforderlich ist (8b5a4d, b/172376362)
  • Behebung eines Problems, bei dem die Bibliothek Logcat-Warnungen zum Nichtfinden des JIT-Threads auf Plattformversionen druckte, auf denen er nicht vorhanden ist. (I9cc63, b/161847393)
  • Fehler beim Lesen der maximalen Gerätehäufigkeit 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 werden losgelassen. Version 1.1.0-alpha01 enthält diese Commits.

Neue Funktionen in Version 1.1

  • Zuweisungsmesswert: Bei Benchmarks wird nach der Aufwärmphase und der Zeitmessung jetzt eine zusätzliche Phase ausgeführt, in der die Zuweisungszahlen erfasst werden. Zuweisungen können bei älteren Versionen der Plattform zu Leistungsproblemen führen (140 ns in O wurden zu 8 ns in M – gemessen auf Nexus 5X mit gesperrten Taktgebern). Dieser Messwert wird in der Android Studio-Konsolenausgabe sowie in der
  • Profilierungsunterstützung: Sie können jetzt Profildaten für einen Benchmarklauf erfassen, um zu prüfen, warum Ihr Code möglicherweise langsam ausgeführt wird. Benchmark unterstützt entweder das Erfassen von Methoden-Tracing oder das Erfassen von Methodenstichproben aus ART. Diese Dateien können mit dem Profiler in Android Studio über Datei > Öffnen geprüft werden.
  • Das Benchmark-Gradle-Plug-in bietet jetzt Standardeinstellungen für eine einfachere Einrichtung:
    • testBuildType ist standardmäßig auf „Release“ gesetzt, um die Verwendung von Abhängigkeiten mit integrierter Codeabdeckung zu vermeiden. Der Release-BuildType wird auch als Standard-BuildType konfiguriert. So kann Android Studio beim ersten Öffnen eines Projekts automatisch die richtige Buildvariante auswählen. (b/138808399)
    • signingConfig.debug wird als Standardsignaturkonfiguration verwendet (b/153583269).

** Fehlerkorrekturen **

  • Der Overhead bei der Aufwärmphase wurde deutlich reduziert, bei der die erste Messung für jeden Benchmark künstlich höher war als die anderen. Dieses Problem war bei sehr kurzen Benchmarks (1 Mikrosekunde oder weniger) stärker ausgeprägt. (b/142058671)
  • Der InstrumentationResultParser-Fehler, der bei der Ausführung über die Befehlszeile für jeden Benchmark ausgegeben wurde, wurde behoben. (I64988, b/154248456)

Bekannte Probleme

  • Bei Befehlszeilen- und Gradle-Aufrufen von Benchmark werden die Ergebnisse nicht direkt ausgegeben. Sie können dieses Problem umgehen, indem Sie die Daten entweder in Studio ausführen oder die JSON-Ausgabedatei nach Ergebnissen parsen.
  • Bei Benchmarkberichten wird der Bericht nicht von Geräten abgerufen, auf denen eine App mit einer Anwendung-ID installiert ist, die auf „android“ oder „download“ endet (Groß- und Kleinschreibung wird dabei nicht berücksichtigt). Nutzer, die dieses Problem haben, sollten das Android Gradle-Plug-in auf Version 4.2-alpha01 oder höher aktualisieren.

Version 1.0.0

Benchmark Version 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 werden unverändert von 1.0.0-rc01 veröffentlicht. Version 1.0.0 enthält diese Commits.

Wichtige Funktionen von 1.0.0

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

So werden Build- und Laufzeitkonfigurationsprobleme verhindert und die Geräteleistung stabilisiert, damit die Messungen genau und konsistent sind. Führen Sie die Benchmarks direkt in Android Studio oder in Continuous Integration aus, um die Codeleistung im Zeitverlauf zu beobachten und Rückschritte zu vermeiden.

Zu den wichtigsten Funktionen gehören:

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 werden losgelassen. Version 1.0.0-rc01 enthält diese Commits.

Neue Funktionen

  • Systrace-Tracing zu Benchmarks hinzugefügt

Fehlerkorrekturen

  • Behobenes Problem mit instabilen Messwerten, bei dem die JIT-Optimierung aufgrund von Depriorisierung nicht vor dem Warm-up abgeschlossen wurde (b/140773023)
  • Einheitliches JSON-Ausgabeverzeichnis für Android Gradle Plugin 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 werden losgelassen. Version 1.0.0-beta01 enthält diese Commits.

Neue Funktionen

  • Führen Sie vor jedem Warm-up eine Garbage Collection aus, um den Speicherdruck von einem Benchmark zum nächsten zu reduzieren (b/140895105)

Fehlerkorrekturen

  • Es wurde eine androidx.annotation:android-experimental-lint-Abhängigkeit hinzugefügt, damit Java-Code korrekt Lint-Fehler generiert, wenn die experimentelle API nicht verwendet wird. Das entspricht der Kotlin-Anmerkung „experimental“ für Kotlin-Aufrufer.
  • Im Android Gradle-Plug-in 3.6 wird jetzt die Verwendung des additionalTestOutputDir-Instrumentierungsarguments für die Ausgabe korrekt erkannt, um zu ermitteln, wann AGP die Datenkopie verarbeitet.
  • Fehler bei der nicht erkannten Taktfrequenz in JSON beheben, damit -1 korrekt ausgegeben 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 werden losgelassen. Version 1.0.0-alpha06 enthält diese Commits.

Neue Funktionen

  • Es wurde eine Prüfung für die fehlerhafte Verwendung des alten Pakets für den Test-Runner hinzugefügt, wodurch jetzt eine hilfreichere Fehlermeldung angezeigt wird.

API-Änderungen

  • Die experimentelle Anmerkung ExperimentalAnnotationReport ist jetzt korrekt öffentlich. Für die Verwendung der experimentellen BenchmarkState#report API ist jetzt diese Anmerkung 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 werden losgelassen. Die in dieser Version enthaltenen Commits finden Sie hier.

API-Änderungen

  • Die BenchmarkState.reportData API ist jetzt als experimentell gekennzeichnet

Fehlerkorrekturen

  • Fehlerbehebung beim Skript zum Sperren der Uhr, das auf Geräten fehlgeschlagen ist, auf denen entweder die cut- oder die expr-Shell-Dienstprogramme fehlten.
  • Ein Problem mit der ./gradlew lockClocks-Aufgabe wurde behoben, das auf Geräten auftrat, die mit einer älteren Version des su-Dienstprogramms gerootet wurden, das das -c-Flag nicht unterstützte.

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 werden losgelassen. Die in dieser Version enthaltenen Commits finden Sie hier.

Außerdem wurde 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 der CI. Weitere Informationen finden Sie unter Benchmarks ohne Gradle erstellen und Benchmarks in der kontinuierlichen Integration ausführen.

Neue Funktionen

  • Gradle-Plug-in
    • Die Testabdeckung wird jetzt automatisch deaktiviert und die AndroidBenchmarkRunner wird standardmäßig festgelegt (b/138374050)
    • Unterstützung für die neue AGP-basierte Datenkopie beim Ausführen von Benchmarks und bei Verwendung von AGP 3.6 und höher hinzugefügt
  • Ergänzungen zum JSON-Format
    • Gesamtlaufzeit des Benchmark-Tests ausgeben (b/133147694)
    • Bei @Parameterized-Benchmarks, die einen Namensstring verwenden (z. B. @Parameters(name = "size={0},depth={1}")), werden jetzt Parameternamen und ‑werte pro Benchmark in der JSON-Ausgabe ausgegeben (b/132578772)
  • Probelaufmodus (b/138785848)
    • Es wurde ein Modus „Trockenlauf“ hinzugefügt, mit dem jeder Benchmark-Loop nur einmal ausgeführt wird, um auf Fehler/Abstürze zu prüfen, ohne Messungen zu erfassen. Das kann beispielsweise nützlich sein, um Benchmarks vor dem Einreichen schnell auszuführen und zu prüfen, ob sie funktionieren.

API-Änderungen

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

Fehlerkorrekturen

  • Bei Fehlern beim Schreiben auf externen Speicher auf Q-Geräten werden jetzt aussagekräftigere Meldungen mit Vorschlägen zur Behebung des Problems angezeigt.
  • Die Bildschirme werden während Benchmark-Tests automatisch eingeschaltet, anstatt zu versagen, wenn das Display ausgeschaltet ist.

Externe Beiträge

  • Vielen Dank an Sergey Zakharov für die Verbesserungen bei der JSON-Ausgabe und die Behebung von Problemen beim Ausschalten des Bildschirms.

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 werden freigegeben. Die in dieser Version enthaltenen Commits finden Sie hier.

Neue Funktionen

  • Im vollständigen JSON-Bericht die Ruhezeit aufgrund von thermischer Drosselung pro Benchmark angeben

Fehlerkorrekturen

  • Das Gradle-Plug-in muss nach dem Anwenden von Android-Plug-ins und dem Android-Block nicht mehr angewendet werden.
  • Unterstützung für Benchmarkberichte auf Android 10-Geräten mit befristetem 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 werden veröffentlicht. Die Commits, die in dieser Version enthalten sind, finden Sie hier.

Hinweis: Wir behandeln das JSON-Schema als API. Wir planen, dieselben Stabilitätsanforderungen wie bei anderen APIs einzuhalten: Die API ist einmal in der Betaversion (mit sehr seltenen Ausnahmen) stabil und in der finalen Version fehlerfrei. In Nebenversionen werden nur Ergänzungen und in Hauptversionen Änderungen/Entfernungen vorgenommen.

API-Änderungen

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

    • Die Struktur des Ergebnisobjekts wurde neu organisiert, um in Zukunft zusätzliche Messwertgruppen zu unterstützen (b/132713021).
    • Dem Objekt der obersten Ebene wurden Kontextinformationen für den Testlauf hinzugefügt, z. B. Geräte- und Build-Informationen sowie Informationen dazu, ob die Uhren gesperrt sind (b/132711920)
    • Die Namen von Zeitmesswerten enthalten jetzt „ns“ (b/132714527)
    • Es wurden zusätzliche Statistiken pro gemeldetem Messwert hinzugefügt (Maximum, Median, Minimum) und die vereinfachte Zusammenfassungsstatistik „Nanos“ entfernt (b/132713851).
  • XML-Ausgabe entfernt (b/132714414)

  • Die Erkennung von thermischer Drosselung wurde aus der BenchmarkState.reportData API entfernt (b/132887006)

Fehlerkorrekturen

  • Behoben, dass ./gradlew lockClocks auf einigen Geräten mit neueren Betriebssystemen nicht haften bleibt (b/133424037)
  • Erkennung von Drosselungen für Emulator deaktiviert (b/132880807)

Version 1.0.0-alpha01

7. Mai 2019

androidx.benchmark:benchmark:1.0.0-alpha01 wird veröffentlicht. Die in dieser Version enthaltenen Commits finden Sie hier.