Skip to content

Update GaugeManager to better support AQS #6693

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

Open
wants to merge 79 commits into
base: fireperf-aqs
Choose a base branch
from
Open

Conversation

tejasd
Copy link
Contributor

@tejasd tejasd commented Feb 11, 2025

An initial attempt at changing gauge collection to use AQS.

  • Adds helper methods to create and identify a legacy PerfSession
  • Attempts collecting Gauges in FirebasePerfEarly but only logs them once AQS sends a session,
  • Changes the Gauge collection frequency based on app state change rather than PerfSession change
  • Updates usage of DebugEnforcementCheck in additional locations.
  • Updates unit tests

tejasd added 19 commits February 7, 2025 14:58
Based on the behaviour of AQS w/ Fireperf, an AQS session isn't
available when (currently) logging gauge metadata.

Changes:
- Remove the current logging of gauge metadata - will be re-introduced
in a future PR.
- Switch Gauge collection from `scheduleAtFixedRate` to
`scheduleWithFixedDelay`. As
[documented](https://stackoverflow.com/a/78405653), this *should*
prevent a potentially large amounts of gauge collection if a process is
cached, and then restored during a verbose session - which *should* make
it work better w/ AQS.
- Remove API restricted behaviour which is no longer relevant.
Copy link
Contributor

Vertex AI Mock Responses Check ⚠️

A newer major version of the mock responses for Vertex AI unit tests is available. update_responses.sh should be updated to clone the latest version of the responses: v6.1

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Feb 11, 2025

Coverage Report 1

Affected Products

  • firebase-perf

    Overall coverage changed from ? (7d9c0bf) to 70.42% (abc49d4) by ?.

    107 individual files with coverage change

    FilenameBase (7d9c0bf)Merge (abc49d4)Diff
    AddTrace.java?0.00%?
    AndroidApplicationInfo.java?34.71%?
    AndroidApplicationInfoOrBuilder.java?0.00%?
    AndroidLogger.java?100.00%?
    AndroidMemoryReading.java?38.36%?
    AndroidMemoryReadingOrBuilder.java?0.00%?
    ApplicationInfo.java?45.00%?
    ApplicationInfoOrBuilder.java?0.00%?
    ApplicationProcessState.java?73.91%?
    AppStartTrace.java?77.55%?
    AppStateMonitor.java?84.97%?
    AppStateUpdateHandler.java?89.29%?
    Clock.java?100.00%?
    ConfigResolver.java?90.33%?
    ConfigurationConstants.java?97.93%?
    ConfigurationFlag.java?80.00%?
    ConsoleUrlGenerator.java?37.50%?
    Constants.java?95.65%?
    Counter.java?90.91%?
    CpuGaugeCollector.java?93.83%?
    CpuMetricReading.java?39.33%?
    CpuMetricReadingOrBuilder.java?0.00%?
    DaggerFirebasePerformanceComponent.java?100.00%?
    DebugEnforcementCheck.kt?72.73%?
    DeviceCacheManager.java?76.42%?
    FirebasePerfApplicationInfoValidator.java?92.86%?
    FirebasePerfEarly.java?76.92%?
    FirebasePerfGaugeMetricValidator.java?100.00%?
    FirebasePerfHttpClient.java?93.85%?
    FirebasePerfMetricProto.java?0.00%?
    FirebasePerfNetworkValidator.java?86.67%?
    FirebasePerfOkHttpClient.java?44.90%?
    FirebasePerformance.java?78.26%?
    FirebasePerformanceAttributable.java?0.00%?
    FirebasePerformanceComponent.java?0.00%?
    FirebasePerformanceInitializer.java?28.57%?
    FirebasePerformanceModule.java?100.00%?
    FirebasePerformanceModule_ProvidesConfigResolverFactory.java?0.00%?
    FirebasePerformanceModule_ProvidesFirebaseAppFactory.java?0.00%?
    FirebasePerformanceModule_ProvidesFirebaseInstallationsFactory.java?0.00%?
    FirebasePerformanceModule_ProvidesRemoteConfigComponentFactory.java?0.00%?
    FirebasePerformanceModule_ProvidesRemoteConfigManagerFactory.java?0.00%?
    FirebasePerformanceModule_ProvidesSessionManagerFactory.java?0.00%?
    FirebasePerformanceModule_ProvidesTransportFactoryProviderFactory.java?0.00%?
    FirebasePerformanceSessionSubscriber.kt?62.50%?
    FirebasePerformance_Factory.java?0.00%?
    FirebasePerfRegistrar.java?100.00%?
    FirebasePerfTraceValidator.java?85.87%?
    FirebasePerfUrlConnection.java?44.44%?
    FirebaseSessionsHelper.kt?100.00%?
    FirstDrawDoneListener.java?85.71%?
    FlgTransport.java?83.33%?
    FragmentStateMonitor.java?94.87%?
    FrameMetricsCalculator.java?96.77%?
    FrameMetricsRecorder.java?76.32%?
    GaugeManager.java?87.74%?
    GaugeMetadata.java?26.17%?
    GaugeMetadataManager.java?100.00%?
    GaugeMetadataOrBuilder.java?0.00%?
    GaugeMetric.java?39.47%?
    GaugeMetricOrBuilder.java?0.00%?
    HttpMetric.java?92.65%?
    ImmutableBundle.java?100.00%?
    InstrHttpInputStream.java?92.45%?
    InstrHttpOutputStream.java?98.00%?
    InstrHttpsURLConnection.java?94.32%?
    InstrHttpURLConnection.java?93.42%?
    InstrumentApacheHttpResponseHandler.java?100.00%?
    InstrumentOkHttpEnqueueCallback.java?100.00%?
    InstrURLConnectionBase.java?94.86%?
    LogWrapper.java?23.08%?
    MemoryGaugeCollector.java?89.66%?
    NetworkConnectionInfo.java?0.00%?
    NetworkConnectionInfoOrBuilder.java?0.00%?
    NetworkRequestMetric.java?49.16%?
    NetworkRequestMetricBuilder.java?95.97%?
    NetworkRequestMetricBuilderUtil.java?75.00%?
    NetworkRequestMetricOrBuilder.java?0.00%?
    Optional.java?86.67%?
    PendingPerfEvent.java?100.00%?
    PerfMetric.java?33.67%?
    PerfMetricOrBuilder.java?0.00%?
    PerfMetricValidator.java?93.55%?
    Performance.kt?7.14%?
    PerfSession.java?93.55%?
    PerfSessionOrBuilder.java?0.00%?
    PreDrawListener.java?94.12%?
    Rate.java?100.00%?
    RateLimiter.java?91.54%?
    RemoteConfigManager.java?90.28%?
    ResourceType.java?0.00%?
    ScreenTraceUtil.java?94.12%?
    SessionAwareObject.java?0.00%?
    SessionManager.java?90.74%?
    SessionVerbosity.java?68.42%?
    StorageUnit.java?57.89%?
    Timer.java?90.63%?
    Trace.java?95.83%?
    TraceMetric.java?43.14%?
    TraceMetricBuilder.java?100.00%?
    TraceMetricOrBuilder.java?0.00%?
    TransportInfo.java?0.00%?
    TransportInfoOrBuilder.java?0.00%?
    TransportManager.java?95.81%?
    URLAllowlist.java?94.44%?
    URLWrapper.java?0.00%?
    Utils.java?78.57%?

Test Logs

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

Copy link
Contributor

github-actions bot commented Feb 11, 2025

Test Results

  110 files    110 suites   2m 30s ⏱️
  957 tests   957 ✅ 0 💤 0 ❌
1 922 runs  1 922 ✅ 0 💤 0 ❌

Results for commit c9c0441.

♻️ This comment has been updated with latest results.

@google-oss-bot
Copy link
Contributor

google-oss-bot commented Feb 11, 2025

Size Report 1

Affected Products

  • base

    TypeBase (7d9c0bf)Merge (abc49d4)Diff
    apk (aggressive)?8.80 kB? (?)
    apk (release)?9.77 kB? (?)
  • firebase-perf

    TypeBase (7d9c0bf)Merge (abc49d4)Diff
    aar?321 kB? (?)
    apk (aggressive)?1.71 MB? (?)
    apk (release)?10.7 MB? (?)
  • firebase-sessions

    TypeBase (7d9c0bf)Merge (abc49d4)Diff
    aar?202 kB? (?)
    apk (aggressive)?645 kB? (?)
    apk (release)?6.31 MB? (?)
  • protolite-well-known-types

    TypeBase (7d9c0bf)Merge (abc49d4)Diff
    aar?1.02 MB? (?)
    apk (aggressive)?134 kB? (?)
    apk (release)?1.71 MB? (?)

Test Logs

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

Copy link
Contributor

github-actions bot commented Feb 11, 2025

Javadoc Changes:
--- /home/runner/diff/original/firebase-kotlindoc/android/com/google/firebase/perf/FirebasePerformance.html	2025-04-04 17:45:39.838634078 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/android/com/google/firebase/perf/FirebasePerformance.html	2025-04-04 17:43:11.784617789 +0000
@@ -94,6 +94,27 @@
         </colgroup>
         <thead>
           <tr>
+            <th colspan="100%"><h3>Protected fields</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code>final <a href="/docs/reference/android/com/google/firebase/sessions/api/SessionSubscriber.html">SessionSubscriber</a></code></td>
+            <td>
+              <div><code><a href="/docs/reference/android/com/google/firebase/perf/FirebasePerformance.html#sessionSubscriber()">sessionSubscriber</a></code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+    <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>
@@ -179,6 +200,13 @@
       </div>
     </div>
     <div class="list">
+      <h2>Protected fields</h2>
+      <div class="api-item"><a name="getSessionSubscriber()"></a><a name="setSessionSubscriber()"></a><a name="getSessionSubscriber--"></a><a name="setSessionSubscriber--"></a>
+        <h3 class="api-name" id="sessionSubscriber()">sessionSubscriber</h3>
+        <pre class="api-signature no-pretty-print">protected&nbsp;final&nbsp;<a href="/docs/reference/android/com/google/firebase/sessions/api/SessionSubscriber.html">SessionSubscriber</a>&nbsp;<a href="/docs/reference/android/com/google/firebase/perf/FirebasePerformance.html#sessionSubscriber()">sessionSubscriber</a></pre>
+      </div>
+    </div>
+    <div class="list">
       <h2>Public methods</h2>
       <div class="api-item"><a name="getInstance--"></a><a name="getinstance"></a>
         <h3 class="api-name" id="getInstance()">getInstance</h3>
--- /home/runner/diff/original/firebase-kotlindoc/kotlin/com/google/firebase/perf/FirebasePerformance.html	2025-04-04 17:45:39.825633989 +0000
+++ /home/runner/diff/modified/firebase-kotlindoc/kotlin/com/google/firebase/perf/FirebasePerformance.html	2025-04-04 17:43:11.778617730 +0000
@@ -150,6 +150,27 @@
         </tbody>
       </table>
     </div>
+    <div class="devsite-table-wrapper">
+      <table class="responsive">
+        <colgroup>
+          <col width="40%">
+          <col>
+        </colgroup>
+        <thead>
+          <tr>
+            <th colspan="100%"><h3>Protected properties</h3></th>
+          </tr>
+        </thead>
+        <tbody class="list">
+          <tr>
+            <td><code><a href="/docs/reference/kotlin/com/google/firebase/sessions/api/SessionSubscriber.html">SessionSubscriber</a>!</code></td>
+            <td>
+              <div><code><a href="/docs/reference/kotlin/com/google/firebase/perf/FirebasePerformance.html#sessionSubscriber()">sessionSubscriber</a></code></div>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
     <div class="list">
       <h2>Constants</h2>
       <div class="api-item"><a name="getMAX_ATTRIBUTE_KEY_LENGTH()"></a><a name="setMAX_ATTRIBUTE_KEY_LENGTH()"></a><a name="getMAX_ATTRIBUTE_KEY_LENGTH--"></a><a name="setMAX_ATTRIBUTE_KEY_LENGTH--"></a>
@@ -469,6 +490,13 @@
         </div>
       </div>
     </div>
+    <div class="list">
+      <h2>Protected properties</h2>
+      <div class="api-item"><a name="getSessionSubscriber()"></a><a name="setSessionSubscriber()"></a><a name="getSessionSubscriber--"></a><a name="setSessionSubscriber--"></a>
+        <h3 class="api-name" id="sessionSubscriber()">sessionSubscriber</h3>
+        <pre class="api-signature no-pretty-print">protected&nbsp;val&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/perf/FirebasePerformance.html#sessionSubscriber()">sessionSubscriber</a>:&nbsp;<a href="/docs/reference/kotlin/com/google/firebase/sessions/api/SessionSubscriber.html">SessionSubscriber</a>!</pre>
+      </div>
+    </div>
   </body>
 </html>
 

@google-oss-bot
Copy link
Contributor

The public api surface has changed for the subproject firebase-perf:
error: Added method com.google.firebase.perf.FirebasePerformance.getSessionSubscriber() [AddedMethod]

Please update the api.txt files for the subprojects being affected by this change by running ./gradlew ${subproject}:generateApiTxtFile. Also perform a major/minor bump accordingly.

@mrober mrober force-pushed the fireperf-aqs branch 2 times, most recently from 60f2e77 to 7d9c0bf Compare April 7, 2025 17:26
@google-oss-bot
Copy link
Contributor

1 Warning
⚠️ Did you forget to add a changelog entry? (Add the 'no-changelog' label to the PR to silence this warning.)

Generated by 🚫 Danger

@tejasd tejasd marked this pull request as draft April 7, 2025 21:47
@tejasd tejasd self-assigned this Apr 9, 2025
@tejasd tejasd marked this pull request as ready for review April 9, 2025 15:55
tejasd added a commit that referenced this pull request Apr 14, 2025
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.

4 participants