Revision: 18762
http://sourceforge.net/p/edk2/code/18762
Author: lzeng14
Date: 2015-11-10 04:57:14 +0000 (Tue, 10 Nov 2015)
Log Message:
-----------
PerformancePkg/Dp_App: 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 <[email protected]>
Reviewed-by: Jaben Carsey <[email protected]>
Reviewed-by: Star Zeng <[email protected]>
Modified Paths:
--------------
trunk/edk2/PerformancePkg/Dp_App/Dp.c
trunk/edk2/PerformancePkg/Dp_App/DpInternal.h
trunk/edk2/PerformancePkg/Dp_App/DpStrings.uni
trunk/edk2/PerformancePkg/Dp_App/DpTrace.c
Modified: trunk/edk2/PerformancePkg/Dp_App/Dp.c
===================================================================
--- trunk/edk2/PerformancePkg/Dp_App/Dp.c 2015-11-10 02:18:31 UTC (rev
18761)
+++ trunk/edk2/PerformancePkg/Dp_App/Dp.c 2015-11-10 04:57:14 UTC (rev
18762)
@@ -14,6 +14,7 @@
timer information to calculate elapsed time for each measurement.
Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
+ (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -81,6 +82,7 @@
#endif
{STRING_TOKEN (STR_DP_OPTION_LX), TypeFlag}, // -x eXclude Cumulative
Items
{STRING_TOKEN (STR_DP_OPTION_LI), TypeFlag}, // -i Display Identifier
+ {STRING_TOKEN (STR_DP_OPTION_LC), TypeValue}, // -c Display cumulative
data.
{STRING_TOKEN (STR_DP_OPTION_LN), TypeValue}, // -n # Number of records to
display for A and R
{STRING_TOKEN (STR_DP_OPTION_LT), TypeValue} // -t # Threshold of interest
};
@@ -138,6 +140,7 @@
PrintToken (STRING_TOKEN (STR_DP_HELP_THRESHOLD));
PrintToken (STRING_TOKEN (STR_DP_HELP_COUNT));
PrintToken (STRING_TOKEN (STR_DP_HELP_ID));
+ PrintToken (STRING_TOKEN (STR_DP_HELP_CUM_DATA));
PrintToken (STRING_TOKEN (STR_DP_HELP_HELP));
Print(L"\n");
}
@@ -168,7 +171,26 @@
FreePool (StringPtrUnknown);
}
-/**
+/**
+ Initialize the cumulative data.
+
+**/
+VOID
+InitCumulativeData (
+ VOID
+ )
+{
+ UINTN Index;
+
+ for (Index = 0; Index < NumCum; ++Index) {
+ CumData[Index].Count = 0;
+ CumData[Index].MinDur = PERF_MAXDUR;
+ CumData[Index].MaxDur = 0;
+ CumData[Index].Duration = 0;
+ }
+}
+
+/**
Dump performance data.
@param[in] ImageHandle The image handle.
@@ -203,6 +225,9 @@
BOOLEAN TraceMode;
BOOLEAN ProfileMode;
BOOLEAN ExcludeMode;
+ BOOLEAN CumulativeMode;
+ CONST CHAR16 *CustomCumulativeToken;
+ PERF_CUM_DATA *CustomCumulativeData;
EFI_STRING StringDpOptionQh;
EFI_STRING StringDpOptionLh;
@@ -218,6 +243,7 @@
EFI_STRING StringDpOptionLn;
EFI_STRING StringDpOptionLt;
EFI_STRING StringDpOptionLi;
+ EFI_STRING StringDpOptionLc;
SummaryMode = FALSE;
VerboseMode = FALSE;
@@ -226,6 +252,8 @@
TraceMode = FALSE;
ProfileMode = FALSE;
ExcludeMode = FALSE;
+ CumulativeMode = FALSE;
+ CustomCumulativeData = NULL;
StringDpOptionQh = NULL;
StringDpOptionLh = NULL;
@@ -241,6 +269,7 @@
StringDpOptionLn = NULL;
StringDpOptionLt = NULL;
StringDpOptionLi = NULL;
+ StringDpOptionLc = NULL;
StringPtr = NULL;
// Get DP's entry time as soon as possible.
@@ -289,6 +318,7 @@
StringDpOptionLn = HiiGetString (gHiiHandle, STRING_TOKEN
(STR_DP_OPTION_LN), NULL);
StringDpOptionLt = HiiGetString (gHiiHandle, STRING_TOKEN
(STR_DP_OPTION_LT), NULL);
StringDpOptionLi = HiiGetString (gHiiHandle, STRING_TOKEN
(STR_DP_OPTION_LI), NULL);
+ StringDpOptionLc = HiiGetString (gHiiHandle, STRING_TOKEN
(STR_DP_OPTION_LC), NULL);
// Boolean Options
//
@@ -303,6 +333,7 @@
#endif // PROFILING_IMPLEMENTED
ExcludeMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionLx);
mShowId = ShellCommandLineGetFlag (ParamPackage, StringDpOptionLi);
+ CumulativeMode = ShellCommandLineGetFlag (ParamPackage,
StringDpOptionLc);
// Options with Values
CmdLineArg = ShellCommandLineGetValue (ParamPackage, StringDpOptionLn);
@@ -331,6 +362,20 @@
#endif // PROFILING_IMPLEMENTED
}
+ //
+ // Init the custom cumulative data.
+ //
+ CustomCumulativeToken = ShellCommandLineGetValue (ParamPackage,
StringDpOptionLc);
+ if (CustomCumulativeToken != NULL) {
+ CustomCumulativeData = AllocateZeroPool (sizeof (PERF_CUM_DATA));
+ CustomCumulativeData->MinDur = 0;
+ CustomCumulativeData->MaxDur = 0;
+ CustomCumulativeData->Count = 0;
+ CustomCumulativeData->Duration = 0;
+ CustomCumulativeData->Name = AllocateZeroPool (StrLen
(CustomCumulativeToken) + 1);
+ UnicodeStrToAsciiStr (CustomCumulativeToken, CustomCumulativeData->Name);
+ }
+
/****************************************************************************
**** Timer specific processing ****
****************************************************************************/
@@ -392,8 +437,10 @@
**** !T && P := (2) Only Profile records are displayed
**** T && P := (3) Same as Default, both are displayed
****************************************************************************/
- GatherStatistics();
- if (AllMode) {
+ GatherStatistics (CustomCumulativeData);
+ if (CumulativeMode) {
+ ProcessCumulative (CustomCumulativeData);
+ } else if (AllMode) {
if (TraceMode) {
DumpAllTrace( Number2Display, ExcludeMode);
}
@@ -418,7 +465,7 @@
if ( ! EFI_ERROR( Status)) {
ProcessPeims ( );
ProcessGlobal ( );
- ProcessCumulative ();
+ ProcessCumulative (NULL);
}
}
}
@@ -432,6 +479,7 @@
}
}
+ //
// Free the memory allocate from HiiGetString
//
ListIndex = 0;
@@ -455,9 +503,15 @@
SafeFreePool (StringDpOptionLn);
SafeFreePool (StringDpOptionLt);
SafeFreePool (StringDpOptionLi);
+ SafeFreePool (StringDpOptionLc);
SafeFreePool (StringPtr);
SafeFreePool (mPrintTokenBuffer);
+ if (CustomCumulativeData != NULL) {
+ SafeFreePool (CustomCumulativeData->Name);
+ }
+ SafeFreePool (CustomCumulativeData);
+
HiiRemovePackages (gHiiHandle);
return Status;
}
Modified: trunk/edk2/PerformancePkg/Dp_App/DpInternal.h
===================================================================
--- trunk/edk2/PerformancePkg/Dp_App/DpInternal.h 2015-11-10 02:18:31 UTC
(rev 18761)
+++ trunk/edk2/PerformancePkg/Dp_App/DpInternal.h 2015-11-10 04:57:14 UTC
(rev 18762)
@@ -7,6 +7,7 @@
DpUtilities.c, DpTrace.c, and DpProfile.c are included here.
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
+ (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -188,10 +189,13 @@
@post The SummaryData and CumData structures contain statistics for the
current performance logs.
+
+ @param[in, out] CustomCumulativeData The pointer to the custom cumulative
data.
+
**/
VOID
GatherStatistics(
- VOID
+ IN OUT PERF_CUM_DATA *CustomCumulativeData OPTIONAL
);
/**
@@ -299,11 +303,13 @@
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 The pointer to the custom cumulative
data.
**/
VOID
ProcessCumulative(
- VOID
+ IN PERF_CUM_DATA *CustomCumulativeData OPTIONAL
);
/**
Modified: trunk/edk2/PerformancePkg/Dp_App/DpStrings.uni
===================================================================
--- trunk/edk2/PerformancePkg/Dp_App/DpStrings.uni 2015-11-10 02:18:31 UTC
(rev 18761)
+++ trunk/edk2/PerformancePkg/Dp_App/DpStrings.uni 2015-11-10 04:57:14 UTC
(rev 18762)
@@ -4,6 +4,8 @@
+ ---- @@ -112,6 +114,20 @@
+++++++ ++ Modified: trunk/edk2/PerformancePkg/Dp_App/DpTrace.c
===================================================================
--- trunk/edk2/PerformancePkg/Dp_App/DpTrace.c 2015-11-10 02:18:31 UTC (rev
18761)
+++ trunk/edk2/PerformancePkg/Dp_App/DpTrace.c 2015-11-10 04:57:14 UTC (rev
18762)
@@ -2,6 +2,7 @@
Trace reporting for the Dp utility.
Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
+ (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -42,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;
@@ -98,6 +102,20 @@
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;
+ }
+ }
}
}
@@ -785,12 +803,14 @@
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;
@@ -829,4 +849,30 @@
);
}
}
+
+ //
+ // 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;
+ }
+ PrintToken (STRING_TOKEN (STR_DP_CUMULATIVE_STATS),
+ CustomCumulativeData->Name,
+ CustomCumulativeData->Count,
+ Dur,
+ AvgDur,
+ MinDur,
+ MaxDur
+ );
+ }
}
------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits