Reviewed-by: Jaben Carsey <jaben.car...@intel.com>
> -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of > Cinnamon Shia > Sent: Monday, November 09, 2015 6:54 AM > To: edk2-devel@lists.01.org > Subject: [edk2] [PATCH] PerformancePkg/Dp_App: Support dumping > cumulative data > Importance: High > > 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.s...@hpe.com> > --- > PerformancePkg/Dp_App/Dp.c | 62 > +++++++++++++++++++++++++++++++++--- > PerformancePkg/Dp_App/DpInternal.h | 10 ++++-- > PerformancePkg/Dp_App/DpStrings.uni | Bin 36606 -> 38432 bytes > PerformancePkg/Dp_App/DpTrace.c | 56 > +++++++++++++++++++++++++++++--- > 4 files changed, 117 insertions(+), 11 deletions(-) > > diff --git a/PerformancePkg/Dp_App/Dp.c b/PerformancePkg/Dp_App/Dp.c > index 57144a8..0f61b9d 100644 > --- a/PerformancePkg/Dp_App/Dp.c > +++ b/PerformancePkg/Dp_App/Dp.c > @@ -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 @@ PARAM_ITEM_LIST ParamList[] = { > #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 @@ ShowHelp( void ) > 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 @@ DumpStatistics( void ) > 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 @@ InitializeDp ( > 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 @@ InitializeDp ( > EFI_STRING StringDpOptionLn; > EFI_STRING StringDpOptionLt; > EFI_STRING StringDpOptionLi; > + EFI_STRING StringDpOptionLc; > > SummaryMode = FALSE; > VerboseMode = FALSE; > @@ -226,6 +252,8 @@ InitializeDp ( > TraceMode = FALSE; > ProfileMode = FALSE; > ExcludeMode = FALSE; > + CumulativeMode = FALSE; > + CustomCumulativeData = NULL; > > StringDpOptionQh = NULL; > StringDpOptionLh = NULL; > @@ -241,6 +269,7 @@ InitializeDp ( > StringDpOptionLn = NULL; > StringDpOptionLt = NULL; > StringDpOptionLi = NULL; > + StringDpOptionLc = NULL; > StringPtr = NULL; > > // Get DP's entry time as soon as possible. > @@ -289,6 +318,7 @@ InitializeDp ( > 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 @@ InitializeDp ( > #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 @@ InitializeDp ( > #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 @@ InitializeDp ( > **** !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 @@ InitializeDp ( > if ( ! EFI_ERROR( Status)) { > ProcessPeims ( ); > ProcessGlobal ( ); > - ProcessCumulative (); > + ProcessCumulative (NULL); > } > } > } > @@ -432,6 +479,7 @@ InitializeDp ( > } > } > > + // > // Free the memory allocate from HiiGetString > // > ListIndex = 0; > @@ -455,9 +503,15 @@ InitializeDp ( > SafeFreePool (StringDpOptionLn); > SafeFreePool (StringDpOptionLt); > SafeFreePool (StringDpOptionLi); > + SafeFreePool (StringDpOptionLc); > SafeFreePool (StringPtr); > SafeFreePool (mPrintTokenBuffer); > > + if (CustomCumulativeData != NULL) { > + SafeFreePool (CustomCumulativeData->Name); > + } > + SafeFreePool (CustomCumulativeData); > + > HiiRemovePackages (gHiiHandle); > return Status; > } > diff --git a/PerformancePkg/Dp_App/DpInternal.h > b/PerformancePkg/Dp_App/DpInternal.h > index fff2995..0e97e1e 100644 > --- a/PerformancePkg/Dp_App/DpInternal.h > +++ b/PerformancePkg/Dp_App/DpInternal.h > @@ -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 @@ GetCumulativeItem( > > @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 @@ 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 The pointer to the custom cumulative > data. > > **/ > VOID > ProcessCumulative( > - VOID > + IN PERF_CUM_DATA *CustomCumulativeData OPTIONAL > ); > > /** > diff --git a/PerformancePkg/Dp_App/DpStrings.uni > b/PerformancePkg/Dp_App/DpStrings.uni > index > eddc02c2b8536c63718b82040f9c0238e21d23ce..c4c146f6b152c5bd11c68 > b67c0aab22a17b90b44 100644 > GIT binary patch > delta 675 > zcmaJ-T`PlO7{1;KuZ<Ytz- > DigB2Bh&LOYmkMZP8+$d=yTjbz_8+6fLgTMN&zQah6q > zz2(T?@B{cEay>&!Lr?ejb>H`OKkv7ey9dkFQ|lN)7{7K7?)WeTFJ_=&0ZE)7MP20 > 6 > z5QPo{htvfm7)Ov{KFKIYIlvKp4PokIN(x!#)AS@t!!n|ewOYH~pufXRmXl;HZU)p5 > zr8zAE>V&A;#>9Qcb92><Tf6^gGOM<Wp6(E~u!3FE31SmLVQ- > te=~U0;_D!r|iR@SD > zdnn;L_Z%7PC^MGVBw0yN@3EGlmG|oOq%~0Dt@48OSCnQ(b{C13w`;`7NJos > bV(fD> > z*9EJ1>0cA)s#|f3yy}cZ|JWoqG|z1OndBll&dT{BZ{Kdrbb2w#UCU&rlf@$E=- > B@q > z>+;pH8+E1y>VMHg{yI90dG2lW{KCOC{R3IzkLJinZumxDDu!4e@SD93Yfe;7dz6 > rP > V?F+SdU<h3;f7;<u(@}Y|d;q2Cjr9Nk > > delta 53 > zcmZ3mhUwp2rU~0NJ1|aQ- > ~5V0igEHQ4yDNsTu*@Xt;shybwK>h4LmIZn{AZ13O3tK > He#8U-a8edg > > diff --git a/PerformancePkg/Dp_App/DpTrace.c > b/PerformancePkg/Dp_App/DpTrace.c > index 1ba2b72..d3df30f 100644 > --- a/PerformancePkg/Dp_App/DpTrace.c > +++ b/PerformancePkg/Dp_App/DpTrace.c > @@ -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 @@ 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; > + } > + } > } > } > > @@ -785,12 +803,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; > @@ -829,4 +849,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; > + } > + PrintToken (STRING_TOKEN (STR_DP_CUMULATIVE_STATS), > + CustomCumulativeData->Name, > + CustomCumulativeData->Count, > + Dur, > + AvgDur, > + MinDur, > + MaxDur > + ); > + } > } > -- > 1.9.5.msysgit.1 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel