summaryrefslogtreecommitdiff
path: root/vendor/bundle/ruby/3.4.0/gems/jekyll-4.4.1/lib/jekyll/profiler.rb
blob: f5dbfb18e7e8a088bb28f64e528710e44d67be7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# frozen_string_literal: true

module Jekyll
  class Profiler
    TERMINAL_TABLE_STYLES = {
      :alignment     => :right,
      :border_top    => false,
      :border_bottom => false,
    }.freeze
    private_constant :TERMINAL_TABLE_STYLES

    def self.tabulate(table_rows)
      require "terminal-table"

      rows   = table_rows.dup
      header = rows.shift
      output = +"\n"

      table = Terminal::Table.new do |t|
        t << header
        t << :separator
        rows.each { |row| t << row }
        t.style = TERMINAL_TABLE_STYLES
        t.align_column(0, :left)
      end

      output << table.to_s << "\n"
    end

    def initialize(site)
      @site = site
    end

    def profile_process
      profile_data = { "PHASE" => "TIME" }

      [:reset, :read, :generate, :render, :cleanup, :write].each do |method|
        start_time = Time.now
        @site.send(method)
        end_time = (Time.now - start_time).round(4)
        profile_data[method.to_s.upcase] = format("%.4f", end_time)
      end

      Jekyll.logger.info "\nBuild Process Summary:"
      Jekyll.logger.info Profiler.tabulate(Array(profile_data))

      Jekyll.logger.info "\nSite Render Stats:"
      @site.print_stats
    end
  end
end