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..5bcb4964523aa7839694bc430f57ad27e8f63047
 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