[edk2] [PATCH v2 2/2] ShellPkg/UefiDpLib: Support dumping cumulative data

2015-11-03 Thread Cinnamon Shia
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

2015-11-03 Thread Zeng, Star

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

2015-11-03 Thread Shia, Cinnamon
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 (
>