mirror of https://github.com/acidanthera/audk.git
IntelFrameworkModulePkg/GenericBdsLib: Remove the useless Perf codes
Our new performance infrastructure (edk2 trunk commit hash value: SHA-1:73fef64f14
~ SHA-1:115eae650b
) can support to dump performance date form ACPI table in OS. So we can remove the old perf code to write performance data to OS. Cc: Liming Gao <liming.gao@intel.com> Cc: Star Zeng <star.zeng@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
parent
46433d44a9
commit
b8d06293ca
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
BDS Lib functions which relate with create or process the boot option.
|
||||
|
||||
Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
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
|
||||
|
@ -18,6 +18,29 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
BOOLEAN mEnumBootDevice = FALSE;
|
||||
EFI_HII_HANDLE gBdsLibStringPackHandle = NULL;
|
||||
|
||||
/**
|
||||
|
||||
End Perf entry of BDS
|
||||
|
||||
@param Event The triggered event.
|
||||
@param Context Context for this event.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
BmEndOfBdsPerfCode (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
//
|
||||
// Record the performance data for End of BDS
|
||||
//
|
||||
PERF_END(NULL, "BDS", NULL, 0);
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
/**
|
||||
The constructor function register UNI strings into imageHandle.
|
||||
|
||||
|
@ -1695,7 +1718,7 @@ BdsLibDoLegacyBoot (
|
|||
//
|
||||
Status = EfiCreateEventLegacyBootEx(
|
||||
TPL_NOTIFY,
|
||||
WriteBootToOsPerformanceData,
|
||||
BmEndOfBdsPerfCode,
|
||||
NULL,
|
||||
&LegacyBootEvent
|
||||
);
|
||||
|
@ -2425,7 +2448,7 @@ BdsLibBootViaBootOption (
|
|||
// Write boot to OS performance data for UEFI boot
|
||||
//
|
||||
PERF_CODE (
|
||||
WriteBootToOsPerformanceData (NULL, NULL);
|
||||
BmEndOfBdsPerfCode (NULL, NULL);
|
||||
);
|
||||
|
||||
//
|
||||
|
|
|
@ -35,7 +35,6 @@
|
|||
|
||||
[Sources]
|
||||
DevicePath.c
|
||||
Performance.c
|
||||
BdsConnect.c
|
||||
BdsMisc.c
|
||||
BdsConsole.c
|
||||
|
@ -97,7 +96,6 @@
|
|||
## SOMETIMES_PRODUCES ## Variable:L"BootNext" # The number of next boot option
|
||||
gEfiGlobalVariableGuid
|
||||
gEfiFileInfoGuid ## SOMETIMES_CONSUMES ## GUID
|
||||
gPerformanceProtocolGuid ## SOMETIMES_CONSUMES ## Variable:L"PerfDataMemAddr" # The ACPI address of performance data
|
||||
gLastEnumLangGuid ## SOMETIMES_PRODUCES ## Variable:L"LastEnumLang" # Platform language at last time enumeration.
|
||||
gHdBootDevicePathVariablGuid ## SOMETIMES_PRODUCES ## Variable:L"HDDP" # The device path of Boot file on Hard device.
|
||||
gBdsLibStringPackageGuid ## CONSUMES ## HII # HII String PackageList Guid
|
||||
|
|
|
@ -45,7 +45,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#include <Guid/FileInfo.h>
|
||||
#include <Guid/GlobalVariable.h>
|
||||
#include <Guid/PcAnsi.h>
|
||||
#include <Guid/Performance.h>
|
||||
#include <Guid/BdsLibHii.h>
|
||||
#include <Guid/HdBootVariable.h>
|
||||
#include <Guid/LastEnumLang.h>
|
||||
|
@ -85,22 +84,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
||||
Writes performance data of booting into the allocated memory.
|
||||
OS can process these records.
|
||||
|
||||
@param Event The triggered event.
|
||||
@param Context Context for this event.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
WriteBootToOsPerformanceData (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
);
|
||||
|
||||
/**
|
||||
Get the headers (dos, image, optional header) from an image
|
||||
|
||||
|
|
|
@ -1,313 +0,0 @@
|
|||
/** @file
|
||||
This file include the file which can help to get the system
|
||||
performance, all the function will only include if the performance
|
||||
switch is set.
|
||||
|
||||
Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
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
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include "InternalBdsLib.h"
|
||||
|
||||
PERF_HEADER mPerfHeader;
|
||||
PERF_DATA mPerfData;
|
||||
EFI_PHYSICAL_ADDRESS mAcpiLowMemoryBase = 0x0FFFFFFFFULL;
|
||||
|
||||
/**
|
||||
Get the short verion of PDB file name to be
|
||||
used in performance data logging.
|
||||
|
||||
@param PdbFileName The long PDB file name.
|
||||
@param GaugeString The output string to be logged by performance logger.
|
||||
|
||||
**/
|
||||
VOID
|
||||
GetShortPdbFileName (
|
||||
IN CONST CHAR8 *PdbFileName,
|
||||
OUT CHAR8 *GaugeString
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
UINTN Index1;
|
||||
UINTN StartIndex;
|
||||
UINTN EndIndex;
|
||||
|
||||
if (PdbFileName == NULL) {
|
||||
AsciiStrCpyS (GaugeString, PERF_TOKEN_SIZE, " ");
|
||||
} else {
|
||||
StartIndex = 0;
|
||||
for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++)
|
||||
;
|
||||
|
||||
for (Index = 0; PdbFileName[Index] != 0; Index++) {
|
||||
if (PdbFileName[Index] == '\\') {
|
||||
StartIndex = Index + 1;
|
||||
}
|
||||
|
||||
if (PdbFileName[Index] == '.') {
|
||||
EndIndex = Index;
|
||||
}
|
||||
}
|
||||
|
||||
Index1 = 0;
|
||||
for (Index = StartIndex; Index < EndIndex; Index++) {
|
||||
GaugeString[Index1] = PdbFileName[Index];
|
||||
Index1++;
|
||||
if (Index1 == PERF_TOKEN_LENGTH) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
GaugeString[Index1] = 0;
|
||||
}
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
/**
|
||||
Get the name from the Driver handle, which can be a handle with
|
||||
EFI_LOADED_IMAGE_PROTOCOL or EFI_DRIVER_BINDING_PROTOCOL installed.
|
||||
This name can be used in performance data logging.
|
||||
|
||||
@param Handle Driver handle.
|
||||
@param GaugeString The output string to be logged by performance logger.
|
||||
|
||||
**/
|
||||
VOID
|
||||
GetNameFromHandle (
|
||||
IN EFI_HANDLE Handle,
|
||||
OUT CHAR8 *GaugeString
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_LOADED_IMAGE_PROTOCOL *Image;
|
||||
CHAR8 *PdbFileName;
|
||||
EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
|
||||
|
||||
AsciiStrCpyS (GaugeString, PERF_TOKEN_SIZE, " ");
|
||||
|
||||
//
|
||||
// Get handle name from image protocol
|
||||
//
|
||||
Status = gBS->HandleProtocol (
|
||||
Handle,
|
||||
&gEfiLoadedImageProtocolGuid,
|
||||
(VOID **) &Image
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
Status = gBS->OpenProtocol (
|
||||
Handle,
|
||||
&gEfiDriverBindingProtocolGuid,
|
||||
(VOID **) &DriverBinding,
|
||||
NULL,
|
||||
NULL,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return ;
|
||||
}
|
||||
//
|
||||
// Get handle name from image protocol
|
||||
//
|
||||
Status = gBS->HandleProtocol (
|
||||
DriverBinding->ImageHandle,
|
||||
&gEfiLoadedImageProtocolGuid,
|
||||
(VOID **) &Image
|
||||
);
|
||||
}
|
||||
|
||||
PdbFileName = PeCoffLoaderGetPdbPointer (Image->ImageBase);
|
||||
|
||||
if (PdbFileName != NULL) {
|
||||
GetShortPdbFileName (PdbFileName, GaugeString);
|
||||
}
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Writes performance data of booting into the allocated memory.
|
||||
OS can process these records.
|
||||
|
||||
@param Event The triggered event.
|
||||
@param Context Context for this event.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
WriteBootToOsPerformanceData (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT32 LimitCount;
|
||||
EFI_HANDLE *Handles;
|
||||
UINTN NoHandles;
|
||||
CHAR8 GaugeString[PERF_TOKEN_SIZE];
|
||||
UINT8 *Ptr;
|
||||
UINT32 Index;
|
||||
UINT64 Ticker;
|
||||
UINT64 Freq;
|
||||
UINT32 Duration;
|
||||
UINTN LogEntryKey;
|
||||
CONST VOID *Handle;
|
||||
CONST CHAR8 *Token;
|
||||
CONST CHAR8 *Module;
|
||||
UINT64 StartTicker;
|
||||
UINT64 EndTicker;
|
||||
UINT64 StartValue;
|
||||
UINT64 EndValue;
|
||||
BOOLEAN CountUp;
|
||||
UINTN VarSize;
|
||||
BOOLEAN Found;
|
||||
|
||||
//
|
||||
// Record the performance data for End of BDS
|
||||
//
|
||||
PERF_END(NULL, "BDS", NULL, 0);
|
||||
|
||||
//
|
||||
// Retrieve time stamp count as early as possible
|
||||
//
|
||||
Ticker = GetPerformanceCounter ();
|
||||
|
||||
Freq = GetPerformanceCounterProperties (&StartValue, &EndValue);
|
||||
|
||||
Freq = DivU64x32 (Freq, 1000);
|
||||
|
||||
mPerfHeader.CpuFreq = Freq;
|
||||
|
||||
//
|
||||
// Record BDS raw performance data
|
||||
//
|
||||
if (EndValue >= StartValue) {
|
||||
mPerfHeader.BDSRaw = Ticker - StartValue;
|
||||
CountUp = TRUE;
|
||||
} else {
|
||||
mPerfHeader.BDSRaw = StartValue - Ticker;
|
||||
CountUp = FALSE;
|
||||
}
|
||||
|
||||
//
|
||||
// Reset the entry count
|
||||
//
|
||||
mPerfHeader.Count = 0;
|
||||
|
||||
if (mAcpiLowMemoryBase == 0x0FFFFFFFF) {
|
||||
VarSize = sizeof (EFI_PHYSICAL_ADDRESS);
|
||||
Status = gRT->GetVariable (
|
||||
L"PerfDataMemAddr",
|
||||
&gPerformanceProtocolGuid,
|
||||
NULL,
|
||||
&VarSize,
|
||||
&mAcpiLowMemoryBase
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
//
|
||||
// Fail to get the variable, return.
|
||||
//
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Put Detailed performance data into memory
|
||||
//
|
||||
Handles = NULL;
|
||||
Status = gBS->LocateHandleBuffer (
|
||||
AllHandles,
|
||||
NULL,
|
||||
NULL,
|
||||
&NoHandles,
|
||||
&Handles
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return ;
|
||||
}
|
||||
|
||||
Ptr = (UINT8 *) ((UINT32) mAcpiLowMemoryBase + sizeof (PERF_HEADER));
|
||||
LimitCount = (UINT32) (PERF_DATA_MAX_LENGTH - sizeof (PERF_HEADER)) / sizeof (PERF_DATA);
|
||||
|
||||
//
|
||||
// Get performance data
|
||||
//
|
||||
LogEntryKey = 0;
|
||||
while ((LogEntryKey = GetPerformanceMeasurement (
|
||||
LogEntryKey,
|
||||
&Handle,
|
||||
&Token,
|
||||
&Module,
|
||||
&StartTicker,
|
||||
&EndTicker)) != 0) {
|
||||
if (EndTicker != 0) {
|
||||
if (StartTicker == 1) {
|
||||
StartTicker = StartValue;
|
||||
}
|
||||
if (EndTicker == 1) {
|
||||
EndTicker = StartValue;
|
||||
}
|
||||
Ticker = CountUp ? (EndTicker - StartTicker) : (StartTicker - EndTicker);
|
||||
|
||||
Duration = (UINT32) DivU64x32 (Ticker, (UINT32) Freq);
|
||||
if (Duration == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ZeroMem (&mPerfData, sizeof (PERF_DATA));
|
||||
|
||||
mPerfData.Duration = Duration;
|
||||
|
||||
//
|
||||
// See if the Handle is in the handle buffer
|
||||
//
|
||||
Found = FALSE;
|
||||
for (Index = 0; Index < NoHandles; Index++) {
|
||||
if (Handle == Handles[Index]) {
|
||||
GetNameFromHandle (Handles[Index], GaugeString);
|
||||
AsciiStrCpyS (mPerfData.Token, PERF_TOKEN_SIZE, GaugeString);
|
||||
Found = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Found) {
|
||||
AsciiStrnCpyS (mPerfData.Token, PERF_TOKEN_SIZE, Token, PERF_TOKEN_LENGTH);
|
||||
}
|
||||
|
||||
CopyMem (Ptr, &mPerfData, sizeof (PERF_DATA));
|
||||
Ptr += sizeof (PERF_DATA);
|
||||
|
||||
mPerfHeader.Count++;
|
||||
if (mPerfHeader.Count == LimitCount) {
|
||||
goto Done;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Done:
|
||||
|
||||
FreePool (Handles);
|
||||
|
||||
mPerfHeader.Signiture = PERFORMANCE_SIGNATURE;
|
||||
|
||||
//
|
||||
// Put performance data to Reserved memory
|
||||
//
|
||||
CopyMem (
|
||||
(UINTN *) (UINTN) mAcpiLowMemoryBase,
|
||||
&mPerfHeader,
|
||||
sizeof (PERF_HEADER)
|
||||
);
|
||||
|
||||
return ;
|
||||
}
|
Loading…
Reference in New Issue