]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceLib.c
Optimize the log entry search algorithm to save boot performance.
[mirror_edk2.git] / MdeModulePkg / Library / SmmCorePerformanceLib / SmmCorePerformanceLib.c
index ca953df932ebc3e0c3934b5c61f0dab3b1aa3ef9..214d044bcb4dad1c2ebdba74fa0ee582aa39b868 100644 (file)
@@ -93,6 +93,7 @@ SmmSearchForGaugeEntry (
   )\r
 {\r
   UINT32                    Index;\r
+  UINT32                    Index2;\r
   UINT32                    NumberOfEntries;\r
   GAUGE_DATA_ENTRY_EX       *GaugeEntryExArray;\r
 \r
@@ -106,12 +107,16 @@ SmmSearchForGaugeEntry (
   NumberOfEntries = mGaugeData->NumberOfEntries;\r
   GaugeEntryExArray = (GAUGE_DATA_ENTRY_EX *) (mGaugeData + 1);\r
 \r
+  Index2 = 0;\r
+\r
   for (Index = 0; Index < NumberOfEntries; Index++) {\r
-    if ((GaugeEntryExArray[Index].Handle == (EFI_PHYSICAL_ADDRESS) (UINTN) Handle) &&\r
-         AsciiStrnCmp (GaugeEntryExArray[Index].Token, Token, SMM_PERFORMANCE_STRING_LENGTH) == 0 &&\r
-         AsciiStrnCmp (GaugeEntryExArray[Index].Module, Module, SMM_PERFORMANCE_STRING_LENGTH) == 0 &&\r
-         (GaugeEntryExArray[Index].Identifier == Identifier) &&\r
-         GaugeEntryExArray[Index].EndTimeStamp == 0) {\r
+    Index2 = NumberOfEntries - 1 - Index;\r
+    if (GaugeEntryExArray[Index2].EndTimeStamp == 0 &&\r
+        (GaugeEntryExArray[Index2].Handle == (EFI_PHYSICAL_ADDRESS) (UINTN) Handle) &&\r
+        AsciiStrnCmp (GaugeEntryExArray[Index2].Token, Token, SMM_PERFORMANCE_STRING_LENGTH) == 0 &&\r
+        AsciiStrnCmp (GaugeEntryExArray[Index2].Module, Module, SMM_PERFORMANCE_STRING_LENGTH) == 0 &&\r
+        (GaugeEntryExArray[Index2].Identifier == Identifier)) {\r
+      Index = Index2;\r
       break;\r
     }\r
   }\r