Object
# File lib/rcov/differential_analyzer.rb, line 6
6: def initialize(install_hook_meth, remove_hook_meth, reset_meth)
7: @cache_state = :wait
8: @start_raw_data = data_default
9: @end_raw_data = data_default
10: @aggregated_data = data_default
11: @install_hook_meth = install_hook_meth
12: @remove_hook_meth= remove_hook_meth
13: @reset_meth= reset_meth
14: end
Start monitoring execution to gather information. Such data will be collected until # is called.
Use # instead if possible.
# File lib/rcov/differential_analyzer.rb, line 29
29: def install_hook
30: @start_raw_data = raw_data_absolute
31: Rcov::RCOV__.send(@install_hook_meth)
32: @cache_state = :hooked
33: @@mutex.synchronize{ self.class.hook_level += 1 }
34: end
Stop collecting information. # will also stop collecting info if it is run inside a # block.
# File lib/rcov/differential_analyzer.rb, line 39
39: def remove_hook
40: @@mutex.synchronize do
41: self.class.hook_level -= 1
42: Rcov::RCOV__.send(@remove_hook_meth) if self.class.hook_level == 0
43: end
44: @end_raw_data = raw_data_absolute
45: @cache_state = :done
46: # force computation of the stats for the traced code in this run;
47: # we cannot simply let it be if self.class.hook_level == 0 because
48: # some other analyzer could install a hook, causing the raw_data_absolute
49: # to change again.
50: # TODO: lazy computation of raw_data_relative, only when the hook gets
51: # activated again.
52: raw_data_relative
53: end
Remove the data collected so far. Further collection will start from scratch.
# File lib/rcov/differential_analyzer.rb, line 57
57: def reset
58: @@mutex.synchronize do
59: if self.class.hook_level == 0
60: # Unfortunately there's no way to report this as covered with rcov:
61: # if we run the tests under rcov self.class.hook_level will be >= 1 !
62: # It is however executed when we run the tests normally.
63: Rcov::RCOV__.send(@reset_meth)
64: @start_raw_data = data_default
65: @end_raw_data = data_default
66: else
67: @start_raw_data = @end_raw_data = raw_data_absolute
68: end
69: @raw_data_relative = data_default
70: @aggregated_data = data_default
71: end
72: end
# File lib/rcov/differential_analyzer.rb, line 88
88: def aggregate_data(aggregated_data, delta)
89: raise "must be implemented by the subclass"
90: end
# File lib/rcov/differential_analyzer.rb, line 92
92: def compute_raw_data_difference(first, last)
93: raise "must be implemented by the subclass"
94: end
# File lib/rcov/differential_analyzer.rb, line 98
98: def raw_data_relative
99: case @cache_state
100: when :wait
101: return @aggregated_data
102: when :hooked
103: new_start = raw_data_absolute
104: new_diff = compute_raw_data_difference(@start_raw_data, new_start)
105: @start_raw_data = new_start
106: when :done
107: @cache_state = :wait
108: new_diff = compute_raw_data_difference(@start_raw_data,
109: @end_raw_data)
110: end
111:
112: aggregate_data(@aggregated_data, new_diff)
113: @aggregated_data
114: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.