[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