[FR] Allow custom attributes on built-in traces (#6664)#8228
Conversation
Resolves firebase#6664. FirebasePerformance already had putAttribute/getAttribute/removeAttribute/ getAttributes backed by a ConcurrentHashMap, but they were @hide and not wired into built-in trace serialization. This change makes them public and ensures global attributes are included on all traces (built-in and custom). Changes: - Make global attribute methods (putAttribute, removeAttribute, getAttribute, getAttributes) public on FirebasePerformance - Expose MAX_TRACE_CUSTOM_ATTRIBUTES, MAX_ATTRIBUTE_KEY_LENGTH, MAX_ATTRIBUTE_VALUE_LENGTH as public constants on FirebasePerformance - Update api.txt with the expanded public API surface - Merge global attributes in TraceMetricBuilder (screen + custom Trace objects) - Add global attributes to AppStartTrace (_app_start) - Add global attributes to AppStateMonitor.sendSessionLog() (_fs, _bs) - Merge global attributes in NetworkRequestMetricBuilder (auto + manual HTTP) - Trace/request-level attributes take precedence over global on key conflicts Test coverage (TraceMetric.custom_attributes): - AppStartTraceTest: global attrs on _app_start - AppStateMonitorTest: global attrs on _app_in_foreground, _app_in_background, and screen traces (_st_*) - TraceMetricBuilderTest: global attrs merged, trace-level overrides global - NetworkRequestMetricBuilderTest: global attrs on network requests, per-request overrides global - TransportManagerTest: global attrs on built-in traces at ApplicationInfo level
TransportManager.setApplicationInfoAndBuild already adds global custom attributes to all traces and network requests at the ApplicationInfo level (TransportManager.java:507-512). The merging logic added in this PR to TraceMetricBuilder, NetworkRequestMetricBuilder, AppStartTrace, and AppStateMonitor duplicated those attributes at the TraceMetric / NetworkRequestMetric level, which is redundant. Visibility changes on FirebasePerformance, api.txt, and CHANGELOG are preserved — exposing the previously @hide global-attribute APIs is all that this PR needs to do.
…eview Restore @hide + private MAX_* on FirebasePerformance; drop api.txt and CHANGELOG entries; revert to version=22.0.6. Keep new TransportManager test.
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. |
[FR] Allow custom attributes on built-in traces (#6664)
#6664.
FirebasePerformancealready exposesputAttribute/removeAttribute/getAttribute/getAttributesaspublicJava methods (currently@hidein the Javadocs), backed by aConcurrentHashMap.TransportManager.setApplicationInfoAndBuild(firebase-perf/src/main/java/com/google/firebase/perf/transport/TransportManager.java:507-512) callsputAllCustomAttributes(getGlobalCustomAttributes())onApplicationInfofor everyTraceMetricandNetworkRequestMetric, so any global attributes set through that API already ride along on built-in traces and network requests.This PR adds a unit test that pins down that behavior so the hidden API can be recommended to customers (per discussion with ACore) while the formal public-API review is scheduled separately.
Changes
TransportManagerTest.java— New unit testlogBuiltInTraces_globalCustomAttributesAreAddedcovering three paths:_as) → asserts a global attribute appears onApplicationInfo.custom_attributes._st_MainActivity) → asserts a second global attribute appears onApplicationInfo.custom_attributes.ApplicationInfo.custom_attributes.Usage (today, via the hidden API)
These attributes appear on
_app_start,_app_in_foreground,_app_in_background, screen traces (_st_*), network requests, and all custom traces — at theApplicationInfo.custom_attributeslevel — via the existingTransportManagerlogic.Notes
MAX_TRACE_CUSTOM_ATTRIBUTES(5) byFirebasePerformance.putAttribute's existingcheckAttribute()call.mCustomAttributesis aConcurrentHashMap;getAttributes()returns a defensive copy._app_start: global attributes must be set before the trace is built (e.g., inApplication.onCreate())._-prefixed keys and update https://firebase.google.com/docs/perf-mon/attributes?platform=android#collecting-user-data before the four methods can be exposed publicly.Verification
All tests pass locally.