Migrate common from SharedPreferences to DataStore
Per b/423592727,
This adds a DataStore class that wraps around androidx.datastore.core.DataStore, and provides more Java friendly methods for creation and interop. This should make migrations from SharedPreferences in existing Java code much easier.
Note that usages of SharedPreferences in Kotlin should just use androidx.datastore.core.DataStore directly instead, as they have no need for the interop features. Furthermore, it would make it easier in the future to remove our DataStore wrapper once more SDKs have been migrated to Kotlin.
This wrapper class comes with full documentation detailing how it should be used, and quirks to keep in mind.
Since firebase-common has been migrated to use this wrapper, and common has tests with their SharedPreferences usages, our wrapper already has implicit testing.
This PR also fixes the following:
- b/423592231 -> Migrate common from SharedPreferences to DataStore
Javadoc Changes:
--- /home/runner/diff/original/firebase-kotlindoc/android/client/firebase-common/_toc.yaml 2025-06-17 17:21:13.775399603 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/client/firebase-common/_toc.yaml 2025-06-17 17:17:50.260684355 +0000
@@ -27,6 +27,16 @@
- title: "FirebaseTooManyRequestsException"
path: "/docs/reference/android/com/google/firebase/FirebaseTooManyRequestsException.html"
+- title: "firebase.datastorage"
+ path: "/docs/reference/android/com/google/firebase/datastorage/package-summary.html"
+
+ section:
+ - title: "Classes"
+
+ section:
+ - title: "JavaDataStorageKt"
+ path: "/docs/reference/android/com/google/firebase/datastorage/JavaDataStorageKt.html"
+
- title: "firebase.ktx"
status: deprecated
path: "/docs/reference/android/com/google/firebase/ktx/package-summary.html"
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/datastorage/JavaDataStorageKt.html 1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/datastorage/JavaDataStorageKt.html 2025-06-17 17:17:50.260684355 +0000
@@ -0,0 +1,81 @@
+<html devsite="true">
+ <head>
+ <title>JavaDataStorageKt</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/android/_reference-head-tags.html" %}
+ </head>
+ <body>
+ <h1>JavaDataStorageKt</h1>
+ <p>
+ <pre>public final class <a href="/docs/reference/android/com/google/firebase/datastorage/JavaDataStorageKt.html">JavaDataStorageKt</a></pre>
+ </p>
+ <hr>
+ <h2>Summary</h2>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <colgroup>
+ <col width="40%">
+ <col>
+ </colgroup>
+ <thead>
+ <tr>
+ <th colspan="100%"><h3>Public methods</h3></th>
+ </tr>
+ </thead>
+ <tbody class="list">
+ <tr>
+ <td><code>static final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T</code></td>
+ <td>
+ <div><code><T extends <a href="https://developer.android.com/reference/kotlin/java/lang/Object.html">Object</a>> <a href="/docs/reference/android/com/google/firebase/datastorage/JavaDataStorageKt.html">JavaDataStorageKt</a>.<a href="/docs/reference/android/com/google/firebase/datastorage/JavaDataStorageKt.html#(androidx.datastore.preferences.core.Preferences).getOrDefault(androidx.datastore.preferences.core.Preferences.Key,kotlin.Any)">getOrDefault</a>(<br> @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.html">Preferences</a> receiver,<br> @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.Key.html">Preferences.Key</a><@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T> key,<br> @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T defaultValue<br>)</code></div>
+ <p>Helper method for getting the value out of a <code><a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.html">Preferences</a></code> object if it exists, else falling back to the default value.</p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="list">
+ <h2>Public methods</h2>
+ <div class="api-item"><a name="(androidx.datastore.preferences.core.Preferences).getOrDefault(androidx.datastore.preferences.core.Preferences.Key, kotlin.Any)"></a><a name="-androidx.datastore.preferences.core.Preferences-.getOrDefault-androidx.datastore.preferences.core.Preferences.Key-kotlin.Any-"></a><a name="getordefault"></a>
+ <h3 class="api-name" id="(androidx.datastore.preferences.core.Preferences).getOrDefault(androidx.datastore.preferences.core.Preferences.Key,kotlin.Any)">JavaDataStorageKt.getOrDefault</h3>
+ <pre class="api-signature no-pretty-print">public static final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T <T extends <a href="https://developer.android.com/reference/kotlin/java/lang/Object.html">Object</a>> <a href="/docs/reference/android/com/google/firebase/datastorage/JavaDataStorageKt.html">JavaDataStorageKt</a>.<a href="/docs/reference/android/com/google/firebase/datastorage/JavaDataStorageKt.html#(androidx.datastore.preferences.core.Preferences).getOrDefault(androidx.datastore.preferences.core.Preferences.Key,kotlin.Any)">getOrDefault</a>(<br> @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.html">Preferences</a> receiver,<br> @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.Key.html">Preferences.Key</a><@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T> key,<br> @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T defaultValue<br>)</pre>
+ <p>Helper method for getting the value out of a <code><a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.html">Preferences</a></code> object if it exists, else falling back to the default value.</p>
+ <p>This is primarily useful when working with an instance of <code><a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/MutablePreferences.html">MutablePreferences</a></code></p>
+ <ul>
+ <li>
+ <p>like when working within an <code><a href="/docs/reference/android/com/google/firebase/datastorage/JavaDataStorage.html#editSync(kotlin.Function1)">JavaDataStorage.editSync</a></code> callback.</p>
+ </li>
+ </ul>
+ <p>Example:</p>
+ <pre class="prettyprint">dataStore.editSync((pref) -> {<br> long heartBeatCount = DataStoreKt.getOrDefault(pref, HEART_BEAT_COUNT_TAG, 0L);<br> heartBeatCount+=1;<br> pref.set(HEART_BEAT_COUNT_TAG, heartBeatCount);<br><br> return null;<br>});</pre>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <colgroup>
+ <col width="40%">
+ <col>
+ </colgroup>
+ <thead>
+ <tr>
+ <th colspan="100%">Parameters</th>
+ </tr>
+ </thead>
+ <tbody class="list">
+ <tr>
+ <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> <a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.Key.html">Preferences.Key</a><@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T> key</code></td>
+ <td>
+ <p>The typed key of the entry to get data for.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T defaultValue</code></td>
+ <td>
+ <p>A value to default to, if the key isn't found.</p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
+
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/datastorage/package-summary.html 1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/datastorage/package-summary.html 2025-06-17 17:17:50.256684332 +0000
@@ -0,0 +1,26 @@
+<html devsite="true">
+ <head>
+ <title>com.google.firebase.datastorage</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/android/_reference-head-tags.html" %}
+ </head>
+ <body>
+ <h1>com.google.firebase.datastorage</h1>
+ <h2>Classes</h2>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <colgroup>
+ <col width="40%">
+ <col>
+ </colgroup>
+ <tbody class="list">
+ <tr>
+ <td><code><a href="/docs/reference/android/com/google/firebase/datastorage/JavaDataStorageKt.html">JavaDataStorageKt</a></code></td>
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </body>
+</html>
+
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/client/firebase-common/_toc.yaml 2025-06-17 17:21:13.763399371 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/client/firebase-common/_toc.yaml 2025-06-17 17:17:50.254684320 +0000
@@ -29,6 +29,9 @@
- title: "Firebase"
path: "/docs/reference/kotlin/com/google/firebase/Firebase.html"
+- title: "firebase.datastorage"
+ path: "/docs/reference/kotlin/com/google/firebase/datastorage/package-summary.html"
+
- title: "firebase.ktx"
status: deprecated
path: "/docs/reference/kotlin/com/google/firebase/ktx/package-summary.html"
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/datastorage/package-summary.html 1970-01-01 00:00:00.000000000 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/datastorage/package-summary.html 2025-06-17 17:17:50.252684309 +0000
@@ -0,0 +1,70 @@
+<html devsite="true">
+ <head>
+ <title>com.google.firebase.datastorage</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "docs/reference/kotlin/_reference-head-tags.html" %}
+ </head>
+ <body>
+ <h1>com.google.firebase.datastorage</h1>
+ <h2>Extension functions summary</h2>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <colgroup>
+ <col width="40%">
+ <col>
+ </colgroup>
+ <tbody class="list">
+ <tr>
+ <td><code>T</code></td>
+ <td>
+ <div><code><T : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>?> <a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.html">Preferences</a>.<a href="/docs/reference/kotlin/com/google/firebase/datastorage/package-summary.html#(androidx.datastore.preferences.core.Preferences).getOrDefault(androidx.datastore.preferences.core.Preferences.Key,kotlin.Any)">getOrDefault</a>(key: <a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.Key.html">Preferences.Key</a><T>, defaultValue: T)</code></div>
+ <p>Helper method for getting the value out of a <code><a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.html">Preferences</a></code> object if it exists, else falling back to the default value.</p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <h2>Extension functions</h2>
+ <div class="api-item"><a name="(androidx.datastore.preferences.core.Preferences).getOrDefault(androidx.datastore.preferences.core.Preferences.Key, kotlin.Any)"></a><a name="-androidx.datastore.preferences.core.Preferences-.getOrDefault-androidx.datastore.preferences.core.Preferences.Key-kotlin.Any-"></a><a name="getordefault"></a>
+ <h3 class="api-name" id="(androidx.datastore.preferences.core.Preferences).getOrDefault(androidx.datastore.preferences.core.Preferences.Key,kotlin.Any)">getOrDefault</h3>
+ <pre class="api-signature no-pretty-print">fun <T : <a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>?> <a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.html">Preferences</a>.<a href="/docs/reference/kotlin/com/google/firebase/datastorage/package-summary.html#(androidx.datastore.preferences.core.Preferences).getOrDefault(androidx.datastore.preferences.core.Preferences.Key,kotlin.Any)">getOrDefault</a>(key: <a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.Key.html">Preferences.Key</a><T>, defaultValue: T): T</pre>
+ <p>Helper method for getting the value out of a <code><a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.html">Preferences</a></code> object if it exists, else falling back to the default value.</p>
+ <p>This is primarily useful when working with an instance of <code><a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/MutablePreferences.html">MutablePreferences</a></code></p>
+ <ul>
+ <li>
+ <p>like when working within an <code><a href="/docs/reference/kotlin/com/google/firebase/datastorage/JavaDataStorage.html#editSync(kotlin.Function1)">JavaDataStorage.editSync</a></code> callback.</p>
+ </li>
+ </ul>
+ <p>Example:</p>
+ <pre class="prettyprint">dataStore.editSync((pref) -> {<br> long heartBeatCount = DataStoreKt.getOrDefault(pref, HEART_BEAT_COUNT_TAG, 0L);<br> heartBeatCount+=1;<br> pref.set(HEART_BEAT_COUNT_TAG, heartBeatCount);<br><br> return null;<br>});</pre>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <colgroup>
+ <col width="40%">
+ <col>
+ </colgroup>
+ <thead>
+ <tr>
+ <th colspan="100%">Parameters</th>
+ </tr>
+ </thead>
+ <tbody class="list">
+ <tr>
+ <td><code>key: <a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.Key.html">Preferences.Key</a><T></code></td>
+ <td>
+ <p>The typed key of the entry to get data for.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>defaultValue: T</code></td>
+ <td>
+ <p>A value to default to, if the key isn't found.</p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </body>
+</html>
+
Coverage Report 1
Affected Products
firebase-commonOverall coverage changed from 52.66% (f08e0c7) to 53.44% (c3668b5) by +0.78%.
Filename Base (f08e0c7) Merge (c3668b5) Diff HeartBeatInfoStorage.java 93.23% 93.98% +0.75% JavaDataStorage.kt ? 83.33% ?
Test Logs
Test Results
50 files - 1 008 50 suites - 1 008 1m 11s ⏱️ - 34m 41s 76 tests - 5 909 76 ✅ - 5 887 0 💤 - 22 0 ❌ ±0 168 runs - 11 865 168 ✅ - 11 821 0 💤 - 44 0 ❌ ±0
Results for commit e6f66fd8. ± Comparison against base commit f08e0c72.
This pull request removes 5909 tests.
com.google.android.datatransport.cct.CctBackendFactoryTest ‑ create_returnCCTBackend_WhenBackendNameIsCCT
com.google.android.datatransport.cct.CctDestinationTest ‑ cctDestination_shouldOnlySupportProtoAndJson
com.google.android.datatransport.cct.CctDestinationTest ‑ cctDestination_shouldSupportProtoAndJson
com.google.android.datatransport.cct.CctTransportBackendTest ‑ decorate_whenOffline_shouldProperlyPopulateNetworkInfo
com.google.android.datatransport.cct.CctTransportBackendTest ‑ decorate_whenOnline_shouldProperlyPopulateNetworkInfo
com.google.android.datatransport.cct.CctTransportBackendTest ‑ schedule_shouldAddCookieOnPseudonymousIds
com.google.android.datatransport.cct.CctTransportBackendTest ‑ schedule_shouldDropCookieOnMixedPseudonymousIds
com.google.android.datatransport.cct.CctTransportBackendTest ‑ send_CompressedResponseIsUncompressed
com.google.android.datatransport.cct.CctTransportBackendTest ‑ send_whenBackendRedirectsMoreThan5Times_shouldOnlyRedirect4Times
com.google.android.datatransport.cct.CctTransportBackendTest ‑ send_whenBackendRedirects_shouldCorrectlyFollowTheRedirectViaPost
…
:recycle: This comment has been updated with latest results.
Size Report 1
Affected Products
firebase-commonType Base (f08e0c7) Merge (c3668b5) Diff aar 116 kB 134 kB +18.0 kB (+15.5%) apk (aggressive) 140 kB 189 kB +49.2 kB (+35.1%) apk (release) 4.45 MB 5.91 MB +1.46 MB (+32.8%)
Test Logs
Startup Time Report 1
Note: Layout is sometimes suboptimal due to limited formatting support on GitHub. Please check this report on GCS.
Notes
- This report is for comparing the base commit (f08e0c7) and the CI merge commit (c3668b5)
- Please check below reports for each individual commit to find more details (Perfetto traces, histograms, detailed measurements)
Startup Times
ComponentDiscoveryDevice Statistics Distributions oriole-32 Percentile f08e0c7 c3668b5 Diff Significant (?) p10 969 ±28 μs 991 ±77 μs +21.4 μs (+2.2%) NO p25 1.07 ±0.05 ms 1.08 ±0.06 ms +14.9 μs (+1.4%) NO p50 1.19 ±0.06 ms 1.21 ±0.06 ms +18.1 μs (+1.5%) NO p75 1.43 ±0.08 ms 1.42 ±0.08 ms -10.4 μs (-0.7%) NO p90 1.71 ±0.1 ms 1.73 ±0.1 ms +21.7 μs (+1.3%) NO 20 test runs in comparison
Commit Test Runs f08e0c7 - 2025-06-17_14:04:00.219665_jVxl
- 2025-06-17_14:04:00.219701_GrrJ
- 2025-06-17_14:04:00.219713_tzRQ
- 2025-06-17_14:04:00.219721_BWWY
- 2025-06-17_14:04:00.219729_UsGW
- 2025-06-17_14:04:00.219737_ejuQ
- 2025-06-17_14:04:00.219743_LPho
- 2025-06-17_14:04:00.219751_iHPe
- 2025-06-17_14:04:00.219758_Mzxq
- 2025-06-17_14:04:00.219765_dSnp
c3668b5 - 2025-06-17_17:33:22.397841_FKlV
- 2025-06-17_17:33:22.399234_GsSk
- 2025-06-17_17:33:22.399246_jXQl
- 2025-06-17_17:33:22.399251_rQSz
- 2025-06-17_17:33:22.399256_TUpV
- 2025-06-17_17:33:22.399260_OHFB
- 2025-06-17_17:33:22.399265_eWnE
- 2025-06-17_17:33:22.399269_qDcX
- 2025-06-17_17:33:22.399273_IeeY
- 2025-06-17_17:33:22.399276_daDz
redfin-30 Percentile f08e0c7 c3668b5 Diff Significant (?) p10 828 ±47 μs 808 ±23 μs -20.0 μs (-2.4%) NO p25 867 ±51 μs 846 ±20 μs -21.7 μs (-2.5%) NO p50 943 ±59 μs 910 ±27 μs -33.4 μs (-3.5%) NO p75 1.12 ±0.06 ms 1.16 ±0.1 ms +43.3 μs (+3.9%) NO p90 1.49 ±0.1 ms 1.67 ±0.2 ms +182 μs (+12.2%) NO 20 test runs in comparison
Commit Test Runs f08e0c7 - 2025-06-17_14:04:00.219665_jVxl
- 2025-06-17_14:04:00.219701_GrrJ
- 2025-06-17_14:04:00.219713_tzRQ
- 2025-06-17_14:04:00.219721_BWWY
- 2025-06-17_14:04:00.219729_UsGW
- 2025-06-17_14:04:00.219737_ejuQ
- 2025-06-17_14:04:00.219743_LPho
- 2025-06-17_14:04:00.219751_iHPe
- 2025-06-17_14:04:00.219758_Mzxq
- 2025-06-17_14:04:00.219765_dSnp
c3668b5 - 2025-06-17_17:33:22.397841_FKlV
- 2025-06-17_17:33:22.399234_GsSk
- 2025-06-17_17:33:22.399246_jXQl
- 2025-06-17_17:33:22.399251_rQSz
- 2025-06-17_17:33:22.399256_TUpV
- 2025-06-17_17:33:22.399260_OHFB
- 2025-06-17_17:33:22.399265_eWnE
- 2025-06-17_17:33:22.399269_qDcX
- 2025-06-17_17:33:22.399273_IeeY
- 2025-06-17_17:33:22.399276_daDz
FirebaseDevice Statistics Distributions oriole-32 Percentile f08e0c7 c3668b5 Diff Significant (?) p10 5.44 ±0.1 ms 5.39 ±0.1 ms -55.2 μs (-1.0%) NO p25 5.71 ±0.2 ms 5.62 ±0.1 ms -87.4 μs (-1.5%) NO p50 6.09 ±0.2 ms 5.98 ±0.1 ms -106 μs (-1.7%) NO p75 6.66 ±0.2 ms 6.57 ±0.2 ms -90.9 μs (-1.4%) NO p90 7.39 ±0.3 ms 7.40 ±0.3 ms +13.8 μs (+0.2%) NO 20 test runs in comparison
Commit Test Runs f08e0c7 - 2025-06-17_14:04:00.219665_jVxl
- 2025-06-17_14:04:00.219701_GrrJ
- 2025-06-17_14:04:00.219713_tzRQ
- 2025-06-17_14:04:00.219721_BWWY
- 2025-06-17_14:04:00.219729_UsGW
- 2025-06-17_14:04:00.219737_ejuQ
- 2025-06-17_14:04:00.219743_LPho
- 2025-06-17_14:04:00.219751_iHPe
- 2025-06-17_14:04:00.219758_Mzxq
- 2025-06-17_14:04:00.219765_dSnp
c3668b5 - 2025-06-17_17:33:22.397841_FKlV
- 2025-06-17_17:33:22.399234_GsSk
- 2025-06-17_17:33:22.399246_jXQl
- 2025-06-17_17:33:22.399251_rQSz
- 2025-06-17_17:33:22.399256_TUpV
- 2025-06-17_17:33:22.399260_OHFB
- 2025-06-17_17:33:22.399265_eWnE
- 2025-06-17_17:33:22.399269_qDcX
- 2025-06-17_17:33:22.399273_IeeY
- 2025-06-17_17:33:22.399276_daDz
redfin-30 Percentile f08e0c7 c3668b5 Diff Significant (?) p10 8.72 ±0.7 ms 8.34 ±0.1 ms -389 μs (-4.5%) NO p25 8.99 ±0.7 ms 8.57 ±0.1 ms -422 μs (-4.7%) NO p50 9.46 ±0.7 ms 9.02 ±0.1 ms -441 μs (-4.7%) NO p75 10.3 ±0.7 ms 9.92 ±0.3 ms -364 μs (-3.5%) NO p90 11.7 ±1 ms 11.5 ±0.4 ms -178 μs (-1.5%) NO 20 test runs in comparison
Commit Test Runs f08e0c7 - 2025-06-17_14:04:00.219665_jVxl
- 2025-06-17_14:04:00.219701_GrrJ
- 2025-06-17_14:04:00.219713_tzRQ
- 2025-06-17_14:04:00.219721_BWWY
- 2025-06-17_14:04:00.219729_UsGW
- 2025-06-17_14:04:00.219737_ejuQ
- 2025-06-17_14:04:00.219743_LPho
- 2025-06-17_14:04:00.219751_iHPe
- 2025-06-17_14:04:00.219758_Mzxq
- 2025-06-17_14:04:00.219765_dSnp
c3668b5 - 2025-06-17_17:33:22.397841_FKlV
- 2025-06-17_17:33:22.399234_GsSk
- 2025-06-17_17:33:22.399246_jXQl
- 2025-06-17_17:33:22.399251_rQSz
- 2025-06-17_17:33:22.399256_TUpV
- 2025-06-17_17:33:22.399260_OHFB
- 2025-06-17_17:33:22.399265_eWnE
- 2025-06-17_17:33:22.399269_qDcX
- 2025-06-17_17:33:22.399273_IeeY
- 2025-06-17_17:33:22.399276_daDz
RuntimeDevice Statistics Distributions oriole-32 Percentile f08e0c7 c3668b5 Diff Significant (?) p10 4.34 ±0.1 ms 4.29 ±0.07 ms -46.2 μs (-1.1%) NO p25 4.52 ±0.2 ms 4.42 ±0.08 ms -104 μs (-2.3%) NO p50 4.79 ±0.2 ms 4.65 ±0.1 ms -133 μs (-2.8%) NO p75 5.22 ±0.2 ms 5.09 ±0.1 ms -133 μs (-2.5%) NO p90 5.81 ±0.3 ms 5.80 ±0.2 ms -4.77 μs (-0.1%) NO 20 test runs in comparison
Commit Test Runs f08e0c7 - 2025-06-17_14:04:00.219665_jVxl
- 2025-06-17_14:04:00.219701_GrrJ
- 2025-06-17_14:04:00.219713_tzRQ
- 2025-06-17_14:04:00.219721_BWWY
- 2025-06-17_14:04:00.219729_UsGW
- 2025-06-17_14:04:00.219737_ejuQ
- 2025-06-17_14:04:00.219743_LPho
- 2025-06-17_14:04:00.219751_iHPe
- 2025-06-17_14:04:00.219758_Mzxq
- 2025-06-17_14:04:00.219765_dSnp
c3668b5 - 2025-06-17_17:33:22.397841_FKlV
- 2025-06-17_17:33:22.399234_GsSk
- 2025-06-17_17:33:22.399246_jXQl
- 2025-06-17_17:33:22.399251_rQSz
- 2025-06-17_17:33:22.399256_TUpV
- 2025-06-17_17:33:22.399260_OHFB
- 2025-06-17_17:33:22.399265_eWnE
- 2025-06-17_17:33:22.399269_qDcX
- 2025-06-17_17:33:22.399273_IeeY
- 2025-06-17_17:33:22.399276_daDz
redfin-30 Percentile f08e0c7 c3668b5 Diff Significant (?) p10 7.74 ±0.6 ms 7.39 ±0.1 ms -350 μs (-4.5%) NO p25 7.99 ±0.7 ms 7.60 ±0.1 ms -390 μs (-4.9%) NO p50 8.35 ±0.7 ms 7.95 ±0.1 ms -401 μs (-4.8%) NO p75 8.99 ±0.7 ms 8.53 ±0.2 ms -457 μs (-5.1%) NO p90 9.95 ±0.9 ms 9.57 ±0.4 ms -381 μs (-3.8%) NO 20 test runs in comparison
Commit Test Runs f08e0c7 - 2025-06-17_14:04:00.219665_jVxl
- 2025-06-17_14:04:00.219701_GrrJ
- 2025-06-17_14:04:00.219713_tzRQ
- 2025-06-17_14:04:00.219721_BWWY
- 2025-06-17_14:04:00.219729_UsGW
- 2025-06-17_14:04:00.219737_ejuQ
- 2025-06-17_14:04:00.219743_LPho
- 2025-06-17_14:04:00.219751_iHPe
- 2025-06-17_14:04:00.219758_Mzxq
- 2025-06-17_14:04:00.219765_dSnp
c3668b5 - 2025-06-17_17:33:22.397841_FKlV
- 2025-06-17_17:33:22.399234_GsSk
- 2025-06-17_17:33:22.399246_jXQl
- 2025-06-17_17:33:22.399251_rQSz
- 2025-06-17_17:33:22.399256_TUpV
- 2025-06-17_17:33:22.399260_OHFB
- 2025-06-17_17:33:22.399265_eWnE
- 2025-06-17_17:33:22.399269_qDcX
- 2025-06-17_17:33:22.399273_IeeY
- 2025-06-17_17:33:22.399276_daDz
timeToInitialDisplayDevice Statistics Distributions oriole-32 Percentile f08e0c7 c3668b5 Diff Significant (?) p10 199 ±4 ms 201 ±5 ms +1.97 ms (+1.0%) NO p25 204 ±4 ms 207 ±4 ms +3.25 ms (+1.6%) NO p50 211 ±4 ms 214 ±4 ms +3.63 ms (+1.7%) NO p75 218 ±4 ms 223 ±4 ms +5.48 ms (+2.5%) NO p90 226 ±4 ms 233 ±6 ms +6.91 ms (+3.1%) NO 20 test runs in comparison
Commit Test Runs f08e0c7 - 2025-06-17_14:04:00.219665_jVxl
- 2025-06-17_14:04:00.219701_GrrJ
- 2025-06-17_14:04:00.219713_tzRQ
- 2025-06-17_14:04:00.219721_BWWY
- 2025-06-17_14:04:00.219729_UsGW
- 2025-06-17_14:04:00.219737_ejuQ
- 2025-06-17_14:04:00.219743_LPho
- 2025-06-17_14:04:00.219751_iHPe
- 2025-06-17_14:04:00.219758_Mzxq
- 2025-06-17_14:04:00.219765_dSnp
c3668b5 - 2025-06-17_17:33:22.397841_FKlV
- 2025-06-17_17:33:22.399234_GsSk
- 2025-06-17_17:33:22.399246_jXQl
- 2025-06-17_17:33:22.399251_rQSz
- 2025-06-17_17:33:22.399256_TUpV
- 2025-06-17_17:33:22.399260_OHFB
- 2025-06-17_17:33:22.399265_eWnE
- 2025-06-17_17:33:22.399269_qDcX
- 2025-06-17_17:33:22.399273_IeeY
- 2025-06-17_17:33:22.399276_daDz
redfin-30 Percentile f08e0c7 c3668b5 Diff Significant (?) p10 227 ±7 ms 246 ±9.6 ms +19.3 ms (+8.5%) NO p25 234 ±8 ms 253 ±9 ms +19.2 ms (+8.2%) NO p50 243 ±11 ms 261 ±9 ms +17.5 ms (+7.2%) NO p75 253 ±14 ms 270 ±9 ms +17.0 ms (+6.7%) NO p90 264 ±19 ms 283 ±12 ms +19.2 ms (+7.3%) NO 20 test runs in comparison
Commit Test Runs f08e0c7 - 2025-06-17_14:04:00.219665_jVxl
- 2025-06-17_14:04:00.219701_GrrJ
- 2025-06-17_14:04:00.219713_tzRQ
- 2025-06-17_14:04:00.219721_BWWY
- 2025-06-17_14:04:00.219729_UsGW
- 2025-06-17_14:04:00.219737_ejuQ
- 2025-06-17_14:04:00.219743_LPho
- 2025-06-17_14:04:00.219751_iHPe
- 2025-06-17_14:04:00.219758_Mzxq
- 2025-06-17_14:04:00.219765_dSnp
c3668b5 - 2025-06-17_17:33:22.397841_FKlV
- 2025-06-17_17:33:22.399234_GsSk
- 2025-06-17_17:33:22.399246_jXQl
- 2025-06-17_17:33:22.399251_rQSz
- 2025-06-17_17:33:22.399256_TUpV
- 2025-06-17_17:33:22.399260_OHFB
- 2025-06-17_17:33:22.399265_eWnE
- 2025-06-17_17:33:22.399269_qDcX
- 2025-06-17_17:33:22.399273_IeeY
- 2025-06-17_17:33:22.399276_daDz
Firebase AI Mock Responses Check :warning:
A newer major version of the mock responses for Firebase AI unit tests is available. update_responses.sh should be updated to clone the latest version of the responses: v14.0