ShellPkg/UefiDpLib: Support dumping cumulative data
Add a new option -c to dump cumulative data. For example: shell> dp -c ==[ Cumulative ]======== (Times in microsec.) Cumulative Average Shortest Longest Name Count Duration Duration Duration Duration LoadImage: 200 1000000 7000 0 100000 StartImage: 200 20000000 90000 0 7000000 DB:Start: 200 20000000 100000 0 9000000 DB:Support: 200000 100000 0 0 7000 shell> dp -c DXE ==[ Cumulative ]======== (Times in microsec.) Cumulative Average Shortest Longest Name Count Duration Duration Duration Duration LoadImage: 200 1000000 7000 0 100000 StartImage: 200 20000000 90000 0 7000000 DB:Start: 200 20000000 100000 0 9000000 DB:Support: 200000 100000 0 0 7000 DXE 1 30000000 30000000 0 30000000 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Cinnamon Shia <cinnamon.shia@hpe.com> Reviewed-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com> Reviewed-by: El-Haj-Mahmoud Samer <samer.el-haj-mahmoud@hpe.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18728 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
committed by
shenshushi
parent
303ec9bc9f
commit
a06795c6a6
@@ -43,11 +43,14 @@
|
||||
|
||||
@post The SummaryData and CumData structures contain statistics for the
|
||||
current performance logs.
|
||||
|
||||
@param[in, out] CustomCumulativeData A pointer to the cumtom cumulative data.
|
||||
|
||||
**/
|
||||
VOID
|
||||
GatherStatistics(
|
||||
VOID
|
||||
)
|
||||
IN OUT PERF_CUM_DATA *CustomCumulativeData OPTIONAL
|
||||
)
|
||||
{
|
||||
MEASUREMENT_RECORD Measurement;
|
||||
UINT64 Duration;
|
||||
@@ -99,6 +102,20 @@ GatherStatistics(
|
||||
CumData[TIndex].MaxDur = Duration;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Collect the data for custom cumulative data.
|
||||
//
|
||||
if ((CustomCumulativeData != NULL) && (AsciiStrCmp (Measurement.Token, CustomCumulativeData->Name) == 0)) {
|
||||
CustomCumulativeData->Duration += Duration;
|
||||
CustomCumulativeData->Count++;
|
||||
if (Duration < CustomCumulativeData->MinDur) {
|
||||
CustomCumulativeData->MinDur = Duration;
|
||||
}
|
||||
if (Duration > CustomCumulativeData->MaxDur) {
|
||||
CustomCumulativeData->MaxDur = Duration;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -782,12 +799,14 @@ ProcessGlobal(
|
||||
For each record with a Token listed in the CumData array:<BR>
|
||||
- Update the instance count and the total, minimum, and maximum durations.
|
||||
Finally, print the gathered cumulative statistics.
|
||||
|
||||
|
||||
@param[in] CustomCumulativeData A pointer to the cumtom cumulative data.
|
||||
|
||||
**/
|
||||
VOID
|
||||
ProcessCumulative(
|
||||
VOID
|
||||
)
|
||||
IN PERF_CUM_DATA *CustomCumulativeData OPTIONAL
|
||||
)
|
||||
{
|
||||
UINT64 AvgDur; // the computed average duration
|
||||
UINT64 Dur;
|
||||
@@ -826,4 +845,30 @@ ProcessCumulative(
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Print the custom cumulative data.
|
||||
//
|
||||
if (CustomCumulativeData != NULL) {
|
||||
if (CustomCumulativeData->Count != 0) {
|
||||
AvgDur = DivU64x32 (CustomCumulativeData->Duration, CustomCumulativeData->Count);
|
||||
AvgDur = DurationInMicroSeconds (AvgDur);
|
||||
Dur = DurationInMicroSeconds (CustomCumulativeData->Duration);
|
||||
MaxDur = DurationInMicroSeconds (CustomCumulativeData->MaxDur);
|
||||
MinDur = DurationInMicroSeconds (CustomCumulativeData->MinDur);
|
||||
} else {
|
||||
AvgDur = 0;
|
||||
Dur = 0;
|
||||
MaxDur = 0;
|
||||
MinDur = 0;
|
||||
}
|
||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_CUMULATIVE_STATS), gDpHiiHandle,
|
||||
CustomCumulativeData->Name,
|
||||
CustomCumulativeData->Count,
|
||||
Dur,
|
||||
AvgDur,
|
||||
MinDur,
|
||||
MaxDur
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user