From 239d9d64ac2eb2f778c23e255e1ea20a12171fc2 Mon Sep 17 00:00:00 2001 From: SingleCopy Date: Thu, 30 May 2024 10:56:00 +0100 Subject: [PATCH] MeasureDurationResult incorrect when running in linux (#4785) Use the Stopwatch.Frequency when calculating the milli and micro seconds Co-authored-by: Andy Rudd Co-authored-by: Gladwin Johnson <90415114+gladjohn@users.noreply.github.com> Co-authored-by: Neha Bhargava <61847233+neha-bhargava@users.noreply.github.com> --- .../Utils/MeasureDurationResult.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/client/Microsoft.Identity.Client/Utils/MeasureDurationResult.cs b/src/client/Microsoft.Identity.Client/Utils/MeasureDurationResult.cs index 3fc74ad417..7928e9b9e3 100644 --- a/src/client/Microsoft.Identity.Client/Utils/MeasureDurationResult.cs +++ b/src/client/Microsoft.Identity.Client/Utils/MeasureDurationResult.cs @@ -2,9 +2,7 @@ // Licensed under the MIT License. using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Diagnostics; using System.Threading.Tasks; namespace Microsoft.Identity.Client.Utils @@ -14,11 +12,14 @@ namespace Microsoft.Identity.Client.Utils /// internal struct MeasureDurationResult { + private const int TicksPerMicrosecond = 10; + private static readonly double s_tickFrequency = TimeSpan.TicksPerSecond / (double)Stopwatch.Frequency; + public MeasureDurationResult(TResult result, long ticks) { Result = result; - Milliseconds = ticks / TimeSpan.TicksPerMillisecond; - Microseconds = ticks / (TimeSpan.TicksPerMillisecond / 1000); + Milliseconds = (long)(ticks / s_tickFrequency / TimeSpan.TicksPerMillisecond); + Microseconds = (long)(ticks * s_tickFrequency / TicksPerMicrosecond % 1000); Ticks = ticks; } @@ -45,10 +46,13 @@ public MeasureDurationResult(TResult result, long ticks) /// internal struct MeasureDurationResult { + private const int TicksPerMicrosecond = 10; + private static readonly double s_tickFrequency = TimeSpan.TicksPerSecond / (double)Stopwatch.Frequency; + public MeasureDurationResult(long ticks) { - Milliseconds = ticks / TimeSpan.TicksPerMillisecond; - Microseconds = ticks / (TimeSpan.TicksPerMillisecond / 1000); + Milliseconds = (long)(ticks * s_tickFrequency / TimeSpan.TicksPerMillisecond % 1000); + Microseconds = (long)(ticks * s_tickFrequency / TicksPerMicrosecond % 1000); Ticks = ticks; }