On 2015/11/3 21:09, Shia, Cinnamon wrote:
Stat,

Thanks for your feedback and review.
Will submit the v2 patch for addressing your comments.
And submit another patch for PerformancePkg\Dp_App

Shia,

Since the changes in UefiDpLib has been committed.
Will you submit patch for PerformancePkg\Dp_App?


Thanks,
Star


Thanks,
Cinnamon Shia

-----Original Message-----
From: Zeng, Star [mailto:star.z...@intel.com]
Sent: Tuesday, November 3, 2015 11:16 AM
To: Shia, Cinnamon; edk2-devel@lists.01.org
Subject: Re: [edk2] [PATCH 2/2] ShellPkg/UefiDpLib: Support dumping cumulative 
data

On 2015/11/2 17:11, Cinnamon Shia wrote:
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

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(-)

Could the "HP_ISS" be removed from the patch?
Could you help sync the change to PerformancePkg\Dp_App?

Thanks,
Star


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..9d94943 100644
--- a/ShellPkg/Library/UefiDpLib/DpInternal.h
+++ b/ShellPkg/Library/UefiDpLib/DpInternal.h
@@ -172,10 +172,13 @@ GetCumulativeItem(

     @post The SummaryData and CumData structures contain statistics for the
           current performance logs.
+
+  @param[in]    CustomCumulativeData  The pointer to the custom cumulative 
data.  //*HP_ISS
+
   **/
   VOID
   GatherStatistics(
-  VOID
+  IN PERF_CUM_DATA                  *CustomCumulativeData OPTIONAL
     );

   /**
@@ -283,11 +286,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.  //*HP_ISS

   **/
   VOID
   ProcessCumulative(
-  VOID
+  IN PERF_CUM_DATA                  *CustomCumulativeData OPTIONAL
     );

   /**
diff --git a/ShellPkg/Library/UefiDpLib/DpTrace.c
b/ShellPkg/Library/UefiDpLib/DpTrace.c
index cf8200c..f61f590 100644
--- a/ShellPkg/Library/UefiDpLib/DpTrace.c
+++ b/ShellPkg/Library/UefiDpLib/DpTrace.c
@@ -43,11 +43,14 @@

     @post The SummaryData and CumData structures contain statistics for the
           current performance logs.
+
+  @param[in]    CustomCumulativeData  A pointer to the cumtom cumulative data. 
 //*HP_ISS
+
   **/
   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
+                );
+  }
   }
diff --git a/ShellPkg/Library/UefiDpLib/UefiDpLib.uni
b/ShellPkg/Library/UefiDpLib/UefiDpLib.uni
index
1e5c26ac944e3f626c97c79ac9bb1c4196c70ed3..5bcb4964523aa7839694bc430f57
ad27e8f63047 100644 GIT binary patch delta 437
zcmZvY%}&BV6ot>kz=Fh81IBbSc8>}EM5qg+kpz)o6WIZaNgW8GMN$D@!HtWiPv9G9
zy5nu+NjTFG(MTq}(|hlC&$*f9n^?Vz&!&i_b8!xd1~gs~FwS@+JSg}WGe&q~UdM!W
z&1}kVgcs;IwD(%@;twlrilA!w#JYr@Ii`vC(NDi>!(7(r-~snkX%i|#CP!7P8xbp0
zU1LDS32)=1_-Ae(bGjJ0aFd0s1nkd9FGx#rCR6Bfryl1V*7i|=lc>CX?XkMc!6^UN
z+AeN(Fq3ZbeOXKf`O;wp$5d`{7e&uIPAd$56ZT0)JZ9TOj60Zv(~P;r4P0!=9~b-V
RPk+vrp3>2%xv99S<<^p%SkM3f

delta 24
gcmaFV%ebq9af27*<|~Xj7Mmlil2|t%a8zOi0D&(FVgLXD


_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to