@@ -31,12 +31,9 @@ class SentryTracesSampler {
3131 final tracesSampler = _options.tracesSampler;
3232 if (tracesSampler != null ) {
3333 try {
34- final result = tracesSampler (samplingContext);
35- if (result != null ) {
36- return SentryTracesSamplingDecision (
37- _sample (result),
38- sampleRate: result,
39- );
34+ final sampleRate = tracesSampler (samplingContext);
35+ if (sampleRate != null ) {
36+ return _makeSampleDecision (sampleRate);
4037 }
4138 } catch (exception, stackTrace) {
4239 _options.logger (
@@ -64,10 +61,7 @@ class SentryTracesSampler {
6461 double ? optionsOrDefaultRate = optionsRate ?? defaultRate;
6562
6663 if (optionsOrDefaultRate != null ) {
67- return SentryTracesSamplingDecision (
68- _sample (optionsOrDefaultRate),
69- sampleRate: optionsOrDefaultRate,
70- );
64+ return _makeSampleDecision (optionsOrDefaultRate);
7165 }
7266
7367 return SentryTracesSamplingDecision (false );
@@ -78,8 +72,18 @@ class SentryTracesSampler {
7872 if (optionsRate == null || ! tracesSamplingDecision.sampled) {
7973 return false ;
8074 }
81- return _sample (optionsRate);
75+ return _isSampled (optionsRate);
8276 }
8377
84- bool _sample (double result) => ! (result < _random.nextDouble ());
78+ SentryTracesSamplingDecision _makeSampleDecision (double sampleRate) {
79+ final sampleRand = _random.nextDouble ();
80+ final sampled = _isSampled (sampleRate, sampleRand: sampleRand);
81+ return SentryTracesSamplingDecision (sampled,
82+ sampleRate: sampleRate, sampleRand: sampleRand);
83+ }
84+
85+ bool _isSampled (double sampleRate, {double ? sampleRand}) {
86+ final rand = sampleRand ?? _random.nextDouble ();
87+ return rand <= sampleRate;
88+ }
8589}
0 commit comments