mirror of
https://git.rtems.org/rtems-tools/
synced 2025-10-20 08:15:26 +08:00
covoar/reports: Add new statistics to summary
The following new statistics have been added to the summary report: number of unreferenced symbols, total branch paths found, number of branch paths not executed, and percentage of branch paths covered.
This commit is contained in:

committed by
Joel Sherrill

parent
7d14bb83e0
commit
4aabd9bbf7
@@ -175,6 +175,8 @@ namespace Coverage {
|
||||
s.second.stats.uncoveredBytes++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
stats.unreferencedSymbols++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -470,10 +472,18 @@ namespace Coverage {
|
||||
return stats.branchesNeverTaken;
|
||||
};
|
||||
|
||||
uint32_t DesiredSymbols::getNumberBranchesNotExecuted( void ) const {
|
||||
return stats.branchesNotExecuted;
|
||||
};
|
||||
|
||||
uint32_t DesiredSymbols::getNumberUncoveredRanges( void ) const {
|
||||
return stats.uncoveredRanges;
|
||||
};
|
||||
|
||||
uint32_t DesiredSymbols::getNumberUnreferencedSymbols( void ) const {
|
||||
return stats.unreferencedSymbols;
|
||||
};
|
||||
|
||||
bool DesiredSymbols::isDesired (
|
||||
const std::string& symbolName
|
||||
) const
|
||||
|
@@ -82,6 +82,11 @@ namespace Coverage {
|
||||
*/
|
||||
int uncoveredRanges;
|
||||
|
||||
/*!
|
||||
* This member variable contains the total number of unreferenced symbols.
|
||||
*/
|
||||
int unreferencedSymbols;
|
||||
|
||||
/*!
|
||||
* This method returns the percentage of uncovered instructions.
|
||||
*
|
||||
@@ -109,7 +114,8 @@ namespace Coverage {
|
||||
sizeInInstructions(0),
|
||||
uncoveredBytes(0),
|
||||
uncoveredInstructions(0),
|
||||
uncoveredRanges(0)
|
||||
uncoveredRanges(0),
|
||||
unreferencedSymbols(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -278,6 +284,14 @@ namespace Coverage {
|
||||
*/
|
||||
uint32_t getNumberBranchesNeverTaken( void ) const;
|
||||
|
||||
/*!
|
||||
* This method returns the total number of branches not executed
|
||||
* for all analyzed symbols.
|
||||
*
|
||||
* @return Returns the total number of branches not executed
|
||||
*/
|
||||
uint32_t getNumberBranchesNotExecuted( void ) const;
|
||||
|
||||
/*!
|
||||
* This method returns the total number of uncovered ranges
|
||||
* for all analyzed symbols.
|
||||
@@ -286,6 +300,14 @@ namespace Coverage {
|
||||
*/
|
||||
uint32_t getNumberUncoveredRanges( void ) const;
|
||||
|
||||
/*!
|
||||
* This method returns the total number of unreferenced symbols
|
||||
* for all analyzed symbols.
|
||||
*
|
||||
* @return Returns the total number of unreferenced symbols
|
||||
*/
|
||||
uint32_t getNumberUnreferencedSymbols( void ) const;
|
||||
|
||||
/*!
|
||||
* This method returns an indication of whether or not the specified
|
||||
* symbol is a symbol to analyze.
|
||||
|
@@ -441,6 +441,7 @@ void ReportsBase::WriteSummaryReport(
|
||||
Coverage::DesiredSymbols::symbolSet_t::iterator itr;
|
||||
uint32_t notExecuted = 0;
|
||||
double percentage;
|
||||
double percentageBranches;
|
||||
Coverage::CoverageMapBase* theCoverageMap;
|
||||
uint32_t totalBytes = 0;
|
||||
FILE* report;
|
||||
@@ -475,13 +476,26 @@ void ReportsBase::WriteSummaryReport(
|
||||
percentage /= (double) totalBytes;
|
||||
percentage *= 100.0;
|
||||
|
||||
percentageBranches = (double) (
|
||||
SymbolsToAnalyze->getNumberBranchesAlwaysTaken() +
|
||||
SymbolsToAnalyze->getNumberBranchesNeverTaken() +
|
||||
(SymbolsToAnalyze->getNumberBranchesNotExecuted() * 2)
|
||||
);
|
||||
percentageBranches /= (double) SymbolsToAnalyze->getNumberBranchesFound() * 2;
|
||||
percentageBranches *= 100.0;
|
||||
|
||||
fprintf( report, "Bytes Analyzed : %d\n", totalBytes );
|
||||
fprintf( report, "Bytes Not Executed : %d\n", notExecuted );
|
||||
fprintf( report, "Percentage Executed : %5.4g\n", 100.0 - percentage );
|
||||
fprintf( report, "Percentage Not Executed : %5.4g\n", percentage );
|
||||
fprintf(
|
||||
report,
|
||||
"Uncovered ranges found : %d\n",
|
||||
"Unreferenced Symbols : %d\n",
|
||||
SymbolsToAnalyze->getNumberUnreferencedSymbols()
|
||||
);
|
||||
fprintf(
|
||||
report,
|
||||
"Uncovered ranges found : %d\n\n",
|
||||
SymbolsToAnalyze->getNumberUncoveredRanges()
|
||||
);
|
||||
if ((SymbolsToAnalyze->getNumberBranchesFound() == 0) ||
|
||||
@@ -490,14 +504,20 @@ void ReportsBase::WriteSummaryReport(
|
||||
} else {
|
||||
fprintf(
|
||||
report,
|
||||
"Total branches found : %d\n",
|
||||
"Total conditional branches found : %d\n",
|
||||
SymbolsToAnalyze->getNumberBranchesFound()
|
||||
);
|
||||
fprintf(
|
||||
report,
|
||||
"Uncovered branches found : %d\n",
|
||||
"Total branch paths found : %d\n",
|
||||
SymbolsToAnalyze->getNumberBranchesFound() * 2
|
||||
);
|
||||
fprintf(
|
||||
report,
|
||||
"Uncovered branch paths found : %d\n",
|
||||
SymbolsToAnalyze->getNumberBranchesAlwaysTaken() +
|
||||
SymbolsToAnalyze->getNumberBranchesNeverTaken()
|
||||
SymbolsToAnalyze->getNumberBranchesNeverTaken() +
|
||||
(SymbolsToAnalyze->getNumberBranchesNotExecuted() * 2)
|
||||
);
|
||||
fprintf(
|
||||
report,
|
||||
@@ -509,6 +529,16 @@ void ReportsBase::WriteSummaryReport(
|
||||
" %d branches never taken\n",
|
||||
SymbolsToAnalyze->getNumberBranchesNeverTaken()
|
||||
);
|
||||
fprintf(
|
||||
report,
|
||||
" %d branch paths not executed\n",
|
||||
SymbolsToAnalyze->getNumberBranchesNotExecuted() * 2
|
||||
);
|
||||
fprintf(
|
||||
report,
|
||||
"Percentage branch paths covered : %4.4g\n",
|
||||
100.0 - percentageBranches
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -56,6 +56,7 @@ class summary:
|
||||
self.bytes_not_executed = 0
|
||||
self.percentage_executed = 0.0
|
||||
self.percentage_not_executed = 100.0
|
||||
self.unreferenced_symbols = 0
|
||||
self.ranges_uncovered = 0
|
||||
self.branches_uncovered = 0
|
||||
self.branches_total = 0
|
||||
@@ -74,7 +75,10 @@ class summary:
|
||||
self.bytes_not_executed = self._get_next_with_colon(summary_file)
|
||||
self.percentage_executed = self._get_next_with_colon(summary_file)
|
||||
self.percentage_not_executed = self._get_next_with_colon(summary_file)
|
||||
self.unreferenced_symbols = self._get_next_with_colon(summary_file)
|
||||
self.ranges_uncovered = self._get_next_with_colon(summary_file)
|
||||
summary_file.readline()
|
||||
summary_file.readline()
|
||||
self.branches_total = self._get_next_with_colon(summary_file)
|
||||
self.branches_uncovered = self._get_next_with_colon(summary_file)
|
||||
self.branches_always_taken = self._get_next_without_colon(summary_file)
|
||||
@@ -153,6 +157,7 @@ class report_gen_html:
|
||||
+ '</td>' + os.linesep
|
||||
row += ' <td>' + summary.bytes_analyzed + '</td>' + os.linesep
|
||||
row += ' <td>' + summary.bytes_not_executed + '</td>' + os.linesep
|
||||
row += ' <td>' + summary.unreferenced_symbols + '</td>' + os.linesep
|
||||
row += ' <td>' + summary.ranges_uncovered + '</td>' + os.linesep
|
||||
row += ' <td>' + summary.percentage_executed + '%</td>' + os.linesep
|
||||
row += ' <td>' + summary.percentage_not_executed + '%</td>' + os.linesep
|
||||
@@ -168,19 +173,21 @@ class report_gen_html:
|
||||
|
||||
def _header_row(self):
|
||||
row = "<tr>" + os.linesep
|
||||
row += " <th> Symbols set name </th>" + os.linesep
|
||||
row += " <th> Index file </th>" + os.linesep
|
||||
row += " <th> Summary file </th>" + os.linesep
|
||||
row += " <th> Bytes analyzed </th>" + os.linesep
|
||||
row += " <th> Bytes not executed </th>" + os.linesep
|
||||
row += " <th> Uncovered ranges </th>" + os.linesep
|
||||
row += " <th> Percentage covered </th>" + os.linesep
|
||||
row += " <th> Percentage uncovered </th>" + os.linesep
|
||||
row += " <th> Instruction coverage </th>" + os.linesep
|
||||
row += " <th> Branches uncovered </th>" + os.linesep
|
||||
row += " <th> Branches total </th>" + os.linesep
|
||||
row += " <th> Branches covered percentage </th>" + os.linesep
|
||||
row += " <th> Branches coverage </th>" + os.linesep
|
||||
rowAttributes = "class=\"table-sortable:default table-sortable\" title=\"Click to sort\""
|
||||
row += " <th " + rowAttributes + "> Symbols set name </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Index file </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Summary file </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Bytes analyzed </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Bytes not executed </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Unreferenced symbols </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Uncovered ranges </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Percentage covered </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Percentage uncovered </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Instruction coverage </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Branches uncovered </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Branches total </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Branches covered percentage </th>" + os.linesep
|
||||
row += " <th " + rowAttributes + "> Branch coverage </th>" + os.linesep
|
||||
row += "</tr>"
|
||||
self.number_of_columns = row.count('<th>')
|
||||
return row
|
||||
|
Reference in New Issue
Block a user