mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/UefiBootManagerLib: Remove the useless perf codes
V2: Just update the commit message to reference the hash value of new performance infrastructure. 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: Ruiyu Ni <ruiyu.ni@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: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
parent
9f0d7651b3
commit
3a039a567a
|
@ -27,6 +27,29 @@ EFI_BOOT_MANAGER_LEGACY_BOOT mBmLegacyBoot = NULL;
|
||||||
EFI_GUID mBmHardDriveBootVariableGuid = { 0xfab7e9e1, 0x39dd, 0x4f2b, { 0x84, 0x08, 0xe2, 0x0e, 0x90, 0x6c, 0xb6, 0xde } };
|
EFI_GUID mBmHardDriveBootVariableGuid = { 0xfab7e9e1, 0x39dd, 0x4f2b, { 0x84, 0x08, 0xe2, 0x0e, 0x90, 0x6c, 0xb6, 0xde } };
|
||||||
EFI_GUID mBmAutoCreateBootOptionGuid = { 0x8108ac4e, 0x9f11, 0x4d59, { 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2 } };
|
EFI_GUID mBmAutoCreateBootOptionGuid = { 0x8108ac4e, 0x9f11, 0x4d59, { 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2 } };
|
||||||
|
|
||||||
|
/**
|
||||||
|
|
||||||
|
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 function registers the legacy boot support capabilities.
|
The function registers the legacy boot support capabilities.
|
||||||
|
|
||||||
|
@ -1830,7 +1853,7 @@ EfiBootManagerBoot (
|
||||||
//
|
//
|
||||||
Status = EfiCreateEventLegacyBootEx(
|
Status = EfiCreateEventLegacyBootEx(
|
||||||
TPL_NOTIFY,
|
TPL_NOTIFY,
|
||||||
BmWriteBootToOsPerformanceData,
|
BmEndOfBdsPerfCode,
|
||||||
NULL,
|
NULL,
|
||||||
&LegacyBootEvent
|
&LegacyBootEvent
|
||||||
);
|
);
|
||||||
|
@ -1871,7 +1894,7 @@ EfiBootManagerBoot (
|
||||||
// Write boot to OS performance data for UEFI boot
|
// Write boot to OS performance data for UEFI boot
|
||||||
//
|
//
|
||||||
PERF_CODE (
|
PERF_CODE (
|
||||||
BmWriteBootToOsPerformanceData (NULL, NULL);
|
BmEndOfBdsPerfCode (NULL, NULL);
|
||||||
);
|
);
|
||||||
|
|
||||||
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderStart));
|
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderStart));
|
||||||
|
|
|
@ -1,317 +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 - 2017, 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 "InternalBm.h"
|
|
||||||
|
|
||||||
PERF_HEADER mBmPerfHeader;
|
|
||||||
PERF_DATA mBmPerfData;
|
|
||||||
EFI_PHYSICAL_ADDRESS mBmAcpiLowMemoryBase = 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.
|
|
||||||
@param StringSize The buffer size of GaugeString in bytes.
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
BmGetShortPdbFileName (
|
|
||||||
IN CONST CHAR8 *PdbFileName,
|
|
||||||
OUT CHAR8 *GaugeString,
|
|
||||||
IN UINTN StringSize
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINTN Index;
|
|
||||||
UINTN Index1;
|
|
||||||
UINTN StartIndex;
|
|
||||||
UINTN EndIndex;
|
|
||||||
|
|
||||||
if (PdbFileName == NULL) {
|
|
||||||
AsciiStrCpyS (GaugeString, StringSize, " ");
|
|
||||||
} else {
|
|
||||||
StartIndex = 0;
|
|
||||||
for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++)
|
|
||||||
;
|
|
||||||
|
|
||||||
for (Index = 0; PdbFileName[Index] != 0; Index++) {
|
|
||||||
if ((PdbFileName[Index] == '\\') || (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 == StringSize - 1) {
|
|
||||||
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.
|
|
||||||
@param StringSize The buffer size of GaugeString in bytes.
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
BmGetNameFromHandle (
|
|
||||||
IN EFI_HANDLE Handle,
|
|
||||||
OUT CHAR8 *GaugeString,
|
|
||||||
IN UINTN StringSize
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
EFI_LOADED_IMAGE_PROTOCOL *Image;
|
|
||||||
CHAR8 *PdbFileName;
|
|
||||||
EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
|
|
||||||
|
|
||||||
AsciiStrCpyS (GaugeString, StringSize, " ");
|
|
||||||
|
|
||||||
//
|
|
||||||
// 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) {
|
|
||||||
BmGetShortPdbFileName (PdbFileName, GaugeString, StringSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
BmWriteBootToOsPerformanceData (
|
|
||||||
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);
|
|
||||||
|
|
||||||
mBmPerfHeader.CpuFreq = Freq;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Record BDS raw performance data
|
|
||||||
//
|
|
||||||
if (EndValue >= StartValue) {
|
|
||||||
mBmPerfHeader.BDSRaw = Ticker - StartValue;
|
|
||||||
CountUp = TRUE;
|
|
||||||
} else {
|
|
||||||
mBmPerfHeader.BDSRaw = StartValue - Ticker;
|
|
||||||
CountUp = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Reset the entry count
|
|
||||||
//
|
|
||||||
mBmPerfHeader.Count = 0;
|
|
||||||
|
|
||||||
if (mBmAcpiLowMemoryBase == 0x0FFFFFFFF) {
|
|
||||||
VarSize = sizeof (EFI_PHYSICAL_ADDRESS);
|
|
||||||
Status = gRT->GetVariable (
|
|
||||||
L"PerfDataMemAddr",
|
|
||||||
&gPerformanceProtocolGuid,
|
|
||||||
NULL,
|
|
||||||
&VarSize,
|
|
||||||
&mBmAcpiLowMemoryBase
|
|
||||||
);
|
|
||||||
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) mBmAcpiLowMemoryBase + 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 (&mBmPerfData, sizeof (PERF_DATA));
|
|
||||||
|
|
||||||
mBmPerfData.Duration = Duration;
|
|
||||||
|
|
||||||
//
|
|
||||||
// See if the Handle is in the handle buffer
|
|
||||||
//
|
|
||||||
Found = FALSE;
|
|
||||||
for (Index = 0; Index < NoHandles; Index++) {
|
|
||||||
if (Handle == Handles[Index]) {
|
|
||||||
BmGetNameFromHandle (Handles[Index], GaugeString, PERF_TOKEN_SIZE);
|
|
||||||
AsciiStrCpyS (mBmPerfData.Token, PERF_TOKEN_SIZE, GaugeString);
|
|
||||||
Found = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Found) {
|
|
||||||
AsciiStrnCpyS (mBmPerfData.Token, PERF_TOKEN_SIZE, Token, PERF_TOKEN_LENGTH);
|
|
||||||
}
|
|
||||||
|
|
||||||
CopyMem (Ptr, &mBmPerfData, sizeof (PERF_DATA));
|
|
||||||
Ptr += sizeof (PERF_DATA);
|
|
||||||
|
|
||||||
mBmPerfHeader.Count++;
|
|
||||||
if (mBmPerfHeader.Count == LimitCount) {
|
|
||||||
goto Done;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Done:
|
|
||||||
|
|
||||||
FreePool (Handles);
|
|
||||||
|
|
||||||
mBmPerfHeader.Signiture = PERFORMANCE_SIGNATURE;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Put performance data to Reserved memory
|
|
||||||
//
|
|
||||||
CopyMem (
|
|
||||||
(UINTN *) (UINTN) mBmAcpiLowMemoryBase,
|
|
||||||
&mBmPerfHeader,
|
|
||||||
sizeof (PERF_HEADER)
|
|
||||||
);
|
|
||||||
|
|
||||||
return ;
|
|
||||||
}
|
|
|
@ -51,7 +51,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
#include <Guid/MemoryTypeInformation.h>
|
#include <Guid/MemoryTypeInformation.h>
|
||||||
#include <Guid/FileInfo.h>
|
#include <Guid/FileInfo.h>
|
||||||
#include <Guid/GlobalVariable.h>
|
#include <Guid/GlobalVariable.h>
|
||||||
#include <Guid/Performance.h>
|
|
||||||
#include <Guid/StatusCodeDataTypeVariable.h>
|
#include <Guid/StatusCodeDataTypeVariable.h>
|
||||||
|
|
||||||
#include <Library/PrintLib.h>
|
#include <Library/PrintLib.h>
|
||||||
|
@ -184,22 +183,6 @@ BmGetFreeOptionNumber (
|
||||||
OUT UINT16 *FreeOptionNumber
|
OUT UINT16 *FreeOptionNumber
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
|
||||||
|
|
||||||
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
|
|
||||||
BmWriteBootToOsPerformanceData (
|
|
||||||
IN EFI_EVENT Event,
|
|
||||||
IN VOID *Context
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This routine adjust the memory information for different memory type and
|
This routine adjust the memory information for different memory type and
|
||||||
save them into the variables for next boot. It resets the system when
|
save them into the variables for next boot. It resets the system when
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# manipulation, hotkey registration, UEFI boot, connect/disconnect, console
|
# manipulation, hotkey registration, UEFI boot, connect/disconnect, console
|
||||||
# manipulation, driver health checking and etc.
|
# manipulation, driver health checking and etc.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
# (C) Copyright 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
|
||||||
|
@ -33,7 +33,6 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
[Sources]
|
[Sources]
|
||||||
BmPerformance.c
|
|
||||||
BmConnect.c
|
BmConnect.c
|
||||||
BmMisc.c
|
BmMisc.c
|
||||||
BmConsole.c
|
BmConsole.c
|
||||||
|
@ -86,7 +85,6 @@
|
||||||
## SOMETIMES_CONSUMES ## Variable:L"ErrOut" (The device path of error out device)
|
## SOMETIMES_CONSUMES ## Variable:L"ErrOut" (The device path of error out device)
|
||||||
gEfiGlobalVariableGuid
|
gEfiGlobalVariableGuid
|
||||||
|
|
||||||
gPerformanceProtocolGuid ## SOMETIMES_CONSUMES ## Variable:L"PerfDataMemAddr" (The ACPI address of performance data)
|
|
||||||
gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID
|
gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID
|
||||||
gEfiDiskInfoAhciInterfaceGuid ## SOMETIMES_CONSUMES ## GUID
|
gEfiDiskInfoAhciInterfaceGuid ## SOMETIMES_CONSUMES ## GUID
|
||||||
gEfiDiskInfoIdeInterfaceGuid ## SOMETIMES_CONSUMES ## GUID
|
gEfiDiskInfoIdeInterfaceGuid ## SOMETIMES_CONSUMES ## GUID
|
||||||
|
|
Loading…
Reference in New Issue