# Total counts for summary (an array reference).
my $summary_CC;
+my $totals_CC;
# Totals for each function, for overall summary.
# hash(filename:fn_name => CC array)
$^W = 1;
}
+# Is this a line with all events zero?
+sub is_zero ($)
+{
+ my ($CC) = @_;
+ my $isZero = 1;
+ foreach my $i (0 .. (scalar @$CC)-1) {
+ $isZero = 0 if ($CC->[$i] >0);
+ }
+ return $isZero;
+}
+
# Add each event count to the CC array. '.' counts become undef, as do
# missing entries (implicitly).
sub line_to_CC ($)
$thresholds[0] = $single_threshold;
}
+ # Current directory, used to strip from file names if absolute
+ my $pwd = `pwd`;
+ chomp $pwd;
+ $pwd .= '/';
+
my $curr_obj = "";
my $curr_file;
my $curr_fn;
$tmp = {} unless defined $tmp;
$$tmp{$curr_cname} = 1;
$called_from_line->{$curr_file,$curr_line_num} = $tmp;
- $call_CCs{$curr_name,$curr_cname,$curr_line_num} = $CC;
- $call_counter{$curr_name,$curr_cname,$curr_line_num} = $curr_call_counter;
+ if(defined $call_CCs{$curr_name,$curr_cname,$curr_line_num}) {
+ add_array_a_to_b($CC, $call_CCs{$curr_name,$curr_cname,$curr_line_num});
+ $call_counter{$curr_name,$curr_cname,$curr_line_num} += $curr_call_counter;
+ }
+ else {
+ $call_CCs{$curr_name,$curr_cname,$curr_line_num} = $CC;
+ $call_counter{$curr_name,$curr_cname,$curr_line_num} = $curr_call_counter;
+ }
$curr_call_counter = 0;
if (defined $curr_file);
$curr_file = uncompressed_name("fl",$1);
+ $curr_file =~ s/^$pwd//;
$curr_file_ind_CCs = $all_ind_CCs{$curr_file};
$curr_file_ind_CCs = {} unless (defined $curr_file_ind_CCs);
$all_ind_CCs{$curr_file} = $curr_file_ind_CCs;
$curr_file = uncompressed_name("fl",$2);
+ $curr_file =~ s/^$pwd//;
$curr_name = "$curr_file:$curr_fn";
$curr_file_ind_CCs = $all_ind_CCs{$curr_file};
$curr_file_ind_CCs = {} unless (defined $curr_file_ind_CCs);
# ignore jump information
} elsif (s/^totals:\s+//) {
- #ignore
+ $totals_CC = line_to_CC($_);
} elsif (s/^summary:\s+//) {
$summary_CC = line_to_CC($_);
}
}
+ if ((not defined $summary_CC) || is_zero($summary_CC)) {
+ $summary_CC = $totals_CC;
+ }
+
# Check if summary line was present
if (not defined $summary_CC) {
warn("WARNING: missing final summary line, no summary will be printed\n");
}
- else {
- # Finish up handling final filename/fn_name counts
- $fn_totals{"$curr_file:$curr_fn"} = $curr_fn_CC
+
+ # Finish up handling final filename/fn_name counts
+ $fn_totals{"$curr_file:$curr_fn"} = $curr_fn_CC
if (defined $curr_file && defined $curr_fn);
- $all_ind_CCs{$curr_file} =
+ $all_ind_CCs{$curr_file} =
$curr_file_ind_CCs if (defined $curr_file);
- (scalar(@$summary_CC) == @events)
- or die("Line $.: summary event and total event mismatch\n");
- }
-
# Correct inclusive totals
if ($inclusive) {
foreach my $name (keys %cfn_totals) {