AutorÃa | Ultima modificación | Ver Log |
// Copyright 2020 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 "FirebasePerformance/Sources/Instrumentation/FPRInstrumentation.h"#import "FirebasePerformance/Sources/Common/FPRDiagnostics.h"#import "FirebasePerformance/Sources/Instrumentation/FPRInstrument.h"#import "FirebasePerformance/Sources/Instrumentation/Network/FPRNSURLConnectionInstrument.h"#import "FirebasePerformance/Sources/Instrumentation/Network/FPRNSURLSessionInstrument.h"#import "FirebasePerformance/Sources/Instrumentation/UIKit/FPRUIViewControllerInstrument.h"#import "FirebasePerformance/Sources/Configurations/FPRConfigurations.h"// The instrumentation group keys.NSString *const kFPRInstrumentationGroupNetworkKey = @"network";NSString *const kFPRInstrumentationGroupUIKitKey = @"uikit";/** Use ivars instead of properties to reduce message sending overhead. */@interface FPRInstrumentation () {// A dictionary of the instrument groups.NSDictionary<NSString *, NSMutableArray *> *_instrumentGroups;}/** Registers an instrument in the given group.** @param instrument The instrument to register.* @param group The group to register the instrument in.*/- (void)registerInstrument:(FPRInstrument *)instrument group:(NSString *)group;@end@implementation FPRInstrumentation- (instancetype)init {self = [super init];if (self) {_instrumentGroups = @{kFPRInstrumentationGroupNetworkKey : [[NSMutableArray alloc] init],kFPRInstrumentationGroupUIKitKey : [[NSMutableArray alloc] init]};}return self;}- (void)registerInstrument:(FPRInstrument *)instrument group:(NSString *)group {FPRAssert(instrument, @"Instrument must be non-nil.");FPRAssert(_instrumentGroups[group], @"groups and group must be non-nil, and groups[group] must be""non-nil.");if (instrument != nil) {[_instrumentGroups[group] addObject:instrument];}[instrument registerInstrumentors];}- (NSUInteger)registerInstrumentGroup:(NSString *)group {FPRAssert(_instrumentGroups[group], @"The group key does not exist", group);FPRAssert(_instrumentGroups[group].count == 0, @"This group is already instrumented");if ([group isEqualToString:kFPRInstrumentationGroupNetworkKey]) {[self registerInstrument:[[FPRNSURLSessionInstrument alloc] init] group:group];[self registerInstrument:[[FPRNSURLConnectionInstrument alloc] init] group:group];}if ([group isEqualToString:kFPRInstrumentationGroupUIKitKey]) {[self registerInstrument:[[FPRUIViewControllerInstrument alloc] init] group:group];}return _instrumentGroups[group].count;}- (BOOL)deregisterInstrumentGroup:(NSString *)group {FPRAssert(_instrumentGroups[group], @"You're attempting to deregister an invalid group key.");for (FPRInstrument *instrument in _instrumentGroups[group]) {[instrument deregisterInstrumentors];}[_instrumentGroups[group] removeAllObjects];return _instrumentGroups[group].count == 0;}@end