[edk2] [PATCH v2 2/2] 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 ShortestLongest Name CountDurationDurationDurationDuration LoadImage: 200 1007000 0 10 StartImage:2002000 9 0 700 DB:Start:2002000 10 0 900 DB:Support: 20 10 0 07000 shell> dp -c DXE ==[ Cumulative ] (Times in microsec.) Cumulative Average ShortestLongest Name CountDurationDurationDurationDuration LoadImage: 200 1007000 0 10 StartImage:2002000 9 0 700 DB:Start:2002000 10 0 900 DB:Support: 20 10 0 07000 DXE 130003000 03000 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Cinnamon Shia--- ShellPkg/Library/UefiDpLib/Dp.c | 33 +-- ShellPkg/Library/UefiDpLib/DpInternal.h | 9 +++-- ShellPkg/Library/UefiDpLib/DpTrace.c | 55 --- ShellPkg/Library/UefiDpLib/UefiDpLib.uni | Bin 17466 -> 18146 bytes 4 files changed, 87 insertions(+), 10 deletions(-) diff --git a/ShellPkg/Library/UefiDpLib/Dp.c b/ShellPkg/Library/UefiDpLib/Dp.c index 62a4e7b..4d109d0 100644 --- a/ShellPkg/Library/UefiDpLib/Dp.c +++ b/ShellPkg/Library/UefiDpLib/Dp.c @@ -79,6 +79,7 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = { #endif // PROFILING_IMPLEMENTED {L"-x", TypeFlag}, // -x eXclude Cumulative Items {L"-i", TypeFlag}, // -i Display Identifier + {L"-c", TypeValue}, // -c Display cumulative data. {L"-n", TypeValue}, // -n # Number of records to display for A and R {L"-t", TypeValue}, // -t # Threshold of interest {NULL, TypeMax} @@ -164,6 +165,9 @@ ShellCommandRunDp ( BOOLEAN TraceMode; BOOLEAN ProfileMode; BOOLEAN ExcludeMode; + BOOLEAN CumulativeMode; + CONST CHAR16 *CustomCumulativeToken; + PERF_CUM_DATA *CustomCumulativeData; StringPtr = NULL; SummaryMode = FALSE; @@ -173,6 +177,8 @@ ShellCommandRunDp ( TraceMode = FALSE; ProfileMode = FALSE; ExcludeMode = FALSE; + CumulativeMode = FALSE; + CustomCumulativeData = NULL; // Get DP's entry time as soon as possible. // This is used as the Shell-Phase end time. @@ -210,6 +216,7 @@ ShellCommandRunDp ( #endif // PROFILING_IMPLEMENTED ExcludeMode = ShellCommandLineGetFlag (ParamPackage, L"-x"); mShowId = ShellCommandLineGetFlag (ParamPackage, L"-i"); + CumulativeMode = ShellCommandLineGetFlag (ParamPackage, L"-c"); // Options with Values CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-n"); @@ -244,6 +251,20 @@ ShellCommandRunDp ( InitCumulativeData (); // + // Init the custom cumulative data. + // + CustomCumulativeToken = ShellCommandLineGetValue (ParamPackage, L"-c"); + 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 // // Get the Performance counter characteristics: @@ -302,8 +323,10 @@ ShellCommandRunDp ( !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); } @@ -326,7 +349,7 @@ ShellCommandRunDp ( if ( ! EFI_ERROR( Status)) { ProcessPeims (); ProcessGlobal (); - ProcessCumulative (); + ProcessCumulative (NULL); } } } @@ -339,6 +362,10 @@ ShellCommandRunDp ( } SHELL_FREE_NON_NULL (StringPtr); + if (CustomCumulativeData != NULL) { +SHELL_FREE_NON_NULL (CustomCumulativeData->Name); + } + SHELL_FREE_NON_NULL (CustomCumulativeData); return SHELL_SUCCESS; } diff --git a/ShellPkg/Library/UefiDpLib/DpInternal.h b/ShellPkg/Library/UefiDpLib/DpInternal.h index 9b8163a..b51f0d8 100644 ---
Re: [edk2] [PATCH v2 2/2] ShellPkg/UefiDpLib: Support dumping cumulative data
On 2015/11/3 21:26, Cinnamon Shia wrote: Add a new option -c to dump cumulative data. For example: shell> dp -c ==[ Cumulative ] (Times in microsec.) Cumulative Average ShortestLongest Name CountDurationDurationDurationDuration LoadImage: 200 1007000 0 10 StartImage:2002000 9 0 700 DB:Start:2002000 10 0 900 DB:Support: 20 10 0 07000 shell> dp -c DXE ==[ Cumulative ] (Times in microsec.) Cumulative Average ShortestLongest Name CountDurationDurationDurationDuration LoadImage: 200 1007000 0 10 StartImage:2002000 9 0 700 DB:Start:2002000 10 0 900 DB:Support: 20 10 0 07000 DXE 130003000 03000 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Cinnamon Shia--- ShellPkg/Library/UefiDpLib/Dp.c | 33 +-- ShellPkg/Library/UefiDpLib/DpInternal.h | 9 +++-- ShellPkg/Library/UefiDpLib/DpTrace.c | 55 --- ShellPkg/Library/UefiDpLib/UefiDpLib.uni | Bin 17466 -> 18146 bytes 4 files changed, 87 insertions(+), 10 deletions(-) If you accept my one minor comment below. Reviewed-by: Star Zeng diff --git a/ShellPkg/Library/UefiDpLib/Dp.c b/ShellPkg/Library/UefiDpLib/Dp.c index 62a4e7b..4d109d0 100644 --- a/ShellPkg/Library/UefiDpLib/Dp.c +++ b/ShellPkg/Library/UefiDpLib/Dp.c @@ -79,6 +79,7 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = { #endif // PROFILING_IMPLEMENTED {L"-x", TypeFlag}, // -x eXclude Cumulative Items {L"-i", TypeFlag}, // -i Display Identifier + {L"-c", TypeValue}, // -c Display cumulative data. {L"-n", TypeValue}, // -n # Number of records to display for A and R {L"-t", TypeValue}, // -t # Threshold of interest {NULL, TypeMax} @@ -164,6 +165,9 @@ ShellCommandRunDp ( BOOLEAN TraceMode; BOOLEAN ProfileMode; BOOLEAN ExcludeMode; + BOOLEAN CumulativeMode; + CONST CHAR16 *CustomCumulativeToken; + PERF_CUM_DATA *CustomCumulativeData; StringPtr = NULL; SummaryMode = FALSE; @@ -173,6 +177,8 @@ ShellCommandRunDp ( TraceMode = FALSE; ProfileMode = FALSE; ExcludeMode = FALSE; + CumulativeMode = FALSE; + CustomCumulativeData = NULL; // Get DP's entry time as soon as possible. // This is used as the Shell-Phase end time. @@ -210,6 +216,7 @@ ShellCommandRunDp ( #endif // PROFILING_IMPLEMENTED ExcludeMode = ShellCommandLineGetFlag (ParamPackage, L"-x"); mShowId = ShellCommandLineGetFlag (ParamPackage, L"-i"); + CumulativeMode = ShellCommandLineGetFlag (ParamPackage, L"-c"); // Options with Values CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-n"); @@ -244,6 +251,20 @@ ShellCommandRunDp ( InitCumulativeData (); // + // Init the custom cumulative data. + // + CustomCumulativeToken = ShellCommandLineGetValue (ParamPackage, L"-c"); + 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 // // Get the Performance counter characteristics: @@ -302,8 +323,10 @@ ShellCommandRunDp ( !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); } @@ -326,7 +349,7 @@ ShellCommandRunDp ( if ( ! EFI_ERROR( Status)) { ProcessPeims (); ProcessGlobal (); - ProcessCumulative (); + ProcessCumulative (NULL); } } } @@ -339,6 +362,10 @@ ShellCommandRunDp ( } SHELL_FREE_NON_NULL (StringPtr); + if (CustomCumulativeData != NULL) { +SHELL_FREE_NON_NULL (CustomCumulativeData->Name); + } + SHELL_FREE_NON_NULL (CustomCumulativeData); return SHELL_SUCCESS; }
Re: [edk2] [PATCH v2 2/2] ShellPkg/UefiDpLib: Support dumping cumulative data
Hi Star, Thanks for your feedback. Will address your comments in patch v3. Thanks, Cinnamon Shia -Original Message- From: Zeng, Star [mailto:star.z...@intel.com] Sent: Tuesday, November 3, 2015 10:06 PM To: Shia, Cinnamon; edk2-devel@lists.01.org Subject: Re: [edk2] [PATCH v2 2/2] ShellPkg/UefiDpLib: Support dumping cumulative data On 2015/11/3 21:26, Cinnamon Shia wrote: > Add a new option -c to dump cumulative data. > For example: > shell> dp -c > ==[ Cumulative ] > (Times in microsec.) Cumulative Average ShortestLongest > Name CountDurationDurationDurationDuration > LoadImage: 200 1007000 0 10 > StartImage:2002000 9 0 700 >DB:Start:2002000 10 0 900 > DB:Support: 20 10 0 07000 > > shell> dp -c DXE > ==[ Cumulative ] > (Times in microsec.) Cumulative Average ShortestLongest > Name CountDurationDurationDurationDuration > LoadImage: 200 1007000 0 10 > StartImage:2002000 9 0 700 >DB:Start:2002000 10 0 900 > DB:Support: 20 10 0 07000 > DXE 130003000 03000 > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Cinnamon Shia <cinnamon.s...@hpe.com> > --- > ShellPkg/Library/UefiDpLib/Dp.c | 33 +-- > ShellPkg/Library/UefiDpLib/DpInternal.h | 9 +++-- > ShellPkg/Library/UefiDpLib/DpTrace.c | 55 > --- > ShellPkg/Library/UefiDpLib/UefiDpLib.uni | Bin 17466 -> 18146 bytes > 4 files changed, 87 insertions(+), 10 deletions(-) If you accept my one minor comment below. Reviewed-by: Star Zeng <star.z...@intel.com> > > diff --git a/ShellPkg/Library/UefiDpLib/Dp.c > b/ShellPkg/Library/UefiDpLib/Dp.c index 62a4e7b..4d109d0 100644 > --- a/ShellPkg/Library/UefiDpLib/Dp.c > +++ b/ShellPkg/Library/UefiDpLib/Dp.c > @@ -79,6 +79,7 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = { > #endif // PROFILING_IMPLEMENTED > {L"-x", TypeFlag}, // -x eXclude Cumulative Items > {L"-i", TypeFlag}, // -i Display Identifier > + {L"-c", TypeValue}, // -c Display cumulative data. > {L"-n", TypeValue}, // -n # Number of records to display for A and R > {L"-t", TypeValue}, // -t # Threshold of interest > {NULL, TypeMax} > @@ -164,6 +165,9 @@ ShellCommandRunDp ( > BOOLEAN TraceMode; > BOOLEAN ProfileMode; > BOOLEAN ExcludeMode; > + BOOLEAN CumulativeMode; > + CONST CHAR16 *CustomCumulativeToken; > + PERF_CUM_DATA *CustomCumulativeData; > > StringPtr = NULL; > SummaryMode = FALSE; > @@ -173,6 +177,8 @@ ShellCommandRunDp ( > TraceMode = FALSE; > ProfileMode = FALSE; > ExcludeMode = FALSE; > + CumulativeMode = FALSE; > + CustomCumulativeData = NULL; > > // Get DP's entry time as soon as possible. > // This is used as the Shell-Phase end time. > @@ -210,6 +216,7 @@ ShellCommandRunDp ( > #endif // PROFILING_IMPLEMENTED > ExcludeMode = ShellCommandLineGetFlag (ParamPackage, L"-x"); > mShowId = ShellCommandLineGetFlag (ParamPackage, L"-i"); > + CumulativeMode = ShellCommandLineGetFlag (ParamPackage, L"-c"); > > // Options with Values > CmdLineArg = ShellCommandLineGetValue (ParamPackage, L"-n"); @@ > -244,6 +251,20 @@ ShellCommandRunDp ( > InitCumulativeData (); > > // > + // Init the custom cumulative data. > + // > + CustomCumulativeToken = ShellCommandLineGetValue (ParamPackage, > + L"-c"); 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 > // > // Get the Performance counter characteristics: > @@ -302,8 +323,10 @@ ShellCommandRunDp ( >