[prev in list] [next in list] [prev in thread] [next in thread]
List: ltp-cvs
Subject: [Ltp-cvs] utils/analysis/lcov/bin genhtml, 1.42, 1.43 lcov, 1.56,
From: Peter Oberparleiter <oberpapr () users ! sourceforge ! net>
Date: 2010-01-28 15:59:25
Message-ID: E1NaWmD-00005D-DY () sfp-cvsdas-2 ! v30 ! ch3 ! sourceforge ! com
[Download RAW message or body]
Update of /cvsroot/ltp/utils/analysis/lcov/bin
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv32611
Modified Files:
genhtml lcov
Log Message:
lcov: fix branch coverage related issues
- warnings when combining certain combinations of branch data
- branches are not merged correctly when multiple input files are specified
to genhtml or when lcov -a is used
Index: genhtml
===================================================================
RCS file: /cvsroot/ltp/utils/analysis/lcov/bin/genhtml,v
retrieving revision 1.42
retrieving revision 1.43
diff -C2 -d -r1.42 -r1.43
*** genhtml 27 Jan 2010 12:00:05 -0000 1.42
--- genhtml 28 Jan 2010 15:59:23 -0000 1.43
***************
*** 152,155 ****
--- 152,158 ----
our $BR_CLOSE = 5;
+ # Branch data combination types
+ our $BR_SUB = 0;
+ our $BR_ADD = 1;
# Data related prototypes
***************
*** 187,193 ****
--- 190,199 ----
sub write_dir_page($$$$$$$$$$$$$$$$$);
sub classify_rate($$$$);
+ sub br_taken_add($$);
+ sub br_taken_sub($$);
sub br_ivec_len($);
sub br_ivec_get($$);
sub br_ivec_push($$$$);
+ sub combine_brcount($$$);
sub get_br_found_and_hit($);
sub warn_handler($);
***************
*** 1864,1875 ****
#
! # add_brcount(brcount1, brcount2)
#
! # Add branch coverage data. Return list (brcount_added, br_found, br_hit)
#
! sub add_brcount($$)
{
! my ($brcount1, $brcount2) = @_;
my $line;
my $block;
--- 1870,1883 ----
#
! # combine_brcount(brcount1, brcount2, type)
#
! # If add is BR_ADD, add branch coverage data and return list (brcount_added,
! # br_found, br_hit). If add is BR_SUB, subtract the taken values of brcount2
! # from brcount1 and return (brcount_sub, br_found, br_hit).
#
! sub combine_brcount($$$)
{
! my ($brcount1, $brcount2, $type) = @_;
my $line;
my $block;
***************
*** 1881,1891 ****
my $result;
! # Add branches from first count to database
$db = brcount_to_db($brcount1);
! # Add branches from second count to database
foreach $line (keys(%{$brcount2})) {
my $brdata = $brcount2->{$line};
- my $i;
my $num = br_ivec_len($brdata);
for ($i = 0; $i < $num; $i++) {
--- 1889,1899 ----
my $result;
! # Convert branches from first count to database
$db = brcount_to_db($brcount1);
! # Combine values from database and second count
foreach $line (keys(%{$brcount2})) {
my $brdata = $brcount2->{$line};
my $num = br_ivec_len($brdata);
+ my $i;
for ($i = 0; $i < $num; $i++) {
***************
*** 1893,1905 ****
my $new_taken = $db->{$line}->{$block}->{$branch};
! $new_taken = '-' if (!defined($new_taken));
! if ($taken ne '-') {
! if ($new_taken eq '-') {
! $new_taken = $taken;
! } else {
! $new_taken += $taken;
! }
}
! $db->{$line}->{$block}->{$branch} = $new_taken;
}
}
--- 1901,1911 ----
my $new_taken = $db->{$line}->{$block}->{$branch};
! if ($type == $BR_ADD) {
! $new_taken = br_taken_add($new_taken, $taken);
! } elsif ($type == $BR_SUB) {
! $new_taken = br_taken_sub($new_taken, $taken);
}
! $db->{$line}->{$block}->{$branch} = $new_taken
! if (defined($new_taken));
}
}
***************
*** 1930,1935 ****
# Branch coverage data for this testname exists
# in both data sets: add
! ($brcount) = add_brcount($testbrdata1->{$testname},
! $testbrdata2->{$testname});
$result{$testname} = $brcount;
next;
--- 1936,1941 ----
# Branch coverage data for this testname exists
# in both data sets: add
! ($brcount) = combine_brcount($testbrdata1->{$testname},
! $testbrdata2->{$testname}, $BR_ADD);
$result{$testname} = $brcount;
next;
***************
*** 2017,2021 ****
$result_testbrdata = add_testbrdata($testbrdata1, $testbrdata2);
($result_sumbrcount, $br_found, $br_hit) =
! add_brcount($sumbrcount1, $sumbrcount2);
# Combine testdata
--- 2023,2027 ----
$result_testbrdata = add_testbrdata($testbrdata1, $testbrdata2);
($result_sumbrcount, $br_found, $br_hit) =
! combine_brcount($sumbrcount1, $sumbrcount2, $BR_ADD);
# Combine testdata
***************
*** 4692,4695 ****
--- 4698,4769 ----
#
+ # br_taken_to_num(taken)
+ #
+ # Convert a branch taken value .info format to number format.
+ #
+
+ sub br_taken_to_num($)
+ {
+ my ($taken) = @_;
+
+ return 0 if ($taken eq '-');
+ return $taken + 1;
+ }
+
+
+ #
+ # br_num_to_taken(taken)
+ #
+ # Convert a branch taken value in number format to .info format.
+ #
+
+ sub br_num_to_taken($)
+ {
+ my ($taken) = @_;
+
+ return '-' if ($taken == 0);
+ return $taken - 1;
+ }
+
+
+ #
+ # br_taken_add(taken1, taken2)
+ #
+ # Return the result of taken1 + taken2 for 'branch taken' values.
+ #
+
+ sub br_taken_add($$)
+ {
+ my ($t1, $t2) = @_;
+
+ return $t1 if (!defined($t2));
+ return $t2 if (!defined($t1));
+ return $t1 if ($t2 eq '-');
+ return $t2 if ($t1 eq '-');
+ return $t1 + $t2;
+ }
+
+
+ #
+ # br_taken_sub(taken1, taken2)
+ #
+ # Return the result of taken1 - taken2 for 'branch taken' values. Return 0
+ # if the result would become negative.
+ #
+
+ sub br_taken_sub($$)
+ {
+ my ($t1, $t2) = @_;
+
+ return $t1 if (!defined($t2));
+ return undef if (!defined($t1));
+ return $t1 if ($t1 eq '-');
+ return $t1 if ($t2 eq '-');
+ return 0 if $t2 > $t1;
+ return $t1 - $t2;
+ }
+
+
+ #
# br_ivec_len(vector)
#
***************
*** 4726,4734 ****
# Decode taken value from an integer
! if ($taken == 0) {
! $taken = "-";
! } else {
! $taken--;
! }
return ($block, $branch, $taken);
--- 4800,4804 ----
# Decode taken value from an integer
! $taken = br_num_to_taken($taken);
return ($block, $branch, $taken);
***************
*** 4739,4743 ****
# br_ivec_push(vector, block, branch, taken)
#
! # Add an entry to the branch coverage vector.
#
--- 4809,4814 ----
# br_ivec_push(vector, block, branch, taken)
#
! # Add an entry to the branch coverage vector. If an entry with the same
! # branch ID already exists, add the corresponding taken values.
#
***************
*** 4746,4760 ****
my ($vec, $block, $branch, $taken) = @_;
my $offset;
$vec = "" if (!defined($vec));
- $offset = br_ivec_len($vec) * $BR_VEC_ENTRIES;
! # Encode taken value into an integer
! if ($taken eq "-") {
! $taken = 0;
! } else {
! $taken++;
}
# Add to vector
vec($vec, $offset + $BR_BLOCK, $BR_VEC_WIDTH) = $block;
--- 4817,4840 ----
my ($vec, $block, $branch, $taken) = @_;
my $offset;
+ my $num = br_ivec_len($vec);
+ my $i;
$vec = "" if (!defined($vec));
! # Check if branch already exists in vector
! for ($i = 0; $i < $num; $i++) {
! my ($v_block, $v_branch, $v_taken) = br_ivec_get($vec, $i);
!
! next if ($v_block != $block || $v_branch != $branch);
!
! # Add taken counts
! $v_taken = br_num_to_taken($v_taken);
! $taken = br_taken_add($taken, $v_taken);
! last;
}
+ $offset = $i * $BR_VEC_ENTRIES;
+ $taken = br_taken_to_num($taken);
+
# Add to vector
vec($vec, $offset + $BR_BLOCK, $BR_VEC_WIDTH) = $block;
***************
*** 5165,5214 ****
#
- # subtract_brcounts(data, base)
- #
- # Subtract branch call counts found in base from those in data.
- # Return (data, br_found, br_hit).
- #
-
- sub subtract_brcounts($$)
- {
- my ($brcount, $brcount_base) = @_;
- my $line;
- my $block;
- my $branch;
- my $taken;
- my $db;
- my $br_found = 0;
- my $br_hit = 0;
- my $result;
-
- # Add branches to database
- $db = brcount_to_db($brcount);
- # Subtract counts
- foreach $line (keys(%{$brcount_base})) {
- my $brdata = $brcount_base->{$line};
- my $i;
- my $num = br_ivec_len($brdata);
-
- for ($i = 0; $i < $num; $i++) {
- my $db_taken;
- ($block, $branch, $taken) = br_ivec_get($brdata, $i);
-
- $db_taken = $db->{$line}->{$block}->{$branch};
- next if (!defined($db_taken));
- next if ($db_taken eq '-');
- $db_taken -= $taken;
- $db_taken = 0 if ($db_taken < 0);
- $db->{$line}->{$block}->{$branch} = $db_taken;
- }
- }
- # Convert database back to brcount format
- ($result, $br_found, $br_hit) = db_to_brcount($db);
-
- return ($result, $br_found, $br_hit);
- }
-
-
- #
# apply_baseline(data_ref, baseline_ref)
#
--- 5245,5248 ----
***************
*** 5289,5294 ****
$base_sumfnccount);
($data_testbrcount) =
! subtract_brcounts($data_testbrcount,
! $base_sumbrcount);
--- 5323,5328 ----
$base_sumfnccount);
($data_testbrcount) =
! combine_brcount($data_testbrcount,
! $base_sumbrcount, $BR_SUB);
***************
*** 5318,5322 ****
add_fnccount($sumfnccount, $data_testfnccount);
($sumbrcount, $br_found, $br_hit) =
! add_brcount($sumbrcount, $data_testbrcount);
}
--- 5352,5357 ----
add_fnccount($sumfnccount, $data_testfnccount);
($sumbrcount, $br_found, $br_hit) =
! combine_brcount($sumbrcount, $data_testbrcount,
! $BR_ADD);
}
Index: lcov
===================================================================
RCS file: /cvsroot/ltp/utils/analysis/lcov/bin/lcov,v
retrieving revision 1.56
retrieving revision 1.57
diff -C2 -d -r1.56 -r1.57
*** lcov 27 Jan 2010 12:10:04 -0000 1.56
--- lcov 28 Jan 2010 15:59:23 -0000 1.57
***************
*** 95,98 ****
--- 95,102 ----
our $BR_VEC_WIDTH = 32;
+ # Branch data combination types
+ our $BR_SUB = 0;
+ our $BR_ADD = 1;
+
# Prototypes
sub print_usage(*);
***************
*** 135,138 ****
--- 139,143 ----
sub create_package($$$;$);
sub get_func_found_and_hit($);
+ sub br_ivec_get($$);
# Global variables & initialization
***************
*** 1264,1267 ****
--- 1269,1341 ----
#
+ # br_taken_to_num(taken)
+ #
+ # Convert a branch taken value .info format to number format.
+ #
+
+ sub br_taken_to_num($)
+ {
+ my ($taken) = @_;
+
+ return 0 if ($taken eq '-');
+ return $taken + 1;
+ }
+
+
+ #
+ # br_num_to_taken(taken)
+ #
+ # Convert a branch taken value in number format to .info format.
+ #
+
+ sub br_num_to_taken($)
+ {
+ my ($taken) = @_;
+
+ return '-' if ($taken == 0);
+ return $taken - 1;
+ }
+
+
+ #
+ # br_taken_add(taken1, taken2)
+ #
+ # Return the result of taken1 + taken2 for 'branch taken' values.
+ #
+
+ sub br_taken_add($$)
+ {
+ my ($t1, $t2) = @_;
+
+ return $t1 if (!defined($t2));
+ return $t2 if (!defined($t1));
+ return $t1 if ($t2 eq '-');
+ return $t2 if ($t1 eq '-');
+ return $t1 + $t2;
+ }
+
+
+ #
+ # br_taken_sub(taken1, taken2)
+ #
+ # Return the result of taken1 - taken2 for 'branch taken' values. Return 0
+ # if the result would become negative.
+ #
+
+ sub br_taken_sub($$)
+ {
+ my ($t1, $t2) = @_;
+
+ return $t1 if (!defined($t2));
+ return undef if (!defined($t1));
+ return $t1 if ($t1 eq '-');
+ return $t1 if ($t2 eq '-');
+ return 0 if $t2 > $t1;
+ return $t1 - $t2;
+ }
+
+
+ #
+ #
# br_ivec_len(vector)
#
***************
*** 1281,1285 ****
# br_ivec_push(vector, block, branch, taken)
#
! # Add an entry to the branch coverage vector.
#
--- 1355,1360 ----
# br_ivec_push(vector, block, branch, taken)
#
! # Add an entry to the branch coverage vector. If an entry with the same
! # branch ID already exists, add the corresponding taken values.
#
***************
*** 1288,1302 ****
my ($vec, $block, $branch, $taken) = @_;
my $offset;
$vec = "" if (!defined($vec));
- $offset = br_ivec_len($vec) * $BR_VEC_ENTRIES;
! # Encode taken value into an integer
! if ($taken eq "-") {
! $taken = 0;
! } else {
! $taken++;
}
# Add to vector
vec($vec, $offset + $BR_BLOCK, $BR_VEC_WIDTH) = $block;
--- 1363,1386 ----
my ($vec, $block, $branch, $taken) = @_;
my $offset;
+ my $num = br_ivec_len($vec);
+ my $i;
$vec = "" if (!defined($vec));
! # Check if branch already exists in vector
! for ($i = 0; $i < $num; $i++) {
! my ($v_block, $v_branch, $v_taken) = br_ivec_get($vec, $i);
!
! next if ($v_block != $block || $v_branch != $branch);
!
! # Add taken counts
! $v_taken = br_num_to_taken($v_taken);
! $taken = br_taken_add($taken, $v_taken);
! last;
}
+ $offset = $i * $BR_VEC_ENTRIES;
+ $taken = br_taken_to_num($taken);
+
# Add to vector
vec($vec, $offset + $BR_BLOCK, $BR_VEC_WIDTH) = $block;
***************
*** 1328,1336 ****
# Decode taken value from an integer
! if ($taken == 0) {
! $taken = "-";
! } else {
! $taken--;
! }
return ($block, $branch, $taken);
--- 1412,1416 ----
# Decode taken value from an integer
! $taken = br_num_to_taken($taken);
return ($block, $branch, $taken);
***************
*** 2057,2069 ****
#
! # add_brcount(brcount1, brcount2)
! #
! # Add branch coverage data. Return list (brcount_added, br_found, br_hit)
#
! sub add_brcount($$)
{
! my ($brcount1, $brcount2) = @_;
my $line;
my $block;
--- 2137,2150 ----
+ # combine_brcount(brcount1, brcount2, type)
#
! # If add is BR_ADD, add branch coverage data and return list (brcount_added,
! # br_found, br_hit). If add is BR_SUB, subtract the taken values of brcount2
! # from brcount1 and return (brcount_sub, br_found, br_hit).
#
! sub combine_brcount($$$)
{
! my ($brcount1, $brcount2, $type) = @_;
my $line;
my $block;
***************
*** 2075,2085 ****
my $result;
! # Add branches from first count to database
$db = brcount_to_db($brcount1);
! # Add branches from second count to database
foreach $line (keys(%{$brcount2})) {
my $brdata = $brcount2->{$line};
- my $i;
my $num = br_ivec_len($brdata);
for ($i = 0; $i < $num; $i++) {
--- 2156,2166 ----
my $result;
! # Convert branches from first count to database
$db = brcount_to_db($brcount1);
! # Combine values from database and second count
foreach $line (keys(%{$brcount2})) {
my $brdata = $brcount2->{$line};
my $num = br_ivec_len($brdata);
+ my $i;
for ($i = 0; $i < $num; $i++) {
***************
*** 2087,2099 ****
my $new_taken = $db->{$line}->{$block}->{$branch};
! $new_taken = '-' if (!defined($new_taken));
! if ($taken ne '-') {
! if ($new_taken eq '-') {
! $new_taken = $taken;
! } else {
! $new_taken += $taken;
! }
}
! $db->{$line}->{$block}->{$branch} = $new_taken;
}
}
--- 2168,2178 ----
my $new_taken = $db->{$line}->{$block}->{$branch};
! if ($type == $BR_ADD) {
! $new_taken = br_taken_add($new_taken, $taken);
! } elsif ($type == $BR_SUB) {
! $new_taken = br_taken_sub($new_taken, $taken);
}
! $db->{$line}->{$block}->{$branch} = $new_taken
! if (defined($new_taken));
}
}
***************
*** 2124,2130 ****
# Branch coverage data for this testname exists
# in both data sets: add
! ($brcount) = add_brcount(
$testbrdata1->{$testname},
! $testbrdata2->{$testname});
$result{$testname} = $brcount;
next;
--- 2203,2209 ----
# Branch coverage data for this testname exists
# in both data sets: add
! ($brcount) = combine_brcount(
$testbrdata1->{$testname},
! $testbrdata2->{$testname}, $BR_ADD);
$result{$testname} = $brcount;
next;
***************
*** 2212,2216 ****
$result_testbrdata = add_testbrdata($testbrdata1, $testbrdata2);
($result_sumbrcount, $br_found, $br_hit) =
! add_brcount($sumbrcount1, $sumbrcount2);
# Combine testdata
--- 2291,2295 ----
$result_testbrdata = add_testbrdata($testbrdata1, $testbrdata2);
($result_sumbrcount, $br_found, $br_hit) =
! combine_brcount($sumbrcount1, $sumbrcount2, $BR_ADD);
# Combine testdata
***************
*** 3548,3554 ****
delete($testfncdata->{$testname.",diff"});
# Add branch counts
! ($testbrdata->{$testname}) = add_brcount(
$testbrdata->{$testname},
! $testbrdata->{$testname.",diff"});
delete($testbrdata->{$testname.",diff"});
}
--- 3627,3634 ----
delete($testfncdata->{$testname.",diff"});
# Add branch counts
! ($testbrdata->{$testname}) = combine_brcount(
$testbrdata->{$testname},
! $testbrdata->{$testname.",diff"},
! $BR_ADD);
delete($testbrdata->{$testname.",diff"});
}
------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
Ltp-cvs mailing list
Ltp-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic