firebase-android-sdk icon indicating copy to clipboard operation
firebase-android-sdk copied to clipboard

Migrate common from SharedPreferences to DataStore

Open daymxn opened this issue 8 months ago • 6 comments

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

daymxn avatar Mar 24 '25 18:03 daymxn

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&nbsp;final @<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T</code></td>
+            <td>
+              <div><code>&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/kotlin/java/lang/Object.html">Object</a>&gt; <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>&nbsp;&nbsp;&nbsp;&nbsp;@<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>&nbsp;receiver,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<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>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T&gt;&nbsp;key,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T&nbsp;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&nbsp;static&nbsp;final&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T&nbsp;&lt;T&nbsp;extends&nbsp;<a href="https://developer.android.com/reference/kotlin/java/lang/Object.html">Object</a>&gt; <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>&nbsp;&nbsp;&nbsp;&nbsp;@<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>&nbsp;receiver,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<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>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T&gt;&nbsp;key,<br>&nbsp;&nbsp;&nbsp;&nbsp;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T&nbsp;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) -&gt; {<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>&lt;@<a href="https://developer.android.com/reference/kotlin/androidx/annotation/NonNull.html">NonNull</a> T&gt;&nbsp;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&nbsp;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>&lt;T&nbsp;:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>?&gt; <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:&nbsp;<a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.Key.html">Preferences.Key</a>&lt;T&gt;,&nbsp;defaultValue:&nbsp;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&nbsp;&lt;T&nbsp;:&nbsp;<a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html">Any</a>?&gt; <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:&nbsp;<a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.Key.html">Preferences.Key</a>&lt;T&gt;,&nbsp;defaultValue:&nbsp;T):&nbsp;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) -&gt; {<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:&nbsp;<a href="https://developer.android.com/reference/kotlin/androidx/datastore/preferences/core/Preferences.Key.html">Preferences.Key</a>&lt;T&gt;</code></td>
+              <td>
+                <p>The typed key of the entry to get data for.</p>
+              </td>
+            </tr>
+            <tr>
+              <td><code>defaultValue:&nbsp;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>
+

github-actions[bot] avatar Mar 24 '25 18:03 github-actions[bot]

Coverage Report 1

Affected Products

  • firebase-common

    Overall coverage changed from 52.66% (f08e0c7) to 53.44% (c3668b5) by +0.78%.

    FilenameBase (f08e0c7)Merge (c3668b5)Diff
    HeartBeatInfoStorage.java93.23%93.98%+0.75%
    JavaDataStorage.kt?83.33%?

Test Logs

google-oss-bot avatar Mar 24 '25 18:03 google-oss-bot

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.

github-actions[bot] avatar Mar 24 '25 18:03 github-actions[bot]

Size Report 1

Affected Products

  • firebase-common

    TypeBase (f08e0c7)Merge (c3668b5)Diff
    aar116 kB134 kB+18.0 kB (+15.5%)
    apk (aggressive)140 kB189 kB+49.2 kB (+35.1%)
    apk (release)4.45 MB5.91 MB+1.46 MB (+32.8%)

Test Logs

google-oss-bot avatar Mar 24 '25 18:03 google-oss-bot

Startup Time Report 1

Note: Layout is sometimes suboptimal due to limited formatting support on GitHub. Please check this report on GCS.

Notes

Startup Times

  • ComponentDiscovery

    DeviceStatisticsDistributions
    oriole-32
    Percentilef08e0c7c3668b5DiffSignificant (?)
    p10969 ±28 μs991 ±77 μs+21.4 μs (+2.2%)NO
    p251.07 ±0.05 ms1.08 ±0.06 ms+14.9 μs (+1.4%)NO
    p501.19 ±0.06 ms1.21 ±0.06 ms+18.1 μs (+1.5%)NO
    p751.43 ±0.08 ms1.42 ±0.08 ms-10.4 μs (-0.7%)NO
    p901.71 ±0.1 ms1.73 ±0.1 ms+21.7 μs (+1.3%)NO

    20 test runs in comparison
    CommitTest 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
    Percentilef08e0c7c3668b5DiffSignificant (?)
    p10828 ±47 μs808 ±23 μs-20.0 μs (-2.4%)NO
    p25867 ±51 μs846 ±20 μs-21.7 μs (-2.5%)NO
    p50943 ±59 μs910 ±27 μs-33.4 μs (-3.5%)NO
    p751.12 ±0.06 ms1.16 ±0.1 ms+43.3 μs (+3.9%)NO
    p901.49 ±0.1 ms1.67 ±0.2 ms+182 μs (+12.2%)NO

    20 test runs in comparison
    CommitTest 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

    DeviceStatisticsDistributions
    oriole-32
    Percentilef08e0c7c3668b5DiffSignificant (?)
    p105.44 ±0.1 ms5.39 ±0.1 ms-55.2 μs (-1.0%)NO
    p255.71 ±0.2 ms5.62 ±0.1 ms-87.4 μs (-1.5%)NO
    p506.09 ±0.2 ms5.98 ±0.1 ms-106 μs (-1.7%)NO
    p756.66 ±0.2 ms6.57 ±0.2 ms-90.9 μs (-1.4%)NO
    p907.39 ±0.3 ms7.40 ±0.3 ms+13.8 μs (+0.2%)NO

    20 test runs in comparison
    CommitTest 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
    Percentilef08e0c7c3668b5DiffSignificant (?)
    p108.72 ±0.7 ms8.34 ±0.1 ms-389 μs (-4.5%)NO
    p258.99 ±0.7 ms8.57 ±0.1 ms-422 μs (-4.7%)NO
    p509.46 ±0.7 ms9.02 ±0.1 ms-441 μs (-4.7%)NO
    p7510.3 ±0.7 ms9.92 ±0.3 ms-364 μs (-3.5%)NO
    p9011.7 ±1 ms11.5 ±0.4 ms-178 μs (-1.5%)NO

    20 test runs in comparison
    CommitTest 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
  • Runtime

    DeviceStatisticsDistributions
    oriole-32
    Percentilef08e0c7c3668b5DiffSignificant (?)
    p104.34 ±0.1 ms4.29 ±0.07 ms-46.2 μs (-1.1%)NO
    p254.52 ±0.2 ms4.42 ±0.08 ms-104 μs (-2.3%)NO
    p504.79 ±0.2 ms4.65 ±0.1 ms-133 μs (-2.8%)NO
    p755.22 ±0.2 ms5.09 ±0.1 ms-133 μs (-2.5%)NO
    p905.81 ±0.3 ms5.80 ±0.2 ms-4.77 μs (-0.1%)NO

    20 test runs in comparison
    CommitTest 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
    Percentilef08e0c7c3668b5DiffSignificant (?)
    p107.74 ±0.6 ms7.39 ±0.1 ms-350 μs (-4.5%)NO
    p257.99 ±0.7 ms7.60 ±0.1 ms-390 μs (-4.9%)NO
    p508.35 ±0.7 ms7.95 ±0.1 ms-401 μs (-4.8%)NO
    p758.99 ±0.7 ms8.53 ±0.2 ms-457 μs (-5.1%)NO
    p909.95 ±0.9 ms9.57 ±0.4 ms-381 μs (-3.8%)NO

    20 test runs in comparison
    CommitTest 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
  • timeToInitialDisplay

    DeviceStatisticsDistributions
    oriole-32
    Percentilef08e0c7c3668b5DiffSignificant (?)
    p10199 ±4 ms201 ±5 ms+1.97 ms (+1.0%)NO
    p25204 ±4 ms207 ±4 ms+3.25 ms (+1.6%)NO
    p50211 ±4 ms214 ±4 ms+3.63 ms (+1.7%)NO
    p75218 ±4 ms223 ±4 ms+5.48 ms (+2.5%)NO
    p90226 ±4 ms233 ±6 ms+6.91 ms (+3.1%)NO

    20 test runs in comparison
    CommitTest 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
    Percentilef08e0c7c3668b5DiffSignificant (?)
    p10227 ±7 ms246 ±9.6 ms+19.3 ms (+8.5%)NO
    p25234 ±8 ms253 ±9 ms+19.2 ms (+8.2%)NO
    p50243 ±11 ms261 ±9 ms+17.5 ms (+7.2%)NO
    p75253 ±14 ms270 ±9 ms+17.0 ms (+6.7%)NO
    p90264 ±19 ms283 ±12 ms+19.2 ms (+7.3%)NO

    20 test runs in comparison
    CommitTest 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

google-oss-bot avatar Mar 27 '25 22:03 google-oss-bot

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

github-actions[bot] avatar Jun 09 '25 15:06 github-actions[bot]