lib/skylight/messages/trace.rb in skylight-0.1.4.alpha1 vs lib/skylight/messages/trace.rb in skylight-0.1.4.alpha2

- old
+ new

@@ -25,10 +25,13 @@ @config = config @start = start @spans = [] @stack = [] @parents = [] + + # Track time + @last_seen_time = start end def root(cat, title = nil, desc = nil, annot = {}) return unless block_given? return yield unless @stack == [] @@ -64,10 +67,12 @@ end def record(time, cat, title = nil, desc = nil, annot = {}) return if @busted + track_time(time) + sp = span(time, cat, title, desc, annot) return self if :skip == sp inc_children @@ -77,20 +82,24 @@ end def start(time, cat, title = nil, desc = nil, annot = {}) return if @busted + track_time(time) + sp = span(time, cat, title, desc, annot) push(sp) self end def stop(time) return if @busted + track_time(time) + sp = pop return self if :skip == sp sp.duration = relativize(time) - sp.started_at @@ -173,9 +182,20 @@ if parent = @parents[-1] ((time - parent.absolute_time) / 100).to_i else ((time - @start) / 100).to_i end + end + + def track_time(time) + if time < @last_seen_time + @busted = true + raise TraceError, "time moving backwards; " \ + "prev=#{@last_seen_time}; " \ + "curr=#{time}" + end + + @last_seen_time = time end end end