Current Dp_App implementation depends on TimerLib,
as different platforms may implement and use their
own TimerLib, it makes the dp application needs to
be built by platform. The TimerLib dependency can
be removed by using L"PerfDataMemAddr" variable
to make Dp_App to be generic.

Cc: Liming Gao <[email protected]>
Cc: Jiewen Yao <[email protected]>
Cc: Cinnamon Shia <[email protected]>
Cc: Jaben Carsey <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <[email protected]>
---
 PerformancePkg/Dp_App/Dp.c          | 37 +++++++++++++++++++++++--------------
 PerformancePkg/Dp_App/Dp.inf        |  4 +++-
 PerformancePkg/Dp_App/DpInternal.h  |  6 ++----
 PerformancePkg/Dp_App/DpStrings.uni |  8 +++++---
 PerformancePkg/Dp_App/DpTrace.c     | 24 ++----------------------
 PerformancePkg/Dp_App/Literals.c    |  3 +--
 6 files changed, 36 insertions(+), 46 deletions(-)

diff --git a/PerformancePkg/Dp_App/Dp.c b/PerformancePkg/Dp_App/Dp.c
index 6d980e5c55dc..d9b1cbe7c650 100644
--- a/PerformancePkg/Dp_App/Dp.c
+++ b/PerformancePkg/Dp_App/Dp.c
@@ -30,7 +30,6 @@
 #include <Library/BaseLib.h>
 #include <Library/MemoryAllocationLib.h>
 #include <Library/DebugLib.h>
-#include <Library/TimerLib.h>
 #include <Library/UefiLib.h>
 #include <Library/UefiHiiServicesLib.h>
 #include <Library/HiiLib.h>
@@ -201,10 +200,10 @@ InitializeDp (
   IN EFI_SYSTEM_TABLE         *SystemTable
   )
 {
-  UINT64                    Freq;
-  UINT64                    Ticker;
   UINT32                    ListIndex;
-  
+  EFI_PHYSICAL_ADDRESS      *AcpiLowMemoryBase;
+  PERF_HEADER               *PerfHeader;
+
   LIST_ENTRY                *ParamPackage;
   CONST CHAR16              *CmdLineArg;
   EFI_STRING                StringPtr;
@@ -266,11 +265,6 @@ InitializeDp (
   StringDpOptionLc = NULL;
   StringPtr        = NULL;
 
-  // Get DP's entry time as soon as possible.
-  // This is used as the Shell-Phase end time.
-  //
-  Ticker  = GetPerformanceCounter ();
-
   //
   // Retrieve HII package list from ImageHandle
   //
@@ -400,14 +394,29 @@ InitializeDp (
 ****            Timer specific processing                                ****
 ****************************************************************************/
       // Get the Performance counter characteristics:
-      //          Freq = Frequency in Hz
+      //          Freq = Frequency in KHz
       //    StartCount = Value loaded into the counter when it starts counting
       //      EndCount = Value counter counts to before it needs to be reset
       //
-      Freq = GetPerformanceCounterProperties (&TimerInfo.StartCount, 
&TimerInfo.EndCount);
+      Status = GetVariable2 (
+                 L"PerfDataMemAddr",
+                 &gPerformanceProtocolGuid,
+                 &AcpiLowMemoryBase,
+                 NULL
+                 );
+      if (EFI_ERROR (Status)) {
+        //
+        // Fail to get the variable, return.
+        //
+        PrintToken (STRING_TOKEN (STR_DP_GET_VARIABLE_FAILURE), 
L"PerfDataMemAddr", Status);
+        goto Done;
+      }
 
-      // Convert the Frequency from Hz to KHz
-      TimerInfo.Frequency = (UINT32)DivU64x32 (Freq, 1000);
+      PerfHeader = (PERF_HEADER *) (UINTN) *AcpiLowMemoryBase; 
+      TimerInfo.Frequency = (UINT32) PerfHeader->CpuFreq;
+      TimerInfo.StartCount = PerfHeader->TimerStartValue;
+      TimerInfo.EndCount = PerfHeader->TimerEndValue;
+      FreePool (AcpiLowMemoryBase);
 
       // Determine in which direction the performance counter counts.
       TimerInfo.CountUp = (BOOLEAN) (TimerInfo.EndCount >= 
TimerInfo.StartCount);
@@ -485,7 +494,7 @@ InitializeDp (
       else {
         //------------- Begin Cooked Mode Processing
         if (TraceMode) {
-          ProcessPhases ( Ticker );
+          ProcessPhases ();
           if ( ! SummaryMode) {
             Status = ProcessHandles ( ExcludeMode);
             if (Status == EFI_ABORTED) {
diff --git a/PerformancePkg/Dp_App/Dp.inf b/PerformancePkg/Dp_App/Dp.inf
index 8abc20f16830..aabfc2ec9791 100644
--- a/PerformancePkg/Dp_App/Dp.inf
+++ b/PerformancePkg/Dp_App/Dp.inf
@@ -56,7 +56,6 @@ [LibraryClasses]
   MemoryAllocationLib
   DebugLib
   UefiBootServicesTableLib
-  TimerLib
   PeCoffGetEntryPointLib
   PerformanceLib
   PrintLib
@@ -67,6 +66,9 @@ [LibraryClasses]
   DevicePathLib
   DxeServicesLib
 
+[Guids]
+  gPerformanceProtocolGuid                                ## CONSUMES ## 
Variable:L"PerfDataMemAddr"
+
 [Protocols]
   gEfiLoadedImageProtocolGuid                             ## CONSUMES
   gEfiHiiPackageListProtocolGuid                          ## CONSUMES
diff --git a/PerformancePkg/Dp_App/DpInternal.h 
b/PerformancePkg/Dp_App/DpInternal.h
index 53c5fb201ae8..573d19a1484c 100644
--- a/PerformancePkg/Dp_App/DpInternal.h
+++ b/PerformancePkg/Dp_App/DpInternal.h
@@ -6,7 +6,7 @@
   Dp application.  In addition to global data, function declarations for
   DpUtilities.c, DpTrace.c, and DpProfile.c are included here.
 
-  Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2009 - 2016, 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
@@ -254,12 +254,10 @@ DumpRawTrace(
 /** 
   Gather and print Major Phase metrics.
   
-  @param[in]    Ticker      The timer value for the END of Shell phase
-  
 **/
 VOID
 ProcessPhases(
-  IN UINT64 Ticker
+  VOID
   );
 
 
diff --git a/PerformancePkg/Dp_App/DpStrings.uni 
b/PerformancePkg/Dp_App/DpStrings.uni
index daaa242e3d3b..23cdc180b9e4 100644
--- a/PerformancePkg/Dp_App/DpStrings.uni
+++ b/PerformancePkg/Dp_App/DpStrings.uni
@@ -6,7 +6,7 @@
 // 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.
 //
@@ -114,7 +114,7 @@
                                        #language fr-FR  "   -n COUNT\n"
 #string STR_DP_HELP_ID                 #language en-US  "   -i  display 
identifier\n"
                                        #language fr-FR  "   -i\n"
-#string STR_DP_HELP_CUM_DATA           #language en-US  "   -c TOKEN - Display 
pre-defined and custom cumulative data\r\n" 
+#string STR_DP_HELP_CUM_DATA           #language en-US  "   -c TOKEN - Display 
pre-defined and custom cumulative data\r\n"
                                                         "              
Pre-defined cumulative token are:\r\n"
                                                         "              1. 
LoadImage:\r\n"
                                                         "              2. 
StartImage:\r\n"
@@ -137,6 +137,8 @@
                                        #language fr-FR  "Localiser Toute 
erreur de Poignées - %r\n"
 #string STR_DP_ERROR_NAME              #language en-US  "Unknown Driver Name"
                                        #language fr-FR  "Unknown Driver Name"
+#string STR_DP_GET_VARIABLE_FAILURE    #language en-US  "Get variable(%s) 
failure - %r\n"
+                                       #language fr-FR  "Get variable(%s) 
failure - %r\n"
 #string STR_DP_BUILD_REVISION          #language en-US  "\nDP Build Version:   
    %d.%d\n"
                                        #language fr-FR  "\nDP Construit la 
Version:         %d,%d\n"
 #string STR_DP_KHZ                     #language en-US  "System Performance 
Timer Frequency:   %,8d (KHz)\n"
@@ -238,7 +240,7 @@
 #string STR_DP_RAW_VARS2               #language en-US  "%5d: %16LX %16LX 
%16LX  %31a  %31a %5d\n"
                                        #language fr-FR  "%5d: %16LX %16LX 
%16LX  %31a  %31a %5d\n"
 #string STR_DP_RAW_HEADR2              #language en-US  "\nIndex       Handle  
      Start Count       End Count                  Token                        
  Module                   ID\n"
-                                       #language fr-FR  "\nIndex       Handle  
      Start Count       End Count                  Token                        
  Module                   ID\n"   
+                                       #language fr-FR  "\nIndex       Handle  
      Start Count       End Count                  Token                        
  Module                   ID\n"
 #string STR_DP_OPTION_UA               #language en-US  "-A"
                                        #language fr-FR  "-A"
 #string STR_DP_OPTION_LA               #language en-US  "-a"
diff --git a/PerformancePkg/Dp_App/DpTrace.c b/PerformancePkg/Dp_App/DpTrace.c
index fc21cdc7078a..a425aaa0f735 100644
--- a/PerformancePkg/Dp_App/DpTrace.c
+++ b/PerformancePkg/Dp_App/DpTrace.c
@@ -1,7 +1,7 @@
 /** @file
   Trace reporting for the Dp utility.
 
-  Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2009 - 2016, 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
@@ -385,12 +385,10 @@ DumpRawTrace(
 /** 
   Gather and print Major Phase metrics.
   
-  @param[in]    Ticker      The timer value for the END of Shell phase
-  
 **/
 VOID
 ProcessPhases(
-  IN UINT64            Ticker
+  VOID
   )
 {
   MEASUREMENT_RECORD        Measurement;
@@ -399,7 +397,6 @@ ProcessPhases(
   UINT64                    PeiTime;
   UINT64                    DxeTime;
   UINT64                    BdsTime;
-  UINT64                    ShellTime;
   UINT64                    ElapsedTime;
   UINT64                    Duration;
   UINT64                    Total;
@@ -412,7 +409,6 @@ ProcessPhases(
   PeiTime         = 0;
   DxeTime         = 0;
   BdsTime         = 0;
-  ShellTime       = 0;   
   //
   // Get Execution Phase Statistics
   //
@@ -433,9 +429,6 @@ ProcessPhases(
                           &Measurement.EndTimeStamp,
                           &Measurement.Identifier)) != 0)
   {
-    if (AsciiStrnCmp (Measurement.Token, ALit_SHELL, PERF_TOKEN_LENGTH) == 0) {
-      Measurement.EndTimeStamp = Ticker;
-    }
     if (Measurement.EndTimeStamp == 0) { // Skip "incomplete" records
       continue;
     }
@@ -453,8 +446,6 @@ ProcessPhases(
       DxeTime      = Duration;
     } else if (AsciiStrnCmp (Measurement.Token, ALit_BDS, PERF_TOKEN_LENGTH) 
== 0) {
       BdsTime      = Duration;
-    } else if (AsciiStrnCmp (Measurement.Token, ALit_SHELL, PERF_TOKEN_LENGTH) 
== 0) {
-      ShellTime    = Duration;
     }
   }
 
@@ -509,17 +500,6 @@ ProcessPhases(
     PrintToken (STRING_TOKEN (STR_DP_PHASE_BDSTO), ALit_BdsTO, ElapsedTime);
   }
 
-  // print SHELL phase duration time
-  //
-  if (ShellTime > 0) {
-    ElapsedTime = DivU64x32 (
-                    ShellTime,
-                    (UINT32)TimerInfo.Frequency
-                    );
-    Total += ElapsedTime;
-    PrintToken (STRING_TOKEN (STR_DP_PHASE_DURATION), ALit_SHELL, ElapsedTime);
-  }
-
   PrintToken (STRING_TOKEN (STR_DP_TOTAL_DURATION), Total);
 }
 
diff --git a/PerformancePkg/Dp_App/Literals.c b/PerformancePkg/Dp_App/Literals.c
index 68de0fbc9ece..13773bdc3a5a 100644
--- a/PerformancePkg/Dp_App/Literals.c
+++ b/PerformancePkg/Dp_App/Literals.c
@@ -1,7 +1,7 @@
 /** @file
   Definitions of ASCII string literals used by DP.
 
-  Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2009 - 2016, 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
@@ -16,7 +16,6 @@
 CHAR8 const ALit_TimerLibError[] = "Timer library instance error!\n";
 CHAR8 const ALit_SEC[]    = SEC_TOK;
 CHAR8 const ALit_DXE[]    = DXE_TOK;
-CHAR8 const ALit_SHELL[]  = SHELL_TOK;
 CHAR8 const ALit_PEI[]    = PEI_TOK;
 CHAR8 const ALit_BDS[]    = BDS_TOK;
 CHAR8 const ALit_BdsTO[]  = "BdsTimeOut";
-- 
2.7.0.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to