ShellPkg UefiDpLib: Remove TimerLib dependency

Current UefiDpLib implementation depends on TimerLib,
as different platforms may implement and use their
own TimerLib, it makes the dp command needs to be built
by platform. The TimerLib dependency can be removed by
using performance property configuration table to make
UefiDpLib to be generic.

Cc: Andrew Fish <afish@apple.com>
Cc: Michael Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Cinnamon Shia <cinnamon.shia@hpe.com>
Cc: Jaben Carsey <jaben.carsey@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Andrew Fish <afish@apple.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
Star Zeng 2016-06-08 00:23:24 -07:00 committed by Michael Kinney
parent 139351093d
commit ef22403278
9 changed files with 25 additions and 56 deletions

View File

@ -13,7 +13,7 @@
Dp uses this information to group records in different ways. It also uses Dp uses this information to group records in different ways. It also uses
timer information to calculate elapsed time for each measurement. timer information to calculate elapsed time for each measurement.
Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved. Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR> (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@ -25,16 +25,10 @@
**/ **/
#include "UefiDpLib.h" #include "UefiDpLib.h"
#include <Guid/GlobalVariable.h>
#include <Library/PrintLib.h>
#include <Library/HandleParsingLib.h>
#include <Library/DevicePathLib.h>
#include <Library/ShellLib.h> #include <Library/ShellLib.h>
#include <Library/BaseLib.h> #include <Library/BaseLib.h>
#include <Library/MemoryAllocationLib.h> #include <Library/MemoryAllocationLib.h>
#include <Library/DebugLib.h> #include <Library/DebugLib.h>
#include <Library/TimerLib.h>
#include <Library/UefiLib.h> #include <Library/UefiLib.h>
#include <Guid/Performance.h> #include <Guid/Performance.h>
@ -153,8 +147,7 @@ ShellCommandRunDp (
CONST CHAR16 *CmdLineArg; CONST CHAR16 *CmdLineArg;
EFI_STATUS Status; EFI_STATUS Status;
UINT64 Freq; PERFORMANCE_PROPERTY *PerformanceProperty;
UINT64 Ticker;
UINTN Number2Display; UINTN Number2Display;
EFI_STRING StringPtr; EFI_STRING StringPtr;
@ -183,11 +176,6 @@ ShellCommandRunDp (
CustomCumulativeData = NULL; CustomCumulativeData = NULL;
ShellStatus = SHELL_SUCCESS; ShellStatus = SHELL_SUCCESS;
// Get DP's entry time as soon as possible.
// This is used as the Shell-Phase end time.
//
Ticker = GetPerformanceCounter ();
// //
// initialize the shell lib (we must be in non-auto-init...) // initialize the shell lib (we must be in non-auto-init...)
// //
@ -283,10 +271,15 @@ ShellCommandRunDp (
// StartCount = Value loaded into the counter when it starts counting // StartCount = Value loaded into the counter when it starts counting
// EndCount = Value counter counts to before it needs to be reset // EndCount = Value counter counts to before it needs to be reset
// //
Freq = GetPerformanceCounterProperties (&TimerInfo.StartCount, &TimerInfo.EndCount); Status = EfiGetSystemConfigurationTable (&gPerformanceProtocolGuid, &PerformanceProperty);
if (EFI_ERROR (Status)) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_PERF_PROPERTY_NOT_FOUND), gDpHiiHandle);
goto Done;
}
// Convert the Frequency from Hz to KHz TimerInfo.Frequency = (UINT32)DivU64x32 (PerformanceProperty->Frequency, 1000);
TimerInfo.Frequency = (UINT32)DivU64x32 (Freq, 1000); TimerInfo.StartCount = PerformanceProperty->TimerStartValue;
TimerInfo.EndCount = PerformanceProperty->TimerEndValue;
// Determine in which direction the performance counter counts. // Determine in which direction the performance counter counts.
TimerInfo.CountUp = (BOOLEAN) (TimerInfo.EndCount >= TimerInfo.StartCount); TimerInfo.CountUp = (BOOLEAN) (TimerInfo.EndCount >= TimerInfo.StartCount);
@ -362,7 +355,7 @@ ShellCommandRunDp (
} else { } else {
//------------- Begin Cooked Mode Processing //------------- Begin Cooked Mode Processing
if (TraceMode) { if (TraceMode) {
ProcessPhases ( Ticker ); ProcessPhases ();
if ( ! SummaryMode) { if ( ! SummaryMode) {
Status = ProcessHandles ( ExcludeMode); Status = ProcessHandles ( ExcludeMode);
if (Status == EFI_ABORTED) { if (Status == EFI_ABORTED) {

View File

@ -6,7 +6,7 @@
Dp application. In addition to global data, function declarations for Dp application. In addition to global data, function declarations for
DpUtilities.c, DpTrace.c, and DpProfile.c are included here. DpUtilities.c, DpTrace.c, and DpProfile.c are included here.
Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved. Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR> (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@ -236,12 +236,10 @@ DumpRawTrace(
/** /**
Gather and print Major Phase metrics. Gather and print Major Phase metrics.
@param[in] Ticker The timer value for the END of Shell phase
**/ **/
VOID VOID
ProcessPhases( ProcessPhases(
IN UINT64 Ticker VOID
); );

View File

@ -1,7 +1,7 @@
/** @file /** @file
Measured Profiling reporting for the Dp utility. Measured Profiling reporting for the Dp utility.
Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved. Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -16,7 +16,6 @@
#include <Library/MemoryAllocationLib.h> #include <Library/MemoryAllocationLib.h>
#include <Library/DebugLib.h> #include <Library/DebugLib.h>
#include <Library/UefiBootServicesTableLib.h> #include <Library/UefiBootServicesTableLib.h>
#include <Library/TimerLib.h>
#include <Library/PeCoffGetEntryPointLib.h> #include <Library/PeCoffGetEntryPointLib.h>
#include <Library/PerformanceLib.h> #include <Library/PerformanceLib.h>
#include <Library/PrintLib.h> #include <Library/PrintLib.h>

View File

@ -1,7 +1,7 @@
/** @file /** @file
Trace reporting for the Dp utility. Trace reporting for the Dp utility.
Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved. Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR> (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@ -17,7 +17,6 @@
#include <Library/MemoryAllocationLib.h> #include <Library/MemoryAllocationLib.h>
#include <Library/DebugLib.h> #include <Library/DebugLib.h>
#include <Library/UefiBootServicesTableLib.h> #include <Library/UefiBootServicesTableLib.h>
#include <Library/TimerLib.h>
#include <Library/PeCoffGetEntryPointLib.h> #include <Library/PeCoffGetEntryPointLib.h>
#include <Library/PerformanceLib.h> #include <Library/PerformanceLib.h>
#include <Library/PrintLib.h> #include <Library/PrintLib.h>
@ -386,12 +385,10 @@ DumpRawTrace(
/** /**
Gather and print Major Phase metrics. Gather and print Major Phase metrics.
@param[in] Ticker The timer value for the END of Shell phase
**/ **/
VOID VOID
ProcessPhases( ProcessPhases(
IN UINT64 Ticker VOID
) )
{ {
MEASUREMENT_RECORD Measurement; MEASUREMENT_RECORD Measurement;
@ -400,7 +397,6 @@ ProcessPhases(
UINT64 PeiTime; UINT64 PeiTime;
UINT64 DxeTime; UINT64 DxeTime;
UINT64 BdsTime; UINT64 BdsTime;
UINT64 ShellTime;
UINT64 ElapsedTime; UINT64 ElapsedTime;
UINT64 Duration; UINT64 Duration;
UINT64 Total; UINT64 Total;
@ -413,7 +409,6 @@ ProcessPhases(
PeiTime = 0; PeiTime = 0;
DxeTime = 0; DxeTime = 0;
BdsTime = 0; BdsTime = 0;
ShellTime = 0;
// //
// Get Execution Phase Statistics // Get Execution Phase Statistics
// //
@ -434,9 +429,6 @@ ProcessPhases(
&Measurement.EndTimeStamp, &Measurement.EndTimeStamp,
&Measurement.Identifier)) != 0) &Measurement.Identifier)) != 0)
{ {
if (AsciiStrnCmp (Measurement.Token, ALit_SHELL, PERF_TOKEN_LENGTH) == 0) {
Measurement.EndTimeStamp = Ticker;
}
if (Measurement.EndTimeStamp == 0) { // Skip "incomplete" records if (Measurement.EndTimeStamp == 0) { // Skip "incomplete" records
continue; continue;
} }
@ -454,8 +446,6 @@ ProcessPhases(
DxeTime = Duration; DxeTime = Duration;
} else if (AsciiStrnCmp (Measurement.Token, ALit_BDS, PERF_TOKEN_LENGTH) == 0) { } else if (AsciiStrnCmp (Measurement.Token, ALit_BDS, PERF_TOKEN_LENGTH) == 0) {
BdsTime = Duration; BdsTime = Duration;
} else if (AsciiStrnCmp (Measurement.Token, ALit_SHELL, PERF_TOKEN_LENGTH) == 0) {
ShellTime = Duration;
} }
} }
@ -510,17 +500,6 @@ ProcessPhases(
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_PHASE_BDSTO), gDpHiiHandle, ALit_BdsTO, ElapsedTime); ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_PHASE_BDSTO), gDpHiiHandle, ALit_BdsTO, ElapsedTime);
} }
// print SHELL phase duration time
//
if (ShellTime > 0) {
ElapsedTime = DivU64x32 (
ShellTime,
(UINT32)TimerInfo.Frequency
);
Total += ElapsedTime;
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_PHASE_DURATION), gDpHiiHandle, ALit_SHELL, ElapsedTime);
}
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_TOTAL_DURATION), gDpHiiHandle, Total); ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_TOTAL_DURATION), gDpHiiHandle, Total);
} }

View File

@ -1,7 +1,7 @@
/** @file /** @file
Utility functions used by the Dp application. Utility functions used by the Dp application.
Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved. Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR> (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@ -17,7 +17,6 @@
#include <Library/MemoryAllocationLib.h> #include <Library/MemoryAllocationLib.h>
#include <Library/DebugLib.h> #include <Library/DebugLib.h>
#include <Library/UefiBootServicesTableLib.h> #include <Library/UefiBootServicesTableLib.h>
#include <Library/TimerLib.h>
#include <Library/PeCoffGetEntryPointLib.h> #include <Library/PeCoffGetEntryPointLib.h>
#include <Library/PrintLib.h> #include <Library/PrintLib.h>
#include <Library/HiiLib.h> #include <Library/HiiLib.h>

View File

@ -1,7 +1,7 @@
/** @file /** @file
Definitions of ASCII string literals used by DP. Definitions of ASCII string literals used by DP.
Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR> Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -16,7 +16,6 @@
CHAR8 const ALit_TimerLibError[] = "Timer library instance error!\n"; CHAR8 const ALit_TimerLibError[] = "Timer library instance error!\n";
CHAR8 const ALit_SEC[] = SEC_TOK; CHAR8 const ALit_SEC[] = SEC_TOK;
CHAR8 const ALit_DXE[] = DXE_TOK; CHAR8 const ALit_DXE[] = DXE_TOK;
CHAR8 const ALit_SHELL[] = SHELL_TOK;
CHAR8 const ALit_PEI[] = PEI_TOK; CHAR8 const ALit_PEI[] = PEI_TOK;
CHAR8 const ALit_BDS[] = BDS_TOK; CHAR8 const ALit_BDS[] = BDS_TOK;
CHAR8 const ALit_BdsTO[] = "BdsTimeOut"; CHAR8 const ALit_BdsTO[] = "BdsTimeOut";

View File

@ -1,7 +1,7 @@
## @file ## @file
# Display Performance Application, Module information file. # Display Performance Application, Module information file.
# #
# Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved. # Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.
# This program and the accompanying materials # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at # which accompanies this distribution. The full text of the license may be found at
@ -48,7 +48,6 @@
MdeModulePkg/MdeModulePkg.dec MdeModulePkg/MdeModulePkg.dec
[LibraryClasses] [LibraryClasses]
TimerLib
PerformanceLib PerformanceLib
DxeServicesLib DxeServicesLib
MemoryAllocationLib MemoryAllocationLib
@ -64,6 +63,9 @@
PrintLib PrintLib
DevicePathLib DevicePathLib
[Guids]
gPerformanceProtocolGuid ## CONSUMES ## SystemTable
[Protocols] [Protocols]
gEfiLoadedImageProtocolGuid ## CONSUMES gEfiLoadedImageProtocolGuid ## CONSUMES
gEfiDriverBindingProtocolGuid ## SOMETIMES_CONSUMES gEfiDriverBindingProtocolGuid ## SOMETIMES_CONSUMES

View File

@ -1,7 +1,7 @@
// *++ // *++
// //
// (C) Copyright 2014-2015 Hewlett-Packard Development Company, L.P.<BR> // (C) Copyright 2014-2015 Hewlett-Packard Development Company, L.P.<BR>
// Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved.<BR> // Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
// (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> // (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
// This program and the accompanying materials // This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License // are licensed and made available under the terms and conditions of the BSD License
@ -35,6 +35,7 @@
#string STR_DP_INVALID_ARG #language en-US "Invalid argument(s)\n" #string STR_DP_INVALID_ARG #language en-US "Invalid argument(s)\n"
#string STR_DP_HANDLES_ERROR #language en-US "Locate all handles error - %r\n" #string STR_DP_HANDLES_ERROR #language en-US "Locate all handles error - %r\n"
#string STR_DP_ERROR_NAME #language en-US "Unknown driver name" #string STR_DP_ERROR_NAME #language en-US "Unknown driver name"
#string STR_PERF_PROPERTY_NOT_FOUND #language en-US "Performance property not found\n"
#string STR_DP_BUILD_REVISION #language en-US "\nDP Build Version: %d.%d\n" #string STR_DP_BUILD_REVISION #language en-US "\nDP Build Version: %d.%d\n"
#string STR_DP_KHZ #language en-US "System Performance Timer Frequency: %,8d (KHz)\n" #string STR_DP_KHZ #language en-US "System Performance Timer Frequency: %,8d (KHz)\n"
#string STR_DP_TIMER_PROPERTIES #language en-US "System Performance Timer counts %s from 0x%Lx to 0x%Lx\n" #string STR_DP_TIMER_PROPERTIES #language en-US "System Performance Timer counts %s from 0x%Lx to 0x%Lx\n"

View File

@ -1,7 +1,7 @@
## @file ## @file
# Shell Package # Shell Package
# #
# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
# #
# This program and the accompanying materials # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
@ -99,7 +99,6 @@
ShellPkg/Library/UefiDpLib/UefiDpLib.inf { ShellPkg/Library/UefiDpLib/UefiDpLib.inf {
<LibraryClasses> <LibraryClasses>
TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf
PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
} }