// Copyright 2021 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #import #if __has_include("CoreTelephony/CTTelephonyNetworkInfo.h") && !TARGET_OS_MACCATALYST #define TARGET_HAS_MOBILE_CONNECTIVITY #import #endif #import "FirebasePerformance/Sources/AppActivity/FPRTraceBackgroundActivityTracker.h" #import "FirebasePerformance/Sources/Instrumentation/FPRNetworkTrace.h" #import "FirebasePerformance/Sources/Public/FirebasePerformance/FIRTrace.h" #import "FirebasePerformance/Sources/Protogen/nanopb/perf_metric.nanopb.h" /**nanopb struct of encoded NSDictionary.*/ typedef struct { pb_bytes_array_t* _Nonnull key; pb_bytes_array_t* _Nonnull value; } StringToStringMap; /**nanopb struct of encoded NSDictionary.*/ typedef struct { pb_bytes_array_t* _Nonnull key; bool has_value; int64_t value; } StringToNumberMap; /** Callocs a pb_bytes_array and copies the given NSData bytes into the bytes array. * * @note Memory needs to be free manually, through pb_free or pb_release. * @param data The data to copy into the new bytes array. * @return pb_byte array */ extern pb_bytes_array_t* _Nullable FPREncodeData(NSData* _Nonnull data); /** Callocs a pb_bytes_array and copies the given NSString's bytes into the bytes array. * * @note Memory needs to be free manually, through pb_free or pb_release. * @param string The string to encode as pb_bytes. * @return pb_byte array */ extern pb_bytes_array_t* _Nullable FPREncodeString(NSString* _Nonnull string); /** Callocs a nanopb StringToStringMap and copies the given NSDictionary bytes into the * StringToStringMap. * * @param dict The dict to copy into the new StringToStringMap. * @return A reference to StringToStringMap */ extern StringToStringMap* _Nullable FPREncodeStringToStringMap(NSDictionary* _Nullable dict); /** Callocs a nanopb StringToNumberMap and copies the given NSDictionary bytes into the * StringToStringMap. * * @param dict The dict to copy into the new StringToNumberMap. * @return A reference to StringToNumberMap */ extern StringToNumberMap* _Nullable FPREncodeStringToNumberMap(NSDictionary* _Nullable dict); /** Creates a new firebase_perf_v1_PerfMetric struct populated with system metadata. * @param appID The Google app id to put into the message * @return A firebase_perf_v1_PerfMetric struct. */ NS_EXTENSION_UNAVAILABLE("Firebase Performance is not supported for extensions.") extern firebase_perf_v1_PerfMetric FPRGetPerfMetricMessage(NSString* _Nonnull appID); /** Creates a new firebase_perf_v1_ApplicationInfo struct populated with system metadata. * @return A firebase_perf_v1_ApplicationInfo struct. */ NS_EXTENSION_UNAVAILABLE("Firebase Performance is not supported for extensions.") extern firebase_perf_v1_ApplicationInfo FPRGetApplicationInfoMessage(void); /** Converts the FIRTrace object to a firebase_perf_v1_TraceMetric struct. * @return A firebase_perf_v1_TraceMetric struct. */ NS_EXTENSION_UNAVAILABLE("Firebase Performance is not supported for extensions.") extern firebase_perf_v1_TraceMetric FPRGetTraceMetric(FIRTrace* _Nonnull trace); /** Converts the FPRNetworkTrace object to a firebase_perf_v1_NetworkRequestMetric struct. * @return A firebase_perf_v1_NetworkRequestMetric struct. */ NS_EXTENSION_UNAVAILABLE("Firebase Performance is not supported for extensions.") extern firebase_perf_v1_NetworkRequestMetric FPRGetNetworkRequestMetric( FPRNetworkTrace* _Nonnull trace); /** Converts the gaugeData array object to a firebase_perf_v1_GaugeMetric struct. * @return A firebase_perf_v1_GaugeMetric struct. */ extern firebase_perf_v1_GaugeMetric FPRGetGaugeMetric(NSArray* _Nonnull gaugeData, NSString* _Nonnull sessionId); /** Converts the FPRTraceState to a firebase_perf_v1_ApplicationProcessState struct. * @return A firebase_perf_v1_ApplicationProcessState struct. */ extern firebase_perf_v1_ApplicationProcessState FPRApplicationProcessState(FPRTraceState state); /** Populate a firebase_perf_v1_PerfMetric object with the given firebase_perf_v1_ApplicationInfo. * * @param perfMetric The reference to a firebase_perf_v1_PerfMetric object to be populated. * @param appInfo The firebase_perf_v1_ApplicationInfo object that will be added to * firebase_perf_v1_PerfMetric. */ extern void FPRSetApplicationInfo(firebase_perf_v1_PerfMetric* _Nonnull perfMetric, firebase_perf_v1_ApplicationInfo appInfo); /** Populate a firebase_perf_v1_PerfMetric object with the given firebase_perf_v1_TraceMetric. * * @param perfMetric The reference to firebase_perf_v1_PerfMetric to be populated. * @param traceMetric The firebase_perf_v1_TraceMetric object that will be added to * firebase_perf_v1_PerfMetric. */ extern void FPRSetTraceMetric(firebase_perf_v1_PerfMetric* _Nonnull perfMetric, firebase_perf_v1_TraceMetric traceMetric); /** Populate a firebase_perf_v1_PerfMetric object with the given * firebase_perf_v1_NetworkRequestMetric. * * @param perfMetric The reference to a firebase_perf_v1_PerfMetric object to be populated. * @param networkMetric The firebase_perf_v1_NetworkRequestMetric object that will be added to * firebase_perf_v1_PerfMetric. */ extern void FPRSetNetworkRequestMetric(firebase_perf_v1_PerfMetric* _Nonnull perfMetric, firebase_perf_v1_NetworkRequestMetric networkMetric); /** Populate a firebase_perf_v1_PerfMetric object with the given firebase_perf_v1_GaugeMetric. * * @param perfMetric The reference to a firebase_perf_v1_PerfMetric object to be populated. * @param gaugeMetric The firebase_perf_v1_GaugeMetric object that will be added to * firebase_perf_v1_PerfMetric. */ extern void FPRSetGaugeMetric(firebase_perf_v1_PerfMetric* _Nonnull perfMetric, firebase_perf_v1_GaugeMetric gaugeMetric); /** Populate a firebase_perf_v1_PerfMetric object with the given * firebase_perf_v1_ApplicationProcessState. * * @param perfMetric The reference to a firebase_perf_v1_PerfMetric object to be populated. * @param state The firebase_perf_v1_ApplicationProcessState object that will be added to * firebase_perf_v1_PerfMetric. */ extern void FPRSetApplicationProcessState(firebase_perf_v1_PerfMetric* _Nonnull perfMetric, firebase_perf_v1_ApplicationProcessState state); #ifdef TARGET_HAS_MOBILE_CONNECTIVITY /** Obtain a CTTelephonyNetworkInfo object to determine device network attributes. * @return CTTelephonyNetworkInfo object. */ extern CTTelephonyNetworkInfo* _Nullable FPRNetworkInfo(void); #endif