]> git.proxmox.com Git - mirror_edk2.git/blobdiff - PerformancePkg/Dp_App/Dp.c
Move some define code to the uni file. Also fixed some memory leak.
[mirror_edk2.git] / PerformancePkg / Dp_App / Dp.c
index 3237138b22f6e0d6373b5bfc2116bad12d925ae1..b8e07c5cca99ae5e6846a82da1a91f87a3316a47 100644 (file)
@@ -44,6 +44,7 @@
 /// Module-Global Variables\r
 ///@{\r
 EFI_HII_HANDLE   gHiiHandle;\r
+SHELL_PARAM_ITEM *DpParamList       = NULL;\r
 CHAR16           *mPrintTokenBuffer = NULL;\r
 CHAR16           mGaugeString[DXE_PERFORMANCE_STRING_SIZE];\r
 CHAR16           mUnicodeToken[PERF_TOKEN_LENGTH + 1];\r
@@ -65,26 +66,51 @@ PERF_CUM_DATA CumData[] = {
 /// Number of items for which we are gathering cumulative statistics.\r
 UINT32 const      NumCum = sizeof(CumData) / sizeof(PERF_CUM_DATA);\r
 \r
-SHELL_PARAM_ITEM  DpParamList[] = {\r
-  {STR_DP_OPTION_QH, TypeFlag},   // -?   Help\r
-  {STR_DP_OPTION_LH, TypeFlag},   // -h   Help\r
-  {STR_DP_OPTION_UH, TypeFlag},   // -H   Help\r
-  {STR_DP_OPTION_LV, TypeFlag},   // -v   Verbose Mode\r
-  {STR_DP_OPTION_UA, TypeFlag},   // -A   All, Cooked\r
-  {STR_DP_OPTION_UR, TypeFlag},   // -R   RAW All\r
-  {STR_DP_OPTION_LS, TypeFlag},   // -s   Summary\r
+PARAM_ITEM_LIST  ParamList[] = {\r
+  {STRING_TOKEN (STR_DP_OPTION_QH), TypeFlag},   // -?   Help\r
+  {STRING_TOKEN (STR_DP_OPTION_LH), TypeFlag},   // -h   Help\r
+  {STRING_TOKEN (STR_DP_OPTION_UH), TypeFlag},   // -H   Help\r
+  {STRING_TOKEN (STR_DP_OPTION_LV), TypeFlag},   // -v   Verbose Mode\r
+  {STRING_TOKEN (STR_DP_OPTION_UA), TypeFlag},   // -A   All, Cooked\r
+  {STRING_TOKEN (STR_DP_OPTION_UR), TypeFlag},   // -R   RAW All\r
+  {STRING_TOKEN (STR_DP_OPTION_LS), TypeFlag},   // -s   Summary\r
 #if PROFILING_IMPLEMENTED\r
-  {STR_DP_OPTION_UP, TypeFlag},   // -P   Dump Profile Data\r
-  {STR_DP_OPTION_UT, TypeFlag},   // -T   Dump Trace Data\r
+  {STRING_TOKEN (STR_DP_OPTION_UP), TypeFlag},   // -P   Dump Profile Data\r
+  {STRING_TOKEN (STR_DP_OPTION_UT), TypeFlag},   // -T   Dump Trace Data\r
 #endif\r
-  {STR_DP_OPTION_LX, TypeFlag},   // -x   eXclude Cumulative Items\r
-  {STR_DP_OPTION_LN, TypeValue},  // -n # Number of records to display for A and R\r
-  {STR_DP_OPTION_LT, TypeValue},  // -t # Threshold of interest\r
-  {NULL, TypeMax}\r
+  {STRING_TOKEN (STR_DP_OPTION_LX), TypeFlag},   // -x   eXclude Cumulative Items\r
+  {STRING_TOKEN (STR_DP_OPTION_LN), TypeValue},  // -n # Number of records to display for A and R\r
+  {STRING_TOKEN (STR_DP_OPTION_LT), TypeValue}   // -t # Threshold of interest\r
   };\r
 \r
 ///@}\r
 \r
+/**\r
+  Transfer the param list value and get the command line parse.\r
+\r
+**/\r
+VOID\r
+InitialShellParamList( void )\r
+{\r
+  UINT32            ListIndex;\r
+  UINT32            ListLength;  \r
+\r
+  //\r
+  // Allocate one more for the end tag.\r
+  //\r
+  ListLength = sizeof (ParamList) / sizeof (ParamList[0]) + 1;  \r
+  DpParamList = AllocatePool (sizeof (SHELL_PARAM_ITEM) * ListLength);\r
+  ASSERT (DpParamList != NULL);\r
+  \r
+  for (ListIndex = 0; ListIndex < ListLength - 1; ListIndex ++)\r
+  { \r
+    DpParamList[ListIndex].Name = HiiGetString (gHiiHandle, ParamList[ListIndex].Token, NULL);      \r
+    DpParamList[ListIndex].Type = ParamList[ListIndex].Type;\r
+  }\r
+  DpParamList[ListIndex].Name = NULL;\r
+  DpParamList[ListIndex].Type = TypeMax;\r
+}\r
+\r
 /**\r
    Display Usage and Help information.\r
 **/\r
@@ -120,10 +146,11 @@ VOID
 DumpStatistics( void )\r
 {\r
   EFI_STRING                StringPtr;\r
-\r
-  StringPtr = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_SECTION_STATISTICS), NULL);\r
+  EFI_STRING                StringPtrUnknown;\r
+  StringPtr        = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_SECTION_STATISTICS), NULL);\r
+  StringPtrUnknown = HiiGetString (gHiiHandle, STRING_TOKEN (STR_ALIT_UNKNOWN), NULL);  \r
   PrintToken( STRING_TOKEN (STR_DP_SECTION_HEADER),\r
-              (StringPtr == NULL) ? ALit_UNKNOWN: StringPtr);\r
+              (StringPtr == NULL) ? StringPtrUnknown : StringPtr);\r
 \r
   PrintToken( STRING_TOKEN (STR_DP_STATS_NUMTRACE),       SummaryData.NumTrace);\r
   PrintToken( STRING_TOKEN (STR_DP_STATS_NUMINCOMPLETE),  SummaryData.NumIncomplete);\r
@@ -134,6 +161,8 @@ DumpStatistics( void )
 #if PROFILING_IMPLEMENTED\r
   PrintToken( STRING_TOKEN (STR_DP_STATS_NUMPROFILE),     SummaryData.NumProfile);\r
 #endif // PROFILING_IMPLEMENTED\r
+  FreePool (StringPtr);\r
+  FreePool (StringPtrUnknown);\r
 }\r
 \r
 /** \r
@@ -156,7 +185,8 @@ InitializeDp (
 {\r
   UINT64                    Freq;\r
   UINT64                    Ticker;\r
-\r
+  UINT32                    ListIndex;\r
+  \r
   LIST_ENTRY                *ParamPackage;\r
   CONST CHAR16              *CmdLineArg;\r
   EFI_STRING                StringPtr;\r
@@ -171,6 +201,20 @@ InitializeDp (
   BOOLEAN                   ProfileMode;\r
   BOOLEAN                   ExcludeMode;\r
 \r
+  EFI_STRING                StringDpOptionQh;\r
+  EFI_STRING                StringDpOptionLh;\r
+  EFI_STRING                StringDpOptionUh;\r
+  EFI_STRING                StringDpOptionLv;\r
+  EFI_STRING                StringDpOptionUs;\r
+  EFI_STRING                StringDpOptionLs;\r
+  EFI_STRING                StringDpOptionUa;\r
+  EFI_STRING                StringDpOptionUr;\r
+  EFI_STRING                StringDpOptionUt;\r
+  EFI_STRING                StringDpOptionUp;\r
+  EFI_STRING                StringDpOptionLx;\r
+  EFI_STRING                StringDpOptionLn;\r
+  EFI_STRING                StringDpOptionLt;\r
+  \r
   SummaryMode     = FALSE;\r
   VerboseMode     = FALSE;\r
   AllMode         = FALSE;\r
@@ -178,6 +222,22 @@ InitializeDp (
   TraceMode       = FALSE;\r
   ProfileMode     = FALSE;\r
   ExcludeMode     = FALSE;\r
+\r
+  StringDpOptionQh = NULL;\r
+  StringDpOptionLh = NULL;\r
+  StringDpOptionUh = NULL;\r
+  StringDpOptionLv = NULL;\r
+  StringDpOptionUs = NULL;\r
+  StringDpOptionLs = NULL;\r
+  StringDpOptionUa = NULL;\r
+  StringDpOptionUr = NULL;\r
+  StringDpOptionUt = NULL;\r
+  StringDpOptionUp = NULL;\r
+  StringDpOptionLx = NULL;\r
+  StringDpOptionLn = NULL;\r
+  StringDpOptionLt = NULL;\r
+  StringPtr        = NULL;\r
+\r
   // Get DP's entry time as soon as possible.\r
   // This is used as the Shell-Phase end time.\r
   //\r
@@ -188,6 +248,10 @@ InitializeDp (
   gHiiHandle = HiiAddPackages (&gEfiCallerIdGuid, ImageHandle, DPStrings, NULL);\r
   ASSERT (gHiiHandle != NULL);\r
 \r
+  // Initial the command list\r
+  //\r
+  InitialShellParamList ();\r
+  \r
 /****************************************************************************\r
 ****            Process Command Line arguments                           ****\r
 ****************************************************************************/\r
@@ -198,27 +262,43 @@ InitializeDp (
     ShowHelp();\r
   }\r
   else {\r
-    if (ShellCommandLineGetFlag (ParamPackage, STR_DP_OPTION_QH)  ||\r
-        ShellCommandLineGetFlag (ParamPackage, STR_DP_OPTION_LH)  ||\r
-        ShellCommandLineGetFlag (ParamPackage, STR_DP_OPTION_UH))\r
+    StringDpOptionQh = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_QH), NULL);\r
+    StringDpOptionLh = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LH), NULL);\r
+    StringDpOptionUh = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_UH), NULL);\r
+    \r
+    if (ShellCommandLineGetFlag (ParamPackage, StringDpOptionQh)  ||\r
+        ShellCommandLineGetFlag (ParamPackage, StringDpOptionLh)  ||\r
+        ShellCommandLineGetFlag (ParamPackage, StringDpOptionUh))\r
     {\r
       ShowHelp();\r
     }\r
     else {\r
+      StringDpOptionLv = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LV), NULL);\r
+      StringDpOptionUs = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_US), NULL);\r
+      StringDpOptionLs = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LS), NULL);\r
+      StringDpOptionUa = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_UA), NULL);\r
+      StringDpOptionUr = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_UR), NULL);\r
+      StringDpOptionUt = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_UT), NULL);\r
+      StringDpOptionUp = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_UP), NULL);\r
+      StringDpOptionLx = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LX), NULL);\r
+      StringDpOptionLn = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LN), NULL);\r
+      StringDpOptionLt = HiiGetString (gHiiHandle, STRING_TOKEN (STR_DP_OPTION_LT), NULL);\r
+      \r
       // Boolean Options\r
-      VerboseMode = (ShellCommandLineGetFlag (ParamPackage, STR_DP_OPTION_LV));\r
-      SummaryMode = (ShellCommandLineGetFlag (ParamPackage, STR_DP_OPTION_US) ||\r
-                     ShellCommandLineGetFlag (ParamPackage, STR_DP_OPTION_LS));\r
-      AllMode     = (ShellCommandLineGetFlag (ParamPackage, STR_DP_OPTION_UA));\r
-      RawMode     = (ShellCommandLineGetFlag (ParamPackage, STR_DP_OPTION_UR));\r
+      // \r
+      VerboseMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionLv);\r
+      SummaryMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionUs) ||\r
+                    ShellCommandLineGetFlag (ParamPackage, StringDpOptionLs);\r
+      AllMode     = ShellCommandLineGetFlag (ParamPackage, StringDpOptionUa);\r
+      RawMode     = ShellCommandLineGetFlag (ParamPackage, StringDpOptionUr);\r
 #if PROFILING_IMPLEMENTED\r
-      TraceMode   = (ShellCommandLineGetFlag (ParamPackage, STR_DP_OPTION_UT));\r
-      ProfileMode = (ShellCommandLineGetFlag (ParamPackage, STR_DP_OPTION_UP));\r
+      TraceMode   = ShellCommandLineGetFlag (ParamPackage, StringDpOptionUt);\r
+      ProfileMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionUp);\r
 #endif  // PROFILING_IMPLEMENTED\r
-      ExcludeMode = (ShellCommandLineGetFlag (ParamPackage, STR_DP_OPTION_LX));\r
+      ExcludeMode = ShellCommandLineGetFlag (ParamPackage, StringDpOptionLx);\r
 \r
       // Options with Values\r
-      CmdLineArg  = ( ShellCommandLineGetValue (ParamPackage, STR_DP_OPTION_LN));\r
+      CmdLineArg  = ShellCommandLineGetValue (ParamPackage, StringDpOptionLn);\r
       if (CmdLineArg == NULL) {\r
         Number2Display = DEFAULT_DISPLAYCOUNT;\r
       }\r
@@ -228,7 +308,7 @@ InitializeDp (
           Number2Display = MAXIMUM_DISPLAYCOUNT;\r
         }\r
       }\r
-      CmdLineArg  = (ShellCommandLineGetValue (ParamPackage, STR_DP_OPTION_LT));\r
+      CmdLineArg  = ShellCommandLineGetValue (ParamPackage, StringDpOptionLt);\r
       if (CmdLineArg == NULL) {\r
         mInterestThreshold = DEFAULT_THRESHOLD;  // 1ms := 1,000 us\r
       }\r
@@ -344,7 +424,32 @@ InitializeDp (
       }\r
     }\r
   }\r
-  (void) FreePool (mPrintTokenBuffer);\r
+\r
+  // Free the memory allocate from HiiGetString\r
+  //\r
+  ListIndex = 0;\r
+  while (DpParamList[ListIndex].Name != NULL) {\r
+    FreePool (DpParamList[ListIndex].Name);\r
+    ListIndex ++;\r
+  }  \r
+  FreePool (DpParamList);\r
+  \r
+  FreePool (StringDpOptionQh);\r
+  FreePool (StringDpOptionLh);\r
+  FreePool (StringDpOptionUh);\r
+  FreePool (StringDpOptionLv);\r
+  FreePool (StringDpOptionUs);\r
+  FreePool (StringDpOptionLs);\r
+  FreePool (StringDpOptionUa);\r
+  FreePool (StringDpOptionUr);\r
+  FreePool (StringDpOptionUt);\r
+  FreePool (StringDpOptionUp);\r
+  FreePool (StringDpOptionLx);\r
+  FreePool (StringDpOptionLn);\r
+  FreePool (StringDpOptionLt);  \r
+  FreePool (StringPtr);\r
+  FreePool (mPrintTokenBuffer);\r
+  \r
   HiiRemovePackages (gHiiHandle);\r
   return Status;\r
 }\r