Skip to content

Commit

Permalink
Merge a5f9755 into 81f2238
Browse files Browse the repository at this point in the history
  • Loading branch information
armcknight committed May 5, 2024
2 parents 81f2238 + a5f9755 commit 4cc09ac
Show file tree
Hide file tree
Showing 15 changed files with 233 additions and 201 deletions.
20 changes: 15 additions & 5 deletions Sentry.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -628,7 +628,6 @@
7DC8310A2398283C0043DD9A /* SentryCrashIntegration.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DC831082398283C0043DD9A /* SentryCrashIntegration.h */; };
7DC8310C2398283C0043DD9A /* SentryCrashIntegration.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DC831092398283C0043DD9A /* SentryCrashIntegration.m */; };
840A11122B61E27500650D02 /* SentrySamplerDecision.m in Sources */ = {isa = PBXBuildFile; fileRef = 840A11102B61E27500650D02 /* SentrySamplerDecision.m */; };
840A11132B61FE5800650D02 /* SentryAppLaunchProfilingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 840A11092B5F47F700650D02 /* SentryAppLaunchProfilingTests.m */; };
84281C432A578E5600EE88F2 /* SentryProfilerState.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84281C422A578E5600EE88F2 /* SentryProfilerState.mm */; };
84281C462A57905700EE88F2 /* SentrySample.h in Headers */ = {isa = PBXBuildFile; fileRef = 84281C442A57905700EE88F2 /* SentrySample.h */; };
84281C472A57905700EE88F2 /* SentrySample.m in Sources */ = {isa = PBXBuildFile; fileRef = 84281C452A57905700EE88F2 /* SentrySample.m */; };
Expand Down Expand Up @@ -672,12 +671,14 @@
8459FCBE2BD73E820038E9C9 /* SentryProfilerSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = 8459FCBD2BD73E810038E9C9 /* SentryProfilerSerialization.h */; };
8459FCC02BD73EB20038E9C9 /* SentryProfilerSerialization.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8459FCBF2BD73EB20038E9C9 /* SentryProfilerSerialization.mm */; };
845C16D52A622A5B00EC9519 /* SentryTracer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 845C16D42A622A5B00EC9519 /* SentryTracer+Private.h */; };
847D10BD2BE6F7130048ACD9 /* Nimble in Frameworks */ = {isa = PBXBuildFile; productRef = 847D10BC2BE6F7130048ACD9 /* Nimble */; };
8489B8882A5F7905009A055A /* SentryThreadWrapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8489B8872A5F7905009A055A /* SentryThreadWrapperTests.swift */; };
848A45192BBF8D33006AAAEC /* SentryContinuousProfiler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 848A45182BBF8D33006AAAEC /* SentryContinuousProfiler.mm */; };
848A451A2BBF8D33006AAAEC /* SentryContinuousProfiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 848A45172BBF8D33006AAAEC /* SentryContinuousProfiler.h */; };
848A451D2BBF9504006AAAEC /* SentryProfilerTestHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 848A451C2BBF9504006AAAEC /* SentryProfilerTestHelpers.m */; };
848A451E2BBF9504006AAAEC /* SentryProfilerTestHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 848A451B2BBF9504006AAAEC /* SentryProfilerTestHelpers.h */; };
849AC40029E0C1FF00889C16 /* SentryFormatterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849AC3FF29E0C1FF00889C16 /* SentryFormatterTests.swift */; };
84A305492BC7328400D84283 /* SentryAppLaunchProfilingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A305472BC72A0A00D84283 /* SentryAppLaunchProfilingTests.swift */; };
84A305572BC9EF8C00D84283 /* SentryLegacyProfiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A305552BC9EF8C00D84283 /* SentryLegacyProfiler.h */; };
84A305582BC9EF8C00D84283 /* SentryLegacyProfiler.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84A305562BC9EF8C00D84283 /* SentryLegacyProfiler.mm */; };
84A5D75B29D5170700388BFA /* TimeInterval+Sentry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A5D75A29D5170700388BFA /* TimeInterval+Sentry.swift */; };
Expand Down Expand Up @@ -1629,7 +1630,6 @@
7DC27EC423997EB7006998B5 /* SentryAutoBreadcrumbTrackingIntegration.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SentryAutoBreadcrumbTrackingIntegration.m; sourceTree = "<group>"; };
7DC831082398283C0043DD9A /* SentryCrashIntegration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SentryCrashIntegration.h; path = include/SentryCrashIntegration.h; sourceTree = "<group>"; };
7DC831092398283C0043DD9A /* SentryCrashIntegration.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SentryCrashIntegration.m; sourceTree = "<group>"; };
840A11092B5F47F700650D02 /* SentryAppLaunchProfilingTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SentryAppLaunchProfilingTests.m; sourceTree = "<group>"; };
840A11102B61E27500650D02 /* SentrySamplerDecision.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SentrySamplerDecision.m; sourceTree = "<group>"; };
840A11142B62041600650D02 /* SentryLaunchProfiling+Tests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SentryLaunchProfiling+Tests.h"; sourceTree = "<group>"; };
840B7EEA2BBF2ABA008B8120 /* .slather.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .slather.yml; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1706,6 +1706,7 @@
849472822971C2CD002603DE /* SentryNSProcessInfoWrapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryNSProcessInfoWrapperTests.swift; sourceTree = "<group>"; };
849472842971C41A002603DE /* SentryNSTimerFactoryTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryNSTimerFactoryTest.swift; sourceTree = "<group>"; };
849AC3FF29E0C1FF00889C16 /* SentryFormatterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SentryFormatterTests.swift; sourceTree = "<group>"; };
84A305472BC72A0A00D84283 /* SentryAppLaunchProfilingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SentryAppLaunchProfilingTests.swift; sourceTree = "<group>"; };
84A305552BC9EF8C00D84283 /* SentryLegacyProfiler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SentryLegacyProfiler.h; path = ../include/SentryLegacyProfiler.h; sourceTree = "<group>"; };
84A305562BC9EF8C00D84283 /* SentryLegacyProfiler.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SentryLegacyProfiler.mm; sourceTree = "<group>"; };
84A305592BC9FD1600D84283 /* SentryLegacyProfiler+Test.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SentryLegacyProfiler+Test.h"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1968,6 +1969,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
847D10BD2BE6F7130048ACD9 /* Nimble in Frameworks */,
84B7FA3D29B2879C00AD93B1 /* libSentryTestUtils.a in Frameworks */,
8431EFD129B27B1100D8DC56 /* Sentry.framework in Frameworks */,
);
Expand Down Expand Up @@ -2439,7 +2441,6 @@
7B569DFE2590EEF600B653FC /* SentryScope+Equality.h */,
7B569E052590F04700B653FC /* SentryScope+Properties.h */,
7B9421C4260CA393001F9349 /* SentrySDK+Tests.h */,
840A11142B62041600650D02 /* SentryLaunchProfiling+Tests.h */,
8431D4572BE175A1009EAEC1 /* SentryContinuousProfiler+Test.h */,
639889D21EDF06C100EA7442 /* SentryTests-Bridging-Header.h */,
63B819131EC352A7002FDF4C /* SentryInterfacesTests.m */,
Expand Down Expand Up @@ -3389,7 +3390,7 @@
035E73CB27D575B3005EEB11 /* SentrySamplingProfilerTests.mm */,
035E73CD27D5790A005EEB11 /* SentryThreadMetadataCacheTests.mm */,
03F9D37B2819A65C00602916 /* SentryProfilerTests.mm */,
840A11092B5F47F700650D02 /* SentryAppLaunchProfilingTests.m */,
84A305472BC72A0A00D84283 /* SentryAppLaunchProfilingTests.swift */,
8419C0C328C1889D001C8259 /* SentryLegacyProfilerTests.swift */,
8446F5182BE172290040D57E /* SentryContinuousProfilerTests.swift */,
8431D4522BE1741E009EAEC1 /* SentryProfileTestFixture.swift */,
Expand All @@ -3411,6 +3412,7 @@
8431F00B29B284F200D8DC56 /* SentryTestUtils */ = {
isa = PBXGroup;
children = (
840A11142B62041600650D02 /* SentryLaunchProfiling+Tests.h */,
7BD47B4C268F0B080076A663 /* ClearTestState.swift */,
84AC61D829F7643B009EEF61 /* TestDispatchFactory.swift */,
84281C482A57933600EE88F2 /* SentryProfilerMocks.h */,
Expand Down Expand Up @@ -4196,6 +4198,9 @@
8431EED229B27B1100D8DC56 /* PBXTargetDependency */,
);
name = SentryProfilerTests;
packageProductDependencies = (
847D10BC2BE6F7130048ACD9 /* Nimble */,
);
productName = "Tests-iOS";
productReference = 8431EFD929B27B1100D8DC56 /* SentryProfilerTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
Expand Down Expand Up @@ -4920,8 +4925,8 @@
8431EFE129B27B5300D8DC56 /* SentryThreadMetadataCacheTests.mm in Sources */,
8431EFE029B27B5300D8DC56 /* SentryBacktraceTests.mm in Sources */,
8431EFDF29B27B5300D8DC56 /* SentryThreadHandleTests.mm in Sources */,
840A11132B61FE5800650D02 /* SentryAppLaunchProfilingTests.m in Sources */,
8431EFE829B27BAD00D8DC56 /* SentrySystemWrapperTests.swift in Sources */,
84A305492BC7328400D84283 /* SentryAppLaunchProfilingTests.swift in Sources */,
8431EFE529B27BAD00D8DC56 /* SentryNSProcessInfoWrapperTests.swift in Sources */,
8431EFDE29B27B5300D8DC56 /* SentryLegacyProfilerTests.swift in Sources */,
);
Expand Down Expand Up @@ -6909,6 +6914,11 @@
package = 62986F012B03D250008E2D62 /* XCRemoteSwiftPackageReference "Nimble" */;
productName = Nimble;
};
847D10BC2BE6F7130048ACD9 /* Nimble */ = {
isa = XCSwiftPackageProductDependency;
package = 62986F012B03D250008E2D62 /* XCRemoteSwiftPackageReference "Nimble" */;
productName = Nimble;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 6327C5CA1EB8A783004E799B /* Project object */;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,13 @@ SENTRY_EXTERN NSString *const kSentryLaunchProfileConfigKeyProfilesSampleRate;

SentryLaunchProfileConfig sentry_shouldProfileNextLaunch(SentryOptions *options);

/**
* `sentry_shouldProfileNextLaunch` cannot be exposed to Swift tests because its return type is not
* expressible in Swift. This wraps it and only returns the `BOOL shouldProfile` value in the
* struct.
*/
BOOL sentry_willProfileNextLaunch(SentryOptions *options);

SentryTransactionContext *sentry_context(NSNumber *tracesRate);

NS_ASSUME_NONNULL_END
Expand Down
79 changes: 61 additions & 18 deletions Sources/Sentry/Profiling/SentryLaunchProfiling.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

#if SENTRY_TARGET_PROFILING_SUPPORTED

# import "SentryContinuousProfiler.h"
# import "SentryDependencyContainer.h"
# import "SentryDispatchQueueWrapper.h"
# import "SentryFileManager.h"
# import "SentryInternalDefines.h"
# import "SentryLaunchProfiling.h"
# import "SentryLog.h"
# import "SentryOptions.h"
# import "SentryOptions+Private.h"
# import "SentryProfiler+Private.h"
# import "SentryRandom.h"
# import "SentrySamplerDecision.h"
Expand All @@ -23,6 +24,12 @@

NS_ASSUME_NONNULL_BEGIN

BOOL isProfilingAppLaunch;
NSString *const kSentryLaunchProfileConfigKeyTracesSampleRate = @"traces";
NSString *const kSentryLaunchProfileConfigKeyProfilesSampleRate = @"profiles";
NSString *const kSentryLaunchProfileConfigKeyContinuousProfiling = @"continuous-profiling";
static SentryTracer *_Nullable launchTracer;

# pragma mark - Private

static SentryTracer *_Nullable sentry_launchTracer;
Expand All @@ -41,21 +48,22 @@

typedef struct {
BOOL shouldProfile;
/** Only needed for legacy launch profiling; unused with continuous profiling. */
SentrySamplerDecision *_Nullable tracesDecision;
SentrySamplerDecision *_Nullable profilesDecision;
} SentryLaunchProfileConfig;

NSString *const kSentryLaunchProfileConfigKeyTracesSampleRate = @"traces";
NSString *const kSentryLaunchProfileConfigKeyProfilesSampleRate = @"profiles";

SentryLaunchProfileConfig
sentry_shouldProfileNextLaunch(SentryOptions *options)
{
BOOL shouldProfileNextLaunch = options.enableAppLaunchProfiling && options.enableTracing;
BOOL shouldProfileNextLaunch = options.enableAppLaunchProfiling
&& (options.enableContinuousProfiling || options.enableTracing);
if (!shouldProfileNextLaunch) {
SENTRY_LOG_DEBUG(@"Won't profile next launch due to specified options configuration: "
@"options.enableAppLaunchProfiling: %d; options.enableTracing: %d",
options.enableAppLaunchProfiling, options.enableTracing);
@"options.enableAppLaunchProfiling: %d; options.enableTracing: %d; "
@"options.enableContinuousProfiling: %d",
options.enableAppLaunchProfiling, options.enableTracing,
options.enableContinuousProfiling);
return (SentryLaunchProfileConfig) { NO, nil, nil };
}

Expand All @@ -65,6 +73,17 @@
SentrySamplingContext *context =
[[SentrySamplingContext alloc] initWithTransactionContext:transactionContext];

if (options.enableContinuousProfiling) {
SentrySamplerDecision *profilesSamplerDecision = sampleContinuousProfile(context, options);
if (profilesSamplerDecision.decision != kSentrySampleDecisionYes) {
SENTRY_LOG_DEBUG(@"Sampling out the launch continuous profile.");
return (SentryLaunchProfileConfig) { NO, nil, nil };
}

SENTRY_LOG_DEBUG(@"Will continuously profile the next session starting from launch.");
return (SentryLaunchProfileConfig) { YES, nil, profilesSamplerDecision };
}

SentrySamplerDecision *tracesSamplerDecision = sentry_sampleTrace(context, options);
if (tracesSamplerDecision.decision != kSentrySampleDecisionYes) {
SENTRY_LOG_DEBUG(@"Sampling out the launch trace.");
Expand All @@ -74,11 +93,11 @@
SentrySamplerDecision *profilesSamplerDecision
= sentry_sampleProfile(context, tracesSamplerDecision, options);
if (profilesSamplerDecision.decision != kSentrySampleDecisionYes) {
SENTRY_LOG_DEBUG(@"Sampling out the launch profile.");
SENTRY_LOG_DEBUG(@"Sampling out the launch legacy profile.");
return (SentryLaunchProfileConfig) { NO, nil, nil };
}

SENTRY_LOG_DEBUG(@"Will profile the next launch.");
SENTRY_LOG_DEBUG(@"Will start legacy profile next launch.");
return (SentryLaunchProfileConfig) { YES, tracesSamplerDecision, profilesSamplerDecision };
}

Expand All @@ -95,6 +114,16 @@
return context;
}

# pragma mark - Testing only

# if defined(TEST) || defined(TESTCI) || defined(DEBUG)
BOOL
sentry_willProfileNextLaunch(SentryOptions *options)
{
return sentry_shouldProfileNextLaunch(options).shouldProfile;
}
# endif // defined(TEST) || defined(TESTCI) || defined(DEBUG)

# pragma mark - Public

BOOL sentry_isTracingAppLaunch;
Expand All @@ -111,8 +140,12 @@

NSMutableDictionary<NSString *, NSNumber *> *configDict =
[NSMutableDictionary<NSString *, NSNumber *> dictionary];
configDict[kSentryLaunchProfileConfigKeyTracesSampleRate]
= config.tracesDecision.sampleRate;
if (options.enableContinuousProfiling) {
configDict[kSentryLaunchProfileConfigKeyContinuousProfiling] = @YES;
} else {
configDict[kSentryLaunchProfileConfigKeyTracesSampleRate]
= config.tracesDecision.sampleRate;
}
configDict[kSentryLaunchProfileConfigKeyProfilesSampleRate]
= config.profilesDecision.sampleRate;
writeAppLaunchProfilingConfigFile(configDict);
Expand All @@ -122,7 +155,6 @@
void
sentry_startLaunchProfile(void)
{

static dispatch_once_t onceToken;
// this function is called from SentryTracer.load but in the future we may expose access
// directly to customers, and we'll want to ensure it only runs once. dispatch_once is an
Expand All @@ -140,12 +172,23 @@
[SentryLog configure:YES diagnosticLevel:kSentryLevelDebug];
# endif // defined(DEBUG)

NSDictionary<NSString *, NSNumber *> *rates = appLaunchProfileConfiguration();
NSNumber *profilesRate = rates[kSentryLaunchProfileConfigKeyProfilesSampleRate];
NSNumber *tracesRate = rates[kSentryLaunchProfileConfigKeyTracesSampleRate];
if (profilesRate == nil || tracesRate == nil) {
SENTRY_LOG_DEBUG(
@"Received a nil configured launch sample rate, will not trace or profile.");
NSDictionary<NSString *, NSNumber *> *launchConfig = appLaunchProfileConfiguration();
NSNumber *profilesRate = launchConfig[kSentryLaunchProfileConfigKeyProfilesSampleRate];
if ([launchConfig[kSentryLaunchProfileConfigKeyContinuousProfiling] boolValue]) {
if (profilesRate == nil) {
SENTRY_LOG_DEBUG(@"Received a nil configured launch profile sample rate, will not "
@"start continuous profiler for launch.");
return;
}

[SentryContinuousProfiler start];
return;
}

NSNumber *tracesRate = launchConfig[kSentryLaunchProfileConfigKeyTracesSampleRate];
if (tracesRate == nil) {
SENTRY_LOG_DEBUG(@"Received a nil configured launch trace sample rate, will not start "
@"a profiled launch trace.");
return;
}

Expand Down
2 changes: 1 addition & 1 deletion Sources/Sentry/SentryProfiler.mm
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
void
sentry_manageProfilerOnStartSDK(SentryOptions *options, SentryHub *hub)
{
if (options.enableContinuousProfiling && !isTracingAppLaunch) {
if (options.enableContinuousProfiling) {
[SentryContinuousProfiler start];
return;
}
Expand Down
12 changes: 12 additions & 0 deletions Sources/Sentry/SentrySampling.m
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,18 @@
return calcSampleFromNumericalRate(options.profilesSampleRate);
}

SentrySamplerDecision *
sampleContinuousProfile(SentrySamplingContext *context, SentryOptions *options)
{
NSNumber *callbackRate = samplerCallbackRate(
options.profilesSampler, context, SENTRY_DEFAULT_PROFILES_SAMPLE_RATE);
if (callbackRate != nil) {
return calcSample(callbackRate);
}

return calcSampleFromNumericalRate(options.profilesSampleRate);
}

#endif // SENTRY_TARGET_PROFILING_SUPPORTED

NS_ASSUME_NONNULL_END
8 changes: 8 additions & 0 deletions Sources/Sentry/SentryTimeToDisplayTracker.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
# import "SentryFramesTracker.h"
# import "SentryLog.h"
# import "SentryMeasurementValue.h"
# import "SentryOptions+Private.h"
# import "SentryProfilingConditionals.h"
# import "SentrySDK+Private.h"
# import "SentrySpan.h"
# import "SentrySpanContext.h"
# import "SentrySpanId.h"
Expand Down Expand Up @@ -134,6 +136,9 @@ - (void)framesTrackerHasNewFrame:(NSDate *)newFrameDate
if (!_waitForFullDisplay) {
[SentryDependencyContainer.sharedInstance.framesTracker removeListener:self];
# if SENTRY_TARGET_PROFILING_SUPPORTED
if (SentrySDK.options.enableContinuousProfiling) {
return;
}
sentry_stopAndDiscardLaunchProfileTracer();
# endif // SENTRY_TARGET_PROFILING_SUPPORTED
}
Expand All @@ -144,6 +149,9 @@ - (void)framesTrackerHasNewFrame:(NSDate *)newFrameDate
self.fullDisplaySpan.timestamp = newFrameDate;
[self.fullDisplaySpan finish];
# if SENTRY_TARGET_PROFILING_SUPPORTED
if (SentrySDK.options.enableContinuousProfiling) {
return;
}
sentry_stopAndDiscardLaunchProfileTracer();
# endif // SENTRY_TARGET_PROFILING_SUPPORTED
}
Expand Down
7 changes: 0 additions & 7 deletions Sources/Sentry/SentryTracer.m
Original file line number Diff line number Diff line change
Expand Up @@ -113,13 +113,6 @@ @implementation SentryTracer {
static NSObject *appStartMeasurementLock;
static BOOL appStartMeasurementRead;

#if SENTRY_TARGET_PROFILING_SUPPORTED
+ (void)load
{
sentry_startLaunchProfile();
}
#endif // SENTRY_TARGET_PROFILING_SUPPORTED

+ (void)initialize
{
if (self == [SentryTracer class]) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
@class SentrySystemWrapper;
@class SentryThreadWrapper;
@class SentryThreadInspector;
@class SentryOptions;
@protocol SentryRandom;

#if SENTRY_HAS_METRIC_KIT
Expand Down
7 changes: 7 additions & 0 deletions Sources/Sentry/include/SentryLaunchProfiling.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@

NS_ASSUME_NONNULL_BEGIN

/**
* Whether or not the profiler started with the app launch. With legacy profiling, this means there
* is a tracer managing the profile that will eventually need to be stopped and either discarded (in
* the case of auto performance transactions) or also transmitted. With continuous profiling, this
* indicates whether or not the profiler that's currently running was started from app launch, or
* later with a manual profiler start from the SDK consumer.
*/
SENTRY_EXTERN BOOL sentry_isTracingAppLaunch;

/** Try to start a profiled trace for this app launch, if the configuration allows. */
Expand Down

0 comments on commit 4cc09ac

Please sign in to comment.