[edk2] [patch 3/3] MdeModulePkg/UefiBootManagerLib: Remove useless pref codes

Dandan Bi posted 3 patches 6 years, 11 months ago
There is a newer version of this series
[edk2] [patch 3/3] MdeModulePkg/UefiBootManagerLib: Remove useless pref codes
Posted by Dandan Bi 6 years, 11 months ago
Our new performance infrastructure can support to dump performance
date form ACPI table in OS. So we can remove the old pref 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>
---
 MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c   |  30 +-
 .../Library/UefiBootManagerLib/BmPerformance.c     | 317 ---------------------
 .../Library/UefiBootManagerLib/InternalBm.h        |   1 -
 .../UefiBootManagerLib/UefiBootManagerLib.inf      |   4 +-
 4 files changed, 28 insertions(+), 324 deletions(-)
 delete mode 100644 MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c

diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
index d684482..eb8f3b5 100644
--- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
+++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
@@ -1,9 +1,9 @@
 /** @file
   Library functions which relates with booting.
 
-Copyright (c) 2011 - 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
 (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<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
@@ -26,10 +26,34 @@ EFI_BOOT_MANAGER_LEGACY_BOOT                 mBmLegacyBoot              = NULL;
 ///
 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 } };
 
 /**
+
+  The end of BDS perf code.
+
+  @param  Event                 The triggered event.
+  @param  Context               Context for this event.
+
+**/
+VOID
+EFIAPI
+BmEndOfBdsPrefCode (
+  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.
 
   @param RefreshLegacyBootOption The function pointer to create all the legacy boot options.
   @param LegacyBoot              The function pointer to boot the legacy boot option.
 **/
@@ -1820,11 +1844,11 @@ EfiBootManagerBoot (
         //
         // Create an event to be signalled when Legacy Boot occurs to write performance data.
         //
         Status = EfiCreateEventLegacyBootEx(
                    TPL_NOTIFY,
-                   BmWriteBootToOsPerformanceData,
+                   BmEndOfBdsPrefCode,
                    NULL, 
                    &LegacyBootEvent
                    );
         ASSERT_EFI_ERROR (Status);
       );
@@ -1861,11 +1885,11 @@ EfiBootManagerBoot (
 
   //
   // Write boot to OS performance data for UEFI boot
   //
   PERF_CODE (
-    BmWriteBootToOsPerformanceData (NULL, NULL);
+    BmEndOfBdsPrefCode (NULL, NULL);
   );
 
   REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderStart));
 
   Status = gBS->StartImage (ImageHandle, &BootOption->ExitDataSize, &BootOption->ExitData);
diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c b/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
deleted file mode 100644
index 4d4495b..0000000
--- a/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
+++ /dev/null
@@ -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 ;
-}
diff --git a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
index 0224bd3..64c8d15 100644
--- a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
+++ b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
@@ -49,11 +49,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Protocol/DeferredImageLoad.h>
 
 #include <Guid/MemoryTypeInformation.h>
 #include <Guid/FileInfo.h>
 #include <Guid/GlobalVariable.h>
-#include <Guid/Performance.h>
 #include <Guid/StatusCodeDataTypeVariable.h>
 
 #include <Library/PrintLib.h>
 #include <Library/DebugLib.h>
 #include <Library/BaseMemoryLib.h>
diff --git a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
index ad4901d..1adffd7 100644
--- a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
+++ b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
@@ -3,11 +3,11 @@
 #
 #  The implementation provides richful library functions supporting load option
 #  manipulation, hotkey registration, UEFI boot, connect/disconnect, console
 #  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>
 #  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
@@ -31,11 +31,10 @@
 #
 #  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
 #
 
 [Sources]
-  BmPerformance.c
   BmConnect.c
   BmMisc.c
   BmConsole.c
   BmBoot.c
   BmBootDescription.c
@@ -84,11 +83,10 @@
   ## SOMETIMES_CONSUMES ## Variable:L"ConIn" (The device path of console in device)
   ## SOMETIMES_CONSUMES ## Variable:L"ConOut" (The device path of console out device)
   ## SOMETIMES_CONSUMES ## Variable:L"ErrOut" (The device path of error out device)
   gEfiGlobalVariableGuid
 
-  gPerformanceProtocolGuid                      ## SOMETIMES_CONSUMES ## Variable:L"PerfDataMemAddr" (The ACPI address of performance data)
   gEdkiiStatusCodeDataTypeVariableGuid          ## SOMETIMES_CONSUMES ## GUID
   gEfiDiskInfoAhciInterfaceGuid                 ## SOMETIMES_CONSUMES ## GUID
   gEfiDiskInfoIdeInterfaceGuid                  ## SOMETIMES_CONSUMES ## GUID
   gEfiDiskInfoScsiInterfaceGuid                 ## SOMETIMES_CONSUMES ## GUID
   gEfiDiskInfoSdMmcInterfaceGuid                ## SOMETIMES_CONSUMES ## GUID
-- 
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [patch 3/3] MdeModulePkg/UefiBootManagerLib: Remove useless pref codes
Posted by Ni, Ruiyu 6 years, 11 months ago
On 1/24/2018 4:01 PM, Dandan Bi wrote:
> Our new performance infrastructure can support to dump performance
> date form ACPI table in OS. So we can remove the old pref 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>
> ---
>   MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c   |  30 +-
>   .../Library/UefiBootManagerLib/BmPerformance.c     | 317 ---------------------
>   .../Library/UefiBootManagerLib/InternalBm.h        |   1 -
>   .../UefiBootManagerLib/UefiBootManagerLib.inf      |   4 +-
>   4 files changed, 28 insertions(+), 324 deletions(-)
>   delete mode 100644 MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
> 
> diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
> index d684482..eb8f3b5 100644
> --- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
> +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
> @@ -1,9 +1,9 @@
>   /** @file
>     Library functions which relates with booting.
>   
> -Copyright (c) 2011 - 2017, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
>   (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<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
> @@ -26,10 +26,34 @@ EFI_BOOT_MANAGER_LEGACY_BOOT                 mBmLegacyBoot              = NULL;
>   ///
>   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 } };
>   
>   /**
> +
> +  The end of BDS perf code.
> +
> +  @param  Event                 The triggered event.
> +  @param  Context               Context for this event.
> +
> +**/
> +VOID
> +EFIAPI
> +BmEndOfBdsPrefCode (
> +  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.
>   
>     @param RefreshLegacyBootOption The function pointer to create all the legacy boot options.
>     @param LegacyBoot              The function pointer to boot the legacy boot option.
>   **/
> @@ -1820,11 +1844,11 @@ EfiBootManagerBoot (
>           //
>           // Create an event to be signalled when Legacy Boot occurs to write performance data.
>           //
>           Status = EfiCreateEventLegacyBootEx(
>                      TPL_NOTIFY,
> -                   BmWriteBootToOsPerformanceData,
> +                   BmEndOfBdsPrefCode,
>                      NULL,
>                      &LegacyBootEvent
>                      );
>           ASSERT_EFI_ERROR (Status);
>         );
> @@ -1861,11 +1885,11 @@ EfiBootManagerBoot (
>   
>     //
>     // Write boot to OS performance data for UEFI boot
>     //
>     PERF_CODE (
> -    BmWriteBootToOsPerformanceData (NULL, NULL);
> +    BmEndOfBdsPrefCode (NULL, NULL);
>     );
>   
>     REPORT_STATUS_CODE (EFI_PROGRESS_CODE, PcdGet32 (PcdProgressCodeOsLoaderStart));
>   
>     Status = gBS->StartImage (ImageHandle, &BootOption->ExitDataSize, &BootOption->ExitData);
> diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c b/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
> deleted file mode 100644
> index 4d4495b..0000000
> --- a/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c
> +++ /dev/null
> @@ -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 ;
> -}
> diff --git a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> index 0224bd3..64c8d15 100644
> --- a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> +++ b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h
> @@ -49,11 +49,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
>   #include <Protocol/DeferredImageLoad.h>
>   
>   #include <Guid/MemoryTypeInformation.h>
>   #include <Guid/FileInfo.h>
>   #include <Guid/GlobalVariable.h>
> -#include <Guid/Performance.h>
>   #include <Guid/StatusCodeDataTypeVariable.h>
>   
>   #include <Library/PrintLib.h>
>   #include <Library/DebugLib.h>
>   #include <Library/BaseMemoryLib.h>
> diff --git a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
> index ad4901d..1adffd7 100644
> --- a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
> +++ b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
> @@ -3,11 +3,11 @@
>   #
>   #  The implementation provides richful library functions supporting load option
>   #  manipulation, hotkey registration, UEFI boot, connect/disconnect, console
>   #  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>
>   #  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
> @@ -31,11 +31,10 @@
>   #
>   #  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
>   #
>   
>   [Sources]
> -  BmPerformance.c
>     BmConnect.c
>     BmMisc.c
>     BmConsole.c
>     BmBoot.c
>     BmBootDescription.c
> @@ -84,11 +83,10 @@
>     ## SOMETIMES_CONSUMES ## Variable:L"ConIn" (The device path of console in device)
>     ## SOMETIMES_CONSUMES ## Variable:L"ConOut" (The device path of console out device)
>     ## SOMETIMES_CONSUMES ## Variable:L"ErrOut" (The device path of error out device)
>     gEfiGlobalVariableGuid
>   
> -  gPerformanceProtocolGuid                      ## SOMETIMES_CONSUMES ## Variable:L"PerfDataMemAddr" (The ACPI address of performance data)
>     gEdkiiStatusCodeDataTypeVariableGuid          ## SOMETIMES_CONSUMES ## GUID
>     gEfiDiskInfoAhciInterfaceGuid                 ## SOMETIMES_CONSUMES ## GUID
>     gEfiDiskInfoIdeInterfaceGuid                  ## SOMETIMES_CONSUMES ## GUID
>     gEfiDiskInfoScsiInterfaceGuid                 ## SOMETIMES_CONSUMES ## GUID
>     gEfiDiskInfoSdMmcInterfaceGuid                ## SOMETIMES_CONSUMES ## GUID
> 
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>

-- 
Thanks,
Ray
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel