2929#import " NSKeyedUnarchiver+MSIDExtensions.h"
3030#import " MSIDRequestTelemetryConstants.h"
3131
32- @implementation MSIDRequestPerformanceInfo
33-
34- #define kTotalNumbers @" totalNumbers"
35- #define kIpcRequestNumbers @" ipcRequestNumbers"
36- #define kIpcResponseNumbers @" ipcResponseNumbers"
37-
38- - (void )encodeWithCoder:(NSCoder *)encoder
39- {
40- [encoder encodeObject: self .totalNumbers forKey: kTotalNumbers ];
41- [encoder encodeObject: self .ipcRequestNumbers forKey: kIpcRequestNumbers ];
42- [encoder encodeObject: self .ipcResponseNumbers forKey: kIpcResponseNumbers ];
43- }
44-
45- - (instancetype )initWithCoder : (NSCoder *)decoder
46- {
47- self = [super init ];
48- if (self)
49- {
50- NSSet *classes = [NSSet setWithObjects: [NSMutableArray class ], [NSNumber class ], nil ];
51- self.totalNumbers = [decoder decodeObjectOfClasses: classes forKey: kTotalNumbers ];
52- self.ipcRequestNumbers = [decoder decodeObjectOfClasses: classes forKey: kIpcRequestNumbers ];
53- self.ipcResponseNumbers = [decoder decodeObjectOfClasses: classes forKey: kIpcResponseNumbers ];
54- }
55- return self;
56- }
57-
58- + (BOOL )supportsSecureCoding
59- {
60- return YES ;
61- }
62-
63- @end
64-
6532@implementation MSIDRequestTelemetryErrorInfo
6633
6734#define kApiId @" apiId"
@@ -108,17 +75,11 @@ - (nonnull id)copyWithZone:(nullable NSZone *)zone
10875
10976@end
11077
111- NSString * _Nonnull const MSID_PERF_TELEMETRY_SILENT_TYPE = @" silent" ;
112- NSString * _Nonnull const MSID_PERF_TELEMETRY_SIGNOUT_TYPE = @" signout" ;
113- NSString * _Nonnull const MSID_PERF_TELEMETRY_GETACCOUNTS_TYPE = @" accounts" ;
114- NSString * _Nonnull const MSID_PERF_TELEMETRY_GETDEVICEINFO_TYPE = @" deviceinfo" ;
115-
11678@interface MSIDLastRequestTelemetry ()
11779
11880@property (nonatomic ) NSMutableArray <MSIDRequestTelemetryErrorInfo *> *errorsInfo;
11981@property (nonatomic ) NSInteger schemaVersion;
12082@property (nonatomic ) NSInteger silentSuccessfulCount;
121- @property (nonatomic ) NSMutableDictionary <NSString *, MSIDRequestPerformanceInfo *> *perfTelemetry;
12283@property (nonatomic ) NSMutableArray <NSString *> *platformFields;
12384@property (nonatomic ) dispatch_queue_t synchronizationQueue;
12485@property (nonatomic ) MSIDLastRequestTelemetrySerializedItem *telemetrySerializedItem;
@@ -232,61 +193,6 @@ - (void)increaseSilentSuccessfulCount
232193 });
233194}
234195
235- - (void )trackSSOExtensionPerformanceWithType : (NSString *)type
236- totalPerfNumber : (NSTimeInterval )totalPerfNumber
237- ipcRequestPerfNumber : (NSTimeInterval )ipcRequestPerfNumber
238- ipcResponsePerfNumber : (NSTimeInterval )ipcResponsePerfNumber
239- {
240- dispatch_barrier_async (self.synchronizationQueue , ^{
241-
242- [self trackSSOExtensionPerformanceWithTypeImpl: type
243- totalPerfNumber: totalPerfNumber
244- ipcRequestPerfNumber: ipcRequestPerfNumber
245- ipcResponsePerfNumber: ipcResponsePerfNumber];
246-
247- [self saveTelemetryToDisk ];
248- });
249- }
250-
251- - (void )trackSSOExtensionPerformanceWithTypeImpl : (NSString *)type
252- totalPerfNumber : (NSTimeInterval )totalPerfNumber
253- ipcRequestPerfNumber : (NSTimeInterval )ipcRequestPerfNumber
254- ipcResponsePerfNumber : (NSTimeInterval )ipcResponsePerfNumber
255- {
256- if (!self.perfTelemetry )
257- {
258- self.perfTelemetry = [NSMutableDictionary new ];
259- }
260-
261- MSIDRequestPerformanceInfo *perfInfo = self.perfTelemetry [type];
262-
263- if (!perfInfo)
264- {
265- perfInfo = [MSIDRequestPerformanceInfo new ];
266- }
267-
268- if (!perfInfo.totalNumbers )
269- {
270- perfInfo.totalNumbers = [NSMutableArray new ];
271- }
272-
273- if (!perfInfo.ipcRequestNumbers )
274- {
275- perfInfo.ipcRequestNumbers = [NSMutableArray new ];
276- }
277-
278- if (!perfInfo.ipcResponseNumbers )
279- {
280- perfInfo.ipcResponseNumbers = [NSMutableArray new ];
281- }
282-
283- [perfInfo.totalNumbers addObject: @(totalPerfNumber)];
284- [perfInfo.ipcRequestNumbers addObject: @(ipcRequestPerfNumber)];
285- [perfInfo.ipcResponseNumbers addObject: @(ipcResponsePerfNumber)];
286-
287- self.perfTelemetry [type] = perfInfo;
288- }
289-
290196#pragma mark - MSIDTelemetryStringSerializable
291197
292198- (NSString *)telemetryString
@@ -304,14 +210,12 @@ - (NSString *)telemetryString
304210#define kSchemaVersion @" schemaVersion"
305211#define kSilentSuccessfulCount @" silentSuccessfulCount"
306212#define kErrorsInfo @" errorsInfo"
307- #define kPerfTelemetry @" perfTelemetry"
308213
309214- (void )encodeWithCoder:(NSCoder *)encoder
310215{
311216 [encoder encodeInteger: _schemaVersion forKey: kSchemaVersion ];
312217 [encoder encodeInteger: _silentSuccessfulCount forKey: kSilentSuccessfulCount ];
313218 [encoder encodeObject: _errorsInfo forKey: kErrorsInfo ];
314- [encoder encodeObject: _perfTelemetry forKey: kPerfTelemetry ];
315219}
316220
317221- (instancetype )initWithCoder : (NSCoder *)decoder
@@ -322,10 +226,7 @@ - (instancetype)initWithCoder:(NSCoder *)decoder
322226 NSSet *classes = [NSSet setWithObjects: [NSMutableArray class ], [NSString class ], [MSIDRequestTelemetryErrorInfo class ], nil ];
323227 NSMutableArray <MSIDRequestTelemetryErrorInfo *> *errorsInfo = [decoder decodeObjectOfClasses: classes forKey: kErrorsInfo ];
324228
325- NSSet *perfClasses = [NSSet setWithObjects: [NSMutableDictionary class ], [NSString class ], [MSIDRequestPerformanceInfo class ], nil ];
326- NSDictionary *perfTelemetry = [decoder decodeObjectOfClasses: perfClasses forKey: kPerfTelemetry ];
327-
328- return [self initFromDecodedObjectWithSchemaVersion: schemaVersion silentSuccessfulCount: silentSuccessfulCount errorsInfo: errorsInfo perfTelemetry: perfTelemetry];
229+ return [self initFromDecodedObjectWithSchemaVersion: schemaVersion silentSuccessfulCount: silentSuccessfulCount errorsInfo: errorsInfo];
329230}
330231
331232+ (BOOL )supportsSecureCoding
@@ -349,47 +250,9 @@ - (MSIDLastRequestTelemetrySerializedItem *)createSerializedItem
349250 NSMutableArray *platformFields = [NSMutableArray new ];
350251 [platformFields addObjectsFromArray: self .platformFields];
351252
352- NSString *serializedPerfTelemetry = [self serializedPerfTelemetry ];
353-
354- if (![NSString msidIsStringNilOrBlank: serializedPerfTelemetry])
355- {
356- [platformFields addObject: [self serializedPerfTelemetry ]];
357- }
358-
359253 return [[MSIDLastRequestTelemetrySerializedItem alloc ] initWithSchemaVersion: [NSNumber numberWithInteger: self .schemaVersion] defaultFields: defaultFields errorInfo: self ->_errorsInfo platformFields: platformFields];
360254}
361255
362- - (NSString *)serializedPerfTelemetry
363- {
364- if (![self .perfTelemetry count ])
365- {
366- return nil ;
367- }
368-
369- NSString *serializedPerfTelemetry = [NSString stringWithFormat: @" %@ ;%@ ;%@ ;%@ ;" ,
370- [self serializedAverageForType: MSID_PERF_TELEMETRY_SILENT_TYPE],
371- [self serializedAverageForType: MSID_PERF_TELEMETRY_SIGNOUT_TYPE],
372- [self serializedAverageForType: MSID_PERF_TELEMETRY_GETACCOUNTS_TYPE],
373- [self serializedAverageForType: MSID_PERF_TELEMETRY_GETDEVICEINFO_TYPE]];
374- return serializedPerfTelemetry;
375- }
376-
377- - (NSString *)serializedAverageForType : (NSString *)type
378- {
379- MSIDRequestPerformanceInfo *perfInfo = self.perfTelemetry [type];
380-
381- if (!perfInfo)
382- {
383- return [NSString stringWithFormat: @" %@ :" , type];
384- }
385-
386- NSNumber *totalAverage = perfInfo.totalNumbers ? [perfInfo.totalNumbers valueForKeyPath: @" @avg.self" ] : nil ;
387- NSNumber *ipcRequestAverage = perfInfo.ipcRequestNumbers ? [perfInfo.ipcRequestNumbers valueForKeyPath: @" @avg.self" ] : nil ;
388- NSNumber *ipcResponseAverage = perfInfo.ipcResponseNumbers ? [perfInfo.ipcResponseNumbers valueForKeyPath: @" @avg.self" ] : nil ;
389-
390- return [NSString stringWithFormat: @" %@ :%f :%f :%f " , type, [totalAverage doubleValue ], [ipcRequestAverage doubleValue ], [ipcResponseAverage doubleValue ]];
391- }
392-
393256#pragma mark - Update object
394257
395258- (void )addErrorInfo : (MSIDRequestTelemetryErrorInfo *)errorInfo
@@ -421,8 +284,6 @@ - (void)resetTelemetry
421284 {
422285 self->_errorsInfo = nil ;
423286 }
424-
425- self.perfTelemetry = [NSMutableDictionary new ];
426287
427288 [self saveTelemetryToDisk ];
428289 });
@@ -456,7 +317,9 @@ - (void)saveTelemetryToDisk
456317 }
457318}
458319
459- - (instancetype )initFromDecodedObjectWithSchemaVersion : (NSInteger )schemaVersion silentSuccessfulCount : (NSInteger )silentSuccessfulCount errorsInfo : (NSMutableArray <MSIDRequestTelemetryErrorInfo *>*) errorsInfo perfTelemetry : (NSDictionary *)perfTelemetry
320+ - (instancetype )initFromDecodedObjectWithSchemaVersion : (NSInteger )schemaVersion
321+ silentSuccessfulCount : (NSInteger )silentSuccessfulCount
322+ errorsInfo : (NSMutableArray <MSIDRequestTelemetryErrorInfo *>*) errorsInfo
460323{
461324 self = [super init ];
462325 if (self)
@@ -467,7 +330,6 @@ - (instancetype)initFromDecodedObjectWithSchemaVersion:(NSInteger)schemaVersion
467330 _silentSuccessfulCount = silentSuccessfulCount;
468331 _errorsInfo = errorsInfo;
469332 _synchronizationQueue = [self initializeDispatchQueue ];
470- _perfTelemetry = [[NSMutableDictionary alloc ] initWithDictionary: perfTelemetry];
471333 _platformFields = [NSMutableArray <NSString *> new];
472334 }
473335 else
0 commit comments