Move some define code to the uni file. Also fixed some memory leak.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11015 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
ydong10
2010-11-09 03:22:42 +00:00
parent 224beee0fa
commit 8835954602
8 changed files with 197 additions and 91 deletions

View File

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