예제 #1
0
        public void AddChild(Timing timing)
        {
            lock(Children)
            {
                Children.Add(timing);
            }

            timing.Profiler = Profiler;
            timing.ParentTiming = this;
        }
예제 #2
0
        // 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);
        }
예제 #3
0
        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);
            }
        }