Class: XTrace::CallTree

Inherits:
Object
  • Object
show all
Defined in:
lib/xtrace/call_tree.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(call_trace, call_depth, call_time, call_total_elapsed, call_delta_elapsed) ⇒ CallTree

Returns a new instance of CallTree.



7
8
9
10
11
12
13
14
15
# File 'lib/xtrace/call_tree.rb', line 7

def initialize(call_trace, call_depth, call_time, call_total_elapsed, call_delta_elapsed)
  @call_trace = call_trace.gsub(/\(.*\)/, '(...)')
  @call_depth = call_depth
  @call_time = call_time
  @call_total_elapsed = call_total_elapsed
  @call_delta_elapsed = call_delta_elapsed
  @calls = []
  @elapsed_time = call_delta_elapsed
end

Instance Attribute Details

#call_delta_elapsedObject

Returns the value of attribute call_delta_elapsed.



3
4
5
# File 'lib/xtrace/call_tree.rb', line 3

def call_delta_elapsed
  @call_delta_elapsed
end

#call_depthObject

Returns the value of attribute call_depth.



3
4
5
# File 'lib/xtrace/call_tree.rb', line 3

def call_depth
  @call_depth
end

#call_timeObject

Returns the value of attribute call_time.



3
4
5
# File 'lib/xtrace/call_tree.rb', line 3

def call_time
  @call_time
end

#call_total_elapsedObject

Returns the value of attribute call_total_elapsed.



3
4
5
# File 'lib/xtrace/call_tree.rb', line 3

def call_total_elapsed
  @call_total_elapsed
end

#call_traceObject

Returns the value of attribute call_trace.



3
4
5
# File 'lib/xtrace/call_tree.rb', line 3

def call_trace
  @call_trace
end

#callsObject

Returns the value of attribute calls.



3
4
5
# File 'lib/xtrace/call_tree.rb', line 3

def calls
  @calls
end

#elapsed_timeObject

Returns the value of attribute elapsed_time.



3
4
5
# File 'lib/xtrace/call_tree.rb', line 3

def elapsed_time
  @elapsed_time
end

#parentObject

Returns the value of attribute parent.



3
4
5
# File 'lib/xtrace/call_tree.rb', line 3

def parent
  @parent
end

Instance Method Details

#<<(call_tree) ⇒ Object



34
35
36
37
38
# File 'lib/xtrace/call_tree.rb', line 34

def <<(call_tree)
  add_time(call_tree.elapsed_time)
  call_tree.parent = self
  @calls << call_tree
end

#add_time(elapsed_time) ⇒ Object



29
30
31
32
# File 'lib/xtrace/call_tree.rb', line 29

def add_time(elapsed_time)
  @elapsed_time += elapsed_time
  @parent.add_time(elapsed_time) unless @parent.nil?
end

#call_path(delim = ' --> ') ⇒ Object



25
26
27
# File 'lib/xtrace/call_tree.rb', line 25

def call_path(delim = ' --> ')
  call_stack.join(delim)
end

#call_stackObject



17
18
19
20
21
22
23
# File 'lib/xtrace/call_tree.rb', line 17

def call_stack
  if parent.nil?
    [@call_trace]
  else
    [parent.call_stack, @call_trace].flatten
  end
end

#outputObject



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/xtrace/call_tree.rb', line 40

def output
  #if @calls.length > 1
  if @elapsed_time > 1.0
    prefix = ' ' * (@call_depth*2)
    puts "#{prefix}Call: #{@call_trace}"
    #puts "#{prefix}\tPath: \n\t > #{self.call_path("\n\t > ")}"
    puts "#{prefix}\tSubcalls:#{@calls.length}"
    puts "#{prefix}\tTime Elapsed: #{@elapsed_time}"
  end
  @calls.each do |call|
    call.output
  end
end