DsesSamplerBuilder
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace System.Diagnostics
{
internal static class DsesSamplerBuilder
{
public static DsesSampleActivityFunc CreateParentRatioSampler(double ratio)
{
long idUpperBound = (ratio <= 0) ? (-9223372036854775808) : ((ratio >= 1) ? 9223372036854775807 : ((long)(ratio * 9.223372036854776E+18)));
return delegate(bool hasActivityContext, ref ActivityCreationOptions<ActivityContext> options) {
if (hasActivityContext && options.TraceId != default(ActivityTraceId)) {
ActivityContext parentContext = options.Parent;
ActivitySamplingResult activitySamplingResult = ParentRatioSampler(idUpperBound, ref parentContext, options.TraceId);
if (activitySamplingResult != 0 || (!(parentContext == default(ActivityContext)) && !parentContext.IsRemote))
return activitySamplingResult;
return ActivitySamplingResult.PropagationData;
}
return ActivitySamplingResult.None;
};
}
public unsafe static ActivitySamplingResult ParentRatioSampler(long idUpperBound, [In] [System.Runtime.CompilerServices.IsReadOnly] ref ActivityContext parentContext, ActivityTraceId traceId)
{
if (parentContext.TraceId != default(ActivityTraceId)) {
if (!parentContext.TraceFlags.HasFlag(ActivityTraceFlags.Recorded))
return ActivitySamplingResult.None;
return ActivitySamplingResult.AllDataAndRecorded;
}
Span<byte> span = new Span<byte>(stackalloc byte[16], 16);
traceId.CopyTo(span);
if (Math.Abs(<ParentRatioSampler>g__GetLowerLong|1_0(span)) >= idUpperBound)
return ActivitySamplingResult.None;
return ActivitySamplingResult.AllDataAndRecorded;
}
}
}