Pārlūkot izejas kodu

Fireperf: prewarm counters (#9283)

* hidden counters

* changelog

* lowercase
Leo Zhan 4 gadi atpakaļ
vecāks
revīzija
ca6f7e6229

+ 3 - 0
FirebasePerformance/CHANGELOG.md

@@ -1,3 +1,6 @@
+# Unreleased
+* [fixed] Potentially drop pre-warmed app start traces on iOS 15 and above (#9026). App start measurements are made only for cold app starts (without pre-warming).
+
 # Version 8.10.0
 * Fix a crash related to FPRSessionDetails. (#8691)
 * Fix heap-buffer overflow when encoding sessions. (#8849)

+ 15 - 6
FirebasePerformance/Sources/AppActivity/FPRAppActivityTracker.m

@@ -42,6 +42,8 @@ NSString *const kFPRAppTraceNameBackgroundSession = @"_bs";
 NSString *const kFPRAppCounterNameTraceEventsRateLimited = @"_fstec";
 NSString *const kFPRAppCounterNameNetworkTraceEventsRateLimited = @"_fsntc";
 NSString *const kFPRAppCounterNameTraceNotStopped = @"_tsns";
+NSString *const kFPRAppCounterNameActivePrewarm = @"_fsapc";
+NSString *const kFPRAppCounterNameDoubleDispatch = @"_fsddc";
 
 @interface FPRAppActivityTracker ()
 
@@ -202,18 +204,25 @@ NSString *const kFPRAppCounterNameTraceNotStopped = @"_tsns";
     return NO;
   }
 
+  BOOL isPrewarmed = NO;
+
   NSDictionary<NSString *, NSString *> *environment = [NSProcessInfo processInfo].environment;
   BOOL activePrewarmFlagValue = [environment[@"ActivePrewarm"] boolValue];
-  if ([self isActivePrewarmEnabled] && activePrewarmFlagValue == YES) {
-    return YES;
+  if (activePrewarmFlagValue == YES) {
+    isPrewarmed = isPrewarmed || [self isActivePrewarmEnabled];
+    [self.activeTrace incrementMetric:kFPRAppCounterNameActivePrewarm byInt:1];
+  } else {
+    [self.activeTrace incrementMetric:kFPRAppCounterNameActivePrewarm byInt:0];
   }
 
-  if ([self isDoubleDispatchEnabled] &&
-      [doubleDispatchTime compare:applicationDidFinishLaunchTime] == NSOrderedAscending) {
-    return YES;
+  if ([doubleDispatchTime compare:applicationDidFinishLaunchTime] == NSOrderedAscending) {
+    isPrewarmed = isPrewarmed || [self isDoubleDispatchEnabled];
+    [self.activeTrace incrementMetric:kFPRAppCounterNameDoubleDispatch byInt:1];
+  } else if (doubleDispatchTime) {
+    [self.activeTrace incrementMetric:kFPRAppCounterNameDoubleDispatch byInt:0];
   }
 
-  return NO;
+  return isPrewarmed;
 }
 
 /**