Skip to content

Migrate common from SharedPreferences to DataStore #6801

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 27 commits into from
Jun 27, 2025

Conversation

daymxn
Copy link
Member

@daymxn daymxn commented Mar 24, 2025

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 daymxn self-assigned this Mar 24, 2025
Copy link
Contributor

github-actions bot commented Mar 24, 2025

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>
+

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Mar 24, 2025

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

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/10spWRIYnS.html

Copy link
Contributor

github-actions bot commented Mar 24, 2025

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 e6f66fd. ± Comparison against base commit f08e0c7.

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
…

♻️ This comment has been updated with latest results.

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Mar 24, 2025

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

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/HAqKYA8Ya8.html

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Mar 27, 2025

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

  1. https://storage.googleapis.com/firebase-sdk-metric-reports/0vTdRzPPFa/index.html

Copy link
Contributor

github-actions bot commented Jun 9, 2025

Firebase AI Mock Responses Check ⚠️

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

@daymxn daymxn requested a review from rlazo June 9, 2025 15:42
@daymxn daymxn enabled auto-merge (squash) June 9, 2025 15:46
@daymxn daymxn requested a review from rlazo June 17, 2025 17:13
@daymxn daymxn merged commit 2bfc0a5 into main Jun 27, 2025
34 of 35 checks passed
@daymxn daymxn deleted the daymon-sharedpreferences-work branch June 27, 2025 17:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants