lib/asciidoctor/timings.rb in asciidoctor-1.5.6.2 vs lib/asciidoctor/timings.rb in asciidoctor-1.5.7

- old
+ new

@@ -5,36 +5,64 @@ @log = {} @timers = {} end def start key - @timers[key] = ::Time.now + @timers[key] = now end def record key - @log[key] = (::Time.now - (@timers.delete key)) + @log[key] = (now - (@timers.delete key)) end + def time *keys + time = keys.reduce(0) {|sum, key| sum + (@log[key] || 0) } + time > 0 ? time : nil + end + + def read + time :read + end + + def parse + time :parse + end + def read_parse - (time = (@log[:read] || 0) + (@log[:parse] || 0)) > 0 ? time : nil + time :read, :parse end def convert - @log[:convert] || 0 + time :convert end def read_parse_convert - (time = (@log[:read] || 0) + (@log[:parse] || 0) + (@log[:convert] || 0)) > 0 ? time : nil + time :read, :parse, :convert end + def write + time :write + end + def total - (time = (@log[:read] || 0) + (@log[:parse] || 0) + (@log[:convert] || 0) + (@log[:write] || 0)) > 0 ? time : nil + time :read, :parse, :convert, :write end def print_report to = $stdout, subject = nil to.puts %(Input file: #{subject}) if subject to.puts %( Time to read and parse source: #{'%05.5f' % read_parse.to_f}) to.puts %( Time to convert document: #{'%05.5f' % convert.to_f}) to.puts %( Total time (read, parse and convert): #{'%05.5f' % read_parse_convert.to_f}) + end + + if (::Process.const_defined? :CLOCK_MONOTONIC) && (::Process.respond_to? :clock_gettime) + CLOCK_ID = ::Process::CLOCK_MONOTONIC + def now + ::Process.clock_gettime CLOCK_ID + end + else + def now + ::Time.now + end end end end