You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
- 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);
- }
- }
- }
- }
|