public StopwatchCheckpoint(string name, StopwatchCheckpoint parentCheckpoint, long elapsedSinceStopwatchStart, long elapsedSinceParent)
 {
     Name                       = name;
     ParentCheckpoint           = parentCheckpoint;
     ElapsedSinceStopwatchStart = elapsedSinceStopwatchStart;
     ElapsedSinceParent         = elapsedSinceParent;
 }
    public static StopwatchCheckpoint Checkpoint(this Stopwatch stopwatch, string name = "")
    {
        var elapsedTicks = stopwatch.ElapsedTicks;
        var checkpoint   = new StopwatchCheckpoint(name,
                                                   null,
                                                   elapsedTicks,
                                                   elapsedTicks);

        return(checkpoint);
    }
    public static StopwatchCheckpoint Checkpoint(this Stopwatch stopwatch, string name, StopwatchCheckpoint parentCheckpoint)
    {
        var elapsedTicks = stopwatch.ElapsedTicks;
        var checkpoint   = new StopwatchCheckpoint(name,
                                                   parentCheckpoint,
                                                   elapsedTicks,
                                                   elapsedTicks - parentCheckpoint.ElapsedSinceStopwatchStart);

        return(checkpoint);
    }