Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 42 additions & 28 deletions Sentry.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

16 changes: 16 additions & 0 deletions Sources/Sentry/SentryANRStoppedResultInternal.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#import "SentryANRStoppedResultInternal.h"

@implementation SentryANRStoppedResultInternal

- (instancetype)initWithMinDuration:(NSTimeInterval)minDuration
maxDuration:(NSTimeInterval)maxDuration
{
if (self = [super init]) {
_minDuration = minDuration;
_maxDuration = maxDuration;
return self;
}
return nil;
}

@end
15 changes: 8 additions & 7 deletions Sources/Sentry/SentryANRTrackerV1.m
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#import "SentryANRTrackerV1.h"
#import "SentryANRTrackerInternalDelegate.h"
#import "SentryDependencyContainer.h"
#import "SentryLogC.h"
#import "SentrySwift.h"
Expand All @@ -18,7 +19,7 @@ @interface SentryANRTrackerV1 ()
@property (nonatomic, strong) SentryCrashWrapper *crashWrapper;
@property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueueWrapper;
@property (nonatomic, strong) SentryThreadWrapper *threadWrapper;
@property (nonatomic, strong) NSHashTable<id<SentryANRTrackerDelegate>> *listeners;
@property (nonatomic, strong) NSHashTable<id<SentryANRTrackerInternalDelegate>> *listeners;
@property (nonatomic, assign) NSTimeInterval timeoutInterval;

@end
Expand Down Expand Up @@ -153,8 +154,8 @@ - (void)ANRDetected
localListeners = [self.listeners allObjects];
}

for (id<SentryANRTrackerDelegate> target in localListeners) {
[target anrDetectedWithType:SentryANRTypeUnknown];
for (id<SentryANRTrackerInternalDelegate> target in localListeners) {
[target anrDetected:kSentryANRTypeUnknown];
}
}

Expand All @@ -165,14 +166,14 @@ - (void)ANRStopped
targets = [self.listeners allObjects];
}

for (id<SentryANRTrackerDelegate> target in targets) {
for (id<SentryANRTrackerInternalDelegate> target in targets) {
// We intentionally don't measure the ANR duration, because V2 will replace V1, so it's not
// worth the effort.
[target anrStoppedWithResult:nil];
[target anrStopped:nil];
}
}

- (void)addListener:(id<SentryANRTrackerDelegate>)listener
- (void)addListener:(id<SentryANRTrackerInternalDelegate>)listener
{
@synchronized(self.listeners) {
[self.listeners addObject:listener];
Expand All @@ -190,7 +191,7 @@ - (void)addListener:(id<SentryANRTrackerDelegate>)listener
}
}

- (void)removeListener:(id<SentryANRTrackerDelegate>)listener
- (void)removeListener:(id<SentryANRTrackerInternalDelegate>)listener
{
@synchronized(self.listeners) {
[self.listeners removeObject:listener];
Expand Down
40 changes: 21 additions & 19 deletions Sources/Sentry/SentryANRTrackerV2.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

#if SENTRY_HAS_UIKIT

# import "SentryANRStoppedResultInternal.h"
# import "SentryANRTrackerInternalDelegate.h"
# import "SentryDependencyContainer.h"
# import "SentryLogC.h"
# import "SentrySwift.h"
Expand All @@ -22,7 +24,7 @@ @interface SentryANRTrackerV2 ()
@property (nonatomic, strong) SentryCrashWrapper *crashWrapper;
@property (nonatomic, strong) SentryDispatchQueueWrapper *dispatchQueueWrapper;
@property (nonatomic, strong) SentryThreadWrapper *threadWrapper;
@property (nonatomic, strong) NSHashTable<id<SentryANRTrackerDelegate>> *listeners;
@property (nonatomic, strong) NSHashTable<id<SentryANRTrackerInternalDelegate>> *listeners;
@property (nonatomic, strong) SentryFramesTracker *framesTracker;
@property (nonatomic, assign) NSTimeInterval timeoutInterval;

Expand Down Expand Up @@ -130,9 +132,9 @@ - (void)detectANRs

uint64_t framesDelayStartSystemTime = nowSystemTime - appHangStoppedInterval;

SentryFramesDelayResult *framesDelay =
[self.framesTracker getFramesDelay:framesDelayStartSystemTime
endSystemTimestamp:nowSystemTime];
SentryFramesDelayResultSPI *framesDelay =
[self.framesTracker getFramesDelaySPI:framesDelayStartSystemTime
endSystemTimestamp:nowSystemTime];

if (framesDelay.delayDuration == -1) {
continue;
Expand Down Expand Up @@ -176,9 +178,9 @@ - (void)detectANRs

uint64_t frameDelayStartSystemTime = nowSystemTime - timeoutIntervalInNanos;

SentryFramesDelayResult *framesDelayForTimeInterval =
[self.framesTracker getFramesDelay:frameDelayStartSystemTime
endSystemTimestamp:nowSystemTime];
SentryFramesDelayResultSPI *framesDelayForTimeInterval =
[self.framesTracker getFramesDelaySPI:frameDelayStartSystemTime
endSystemTimestamp:nowSystemTime];

if (framesDelayForTimeInterval.delayDuration == -1) {
continue;
Expand All @@ -194,7 +196,7 @@ - (void)detectANRs

reported = YES;
lastAppHangStartedSystemTime = dateProvider.systemTime;
[self ANRDetected:SentryANRTypeFullyBlocking];
[self ANRDetected:kSentryANRTypeFullyBlocking];
}

NSTimeInterval nonFullyBlockingFramesDelayThreshold = self.timeoutInterval * 0.99;
Expand All @@ -205,7 +207,7 @@ - (void)detectANRs

reported = YES;
lastAppHangStartedSystemTime = dateProvider.systemTime;
[self ANRDetected:SentryANRTypeNonFullyBlocking];
[self ANRDetected:kSentryANRTypeNonFullyBlocking];
}
}

Expand All @@ -215,15 +217,15 @@ - (void)detectANRs
}
}

- (void)ANRDetected:(enum SentryANRType)type
- (void)ANRDetected:(SentryANRTypeInternal)type
{
NSArray *localListeners;
@synchronized(self.listeners) {
localListeners = [self.listeners allObjects];
}

for (id<SentryANRTrackerDelegate> target in localListeners) {
[target anrDetectedWithType:type];
for (id<SentryANRTrackerInternalDelegate> target in localListeners) {
[target anrDetected:type];
}
}

Expand All @@ -234,15 +236,15 @@ - (void)ANRStopped:(NSTimeInterval)hangDurationMinimum to:(NSTimeInterval)hangDu
targets = [self.listeners allObjects];
}

SentryANRStoppedResult *result =
[[SentryANRStoppedResult alloc] initWithMinDuration:hangDurationMinimum
maxDuration:hangDurationMaximum];
for (id<SentryANRTrackerDelegate> target in targets) {
[target anrStoppedWithResult:result];
SentryANRStoppedResultInternal *result =
[[SentryANRStoppedResultInternal alloc] initWithMinDuration:hangDurationMinimum
maxDuration:hangDurationMaximum];
for (id<SentryANRTrackerInternalDelegate> target in targets) {
[target anrStopped:result];
}
}

- (void)addListener:(id<SentryANRTrackerDelegate>)listener
- (void)addListener:(id<SentryANRTrackerInternalDelegate>)listener
{
@synchronized(self.listeners) {
[self.listeners addObject:listener];
Expand All @@ -260,7 +262,7 @@ - (void)addListener:(id<SentryANRTrackerDelegate>)listener
}
}

- (void)removeListener:(id<SentryANRTrackerDelegate>)listener
- (void)removeListener:(id<SentryANRTrackerInternalDelegate>)listener
{
@synchronized(self.listeners) {
[self.listeners removeObject:listener];
Expand Down
3 changes: 1 addition & 2 deletions Sources/Sentry/SentryDebugImageProviderInternal.m
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ @implementation SentryDebugImageProviderInternal

- (instancetype)init
{
self =
[self initWithBinaryImageCache:SentryDependencyContainer.sharedInstance.binaryImageCache];
self = [self initWithBinaryImageCache:SentryDependencies.binaryImageCache];

return self;
}
Expand Down
35 changes: 25 additions & 10 deletions Sources/Sentry/SentryDelayedFramesTracker.m
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,21 @@

NS_ASSUME_NONNULL_BEGIN

@implementation SentryFramesDelayResultObjC

- (instancetype)initWithDelayDuration:(CFTimeInterval)delayDuration
framesContributingToDelayCount:(NSUInteger)frames
{
if (self = [super init]) {
_delayDuration = delayDuration;
_framesContributingToDelayCount = frames;
return self;
}
return nil;
}

@end

@interface SentryDelayedFramesTracker ()

@property (nonatomic, assign) CFTimeInterval keepDelayedFramesDuration;
Expand Down Expand Up @@ -124,14 +139,14 @@ - (void)removeOldDelayedFrames
[self.delayedFrames removeObjectsInRange:NSMakeRange(0, left)];
}

- (SentryFramesDelayResult *)getFramesDelay:(uint64_t)startSystemTimestamp
endSystemTimestamp:(uint64_t)endSystemTimestamp
isRunning:(BOOL)isRunning
slowFrameThreshold:(CFTimeInterval)slowFrameThreshold
- (SentryFramesDelayResultObjC *)getFramesDelayObjC:(uint64_t)startSystemTimestamp
endSystemTimestamp:(uint64_t)endSystemTimestamp
isRunning:(BOOL)isRunning
slowFrameThreshold:(CFTimeInterval)slowFrameThreshold
{
SentryFramesDelayResult *cantCalculateFrameDelayReturnValue =
[[SentryFramesDelayResult alloc] initWithDelayDuration:-1.0
framesContributingToDelayCount:0];
SentryFramesDelayResultObjC *cantCalculateFrameDelayReturnValue =
[[SentryFramesDelayResultObjC alloc] initWithDelayDuration:-1.0
framesContributingToDelayCount:0];

if (isRunning == NO) {
SENTRY_LOG_DEBUG(@"Not calculating frames delay because frames tracker isn't running.");
Expand Down Expand Up @@ -219,9 +234,9 @@ - (SentryFramesDelayResult *)getFramesDelay:(uint64_t)startSystemTimestamp
framesCount++;
}

SentryFramesDelayResult *data =
[[SentryFramesDelayResult alloc] initWithDelayDuration:delay
framesContributingToDelayCount:framesCount];
SentryFramesDelayResultObjC *data =
[[SentryFramesDelayResultObjC alloc] initWithDelayDuration:delay
framesContributingToDelayCount:framesCount];

return data;
}
Expand Down
Loading
Loading