public void AddChild(Timing timing) { lock(Children) { Children.Add(timing); } timing.Profiler = Profiler; timing.ParentTiming = this; }
// TODO: figure out how to pass regular parameters along with injected ones public Profiler(ILoggerFactory loggerFactory, IHttpContextAccessor contextAccessor) { _logger = loggerFactory.CreateLogger<Profiler>(); Id = Guid.NewGuid(); Started = DateTime.UtcNow; _sw = Stopwatch.StartNew(); Root = new Timing(this, contextAccessor.HttpContext.Request.Path); }
private void PrintoutTiming(Timing timing, int level = 0) { if (timing == null) return; var shift = new string(' ', level); _logger.LogInformation($"{shift}{timing.Name} took {timing.DurationMilliseconds} ms in total ({timing.StartMilliseconds} -> {timing.StopMilliseconds}):"); foreach (var childTiming in timing.Children) { PrintoutTiming(childTiming, level + 2); } }