]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Optimize the log entry search algorithm to save boot performance.
authorlzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 29 May 2012 05:02:43 +0000 (05:02 +0000)
committerlzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 29 May 2012 05:02:43 +0000 (05:02 +0000)
1. Search from the first entry can be changed to Search from the end entry, because most End just follows its Start.
2. Match Start and End entry, the first comparison can be changed from Handle to EndTimeStamp, because only zero EndTimeStamp is required to be matched.

Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13367 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.c
MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.c
MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceLib.c

index 696aa6673e23234ba77083bbaf93668c1577433a..90053e76762d154368b253cf955bd11069769f5d 100644 (file)
@@ -88,6 +88,7 @@ InternalSearchForGaugeEntry (
   )\r
 {\r
   UINT32                    Index;\r
+  UINT32                    Index2;\r
   UINT32                    NumberOfEntries;\r
   GAUGE_DATA_ENTRY_EX       *GaugeEntryExArray;\r
 \r
@@ -101,13 +102,16 @@ InternalSearchForGaugeEntry (
   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, DXE_PERFORMANCE_STRING_LENGTH) == 0 &&\r
-         AsciiStrnCmp (GaugeEntryExArray[Index].Module, Module, DXE_PERFORMANCE_STRING_LENGTH) == 0 &&\r
-         (GaugeEntryExArray[Index].Identifier == Identifier) &&\r
-         GaugeEntryExArray[Index].EndTimeStamp == 0\r
-       ) {\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, DXE_PERFORMANCE_STRING_LENGTH) == 0 &&\r
+        AsciiStrnCmp (GaugeEntryExArray[Index2].Module, Module, DXE_PERFORMANCE_STRING_LENGTH) == 0 &&\r
+        (GaugeEntryExArray[Index2].Identifier == Identifier)) {\r
+      Index = Index2;\r
       break;\r
     }\r
   }\r
index 7a2d3da0ec771f2a63804a22ad35b86daffa8edb..60451eefdf34ea83a5c8b43fea95f1a064e4f2ad 100644 (file)
@@ -113,6 +113,7 @@ InternalSearchForLogEntry (
   )\r
 {\r
   UINT32                    Index;\r
+  UINT32                    Index2;\r
   UINT32                    NumberOfEntries;\r
   PEI_PERFORMANCE_LOG_ENTRY *LogEntryArray;\r
 \r
@@ -126,13 +127,16 @@ InternalSearchForLogEntry (
   NumberOfEntries = PeiPerformanceLog->NumberOfEntries;\r
   LogEntryArray   = (PEI_PERFORMANCE_LOG_ENTRY *) (PeiPerformanceLog + 1);\r
 \r
+  Index2 = 0;\r
+\r
   for (Index = 0; Index < NumberOfEntries; Index++) {\r
-    if ((LogEntryArray[Index].Handle == (EFI_PHYSICAL_ADDRESS) (UINTN) Handle) &&\r
-         AsciiStrnCmp (LogEntryArray[Index].Token, Token, PEI_PERFORMANCE_STRING_LENGTH) == 0 &&\r
-         AsciiStrnCmp (LogEntryArray[Index].Module, Module, PEI_PERFORMANCE_STRING_LENGTH) == 0 &&\r
-         (PeiPerformanceIdArray[Index] == Identifier) &&\r
-         LogEntryArray[Index].EndTimeStamp == 0\r
-       ) {\r
+    Index2 = NumberOfEntries - 1 - Index;\r
+    if (LogEntryArray[Index2].EndTimeStamp == 0 &&\r
+        (LogEntryArray[Index2].Handle == (EFI_PHYSICAL_ADDRESS) (UINTN) Handle) &&\r
+        AsciiStrnCmp (LogEntryArray[Index2].Token, Token, PEI_PERFORMANCE_STRING_LENGTH) == 0 &&\r
+        AsciiStrnCmp (LogEntryArray[Index2].Module, Module, PEI_PERFORMANCE_STRING_LENGTH) == 0 &&\r
+        (PeiPerformanceIdArray[Index2] == Identifier)) {\r
+      Index = Index2;\r
       break;\r
     }\r
   }\r
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