You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.1 KiB
C#
37 lines
1.1 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
|
|
namespace Cysharp.Threading.Tasks.Internal
|
|
{
|
|
internal readonly struct ValueStopwatch
|
|
{
|
|
static readonly double TimestampToTicks = TimeSpan.TicksPerSecond / (double)Stopwatch.Frequency;
|
|
|
|
readonly long startTimestamp;
|
|
|
|
public static ValueStopwatch StartNew() => new ValueStopwatch(Stopwatch.GetTimestamp());
|
|
|
|
ValueStopwatch(long startTimestamp)
|
|
{
|
|
this.startTimestamp = startTimestamp;
|
|
}
|
|
|
|
public TimeSpan Elapsed => TimeSpan.FromTicks(this.ElapsedTicks);
|
|
|
|
public bool IsInvalid => startTimestamp == 0;
|
|
|
|
public long ElapsedTicks
|
|
{
|
|
get
|
|
{
|
|
if (startTimestamp == 0)
|
|
{
|
|
throw new InvalidOperationException("Detected invalid initialization(use 'default'), only to create from StartNew().");
|
|
}
|
|
|
|
var delta = Stopwatch.GetTimestamp() - startTimestamp;
|
|
return (long)(delta * TimestampToTicks);
|
|
}
|
|
}
|
|
}
|
|
} |