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