1 /** @file 2 Declarations of objects defined internally to the Dp Application. 3 4 Declarations of data and functions which are private to the Dp application. 5 This file should never be referenced by anything other than components of the 6 Dp application. In addition to global data, function declarations for 7 DpUtilities.c, DpTrace.c, and DpProfile.c are included here. 8 9 Copyright (c) 2009 - 2013, Intel Corporation. All rights reserved. 10 (C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR> 11 This program and the accompanying materials 12 are licensed and made available under the terms and conditions of the BSD License 13 which accompanies this distribution. The full text of the license may be found at 14 http://opensource.org/licenses/bsd-license.php 15 16 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 17 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 18 **/ 19 #ifndef _DP_INTELNAL_H_ 20 #define _DP_INTELNAL_H_ 21 22 #define DP_GAUGE_STRING_LENGTH 36 23 24 // 25 /// Module-Global Variables 26 ///@{ 27 extern EFI_HII_HANDLE gDpHiiHandle; 28 extern CHAR16 mGaugeString[DP_GAUGE_STRING_LENGTH + 1]; 29 extern CHAR16 mUnicodeToken[DXE_PERFORMANCE_STRING_SIZE]; 30 extern UINT64 mInterestThreshold; 31 extern BOOLEAN mShowId; 32 33 extern PERF_SUMMARY_DATA SummaryData; ///< Create the SummaryData structure and init. to ZERO. 34 35 /// Timer Specific Information. 36 extern TIMER_INFO TimerInfo; 37 38 /// Items for which to gather cumulative statistics. 39 extern PERF_CUM_DATA CumData[]; 40 41 /// Number of items for which we are gathering cumulative statistics. 42 extern UINT32 const NumCum; 43 44 ///@} 45 46 /** 47 Calculate an event's duration in timer ticks. 48 49 Given the count direction and the event's start and end timer values, 50 calculate the duration of the event in timer ticks. Information for 51 the current measurement is pointed to by the parameter. 52 53 If the measurement's start time is 1, it indicates that the developer 54 is indicating that the measurement began at the release of reset. 55 The start time is adjusted to the timer's starting count before performing 56 the elapsed time calculation. 57 58 The calculated duration, in ticks, is the absolute difference between 59 the measurement's ending and starting counts. 60 61 @param Measurement Pointer to a MEASUREMENT_RECORD structure containing 62 data for the current measurement. 63 64 @return The 64-bit duration of the event. 65 **/ 66 UINT64 67 GetDuration ( 68 IN OUT MEASUREMENT_RECORD *Measurement 69 ); 70 71 /** 72 Determine whether the Measurement record is for an EFI Phase. 73 74 The Token and Module members of the measurement record are checked. 75 Module must be empty and Token must be one of SEC, PEI, DXE, BDS, or SHELL. 76 77 @param[in] Measurement A pointer to the Measurement record to test. 78 79 @retval TRUE The measurement record is for an EFI Phase. 80 @retval FALSE The measurement record is NOT for an EFI Phase. 81 **/ 82 BOOLEAN 83 IsPhase( 84 IN MEASUREMENT_RECORD *Measurement 85 ); 86 87 /** 88 Get the file name portion of the Pdb File Name. 89 90 The portion of the Pdb File Name between the last backslash and 91 either a following period or the end of the string is converted 92 to Unicode and copied into UnicodeBuffer. The name is truncated, 93 if necessary, to ensure that UnicodeBuffer is not overrun. 94 95 @param[in] PdbFileName Pdb file name. 96 @param[out] UnicodeBuffer The resultant Unicode File Name. 97 98 **/ 99 VOID 100 DpGetShortPdbFileName ( 101 IN CHAR8 *PdbFileName, 102 OUT CHAR16 *UnicodeBuffer 103 ); 104 105 /** 106 Get a human readable name for an image handle. 107 The following methods will be tried orderly: 108 1. Image PDB 109 2. ComponentName2 protocol 110 3. FFS UI section 111 4. Image GUID 112 5. Image DevicePath 113 6. Unknown Driver Name 114 115 @param[in] Handle 116 117 @post The resulting Unicode name string is stored in the 118 mGaugeString global array. 119 120 **/ 121 VOID 122 DpGetNameFromHandle ( 123 IN EFI_HANDLE Handle 124 ); 125 126 /** 127 Calculate the Duration in microseconds. 128 129 Duration is multiplied by 1000, instead of Frequency being divided by 1000 or 130 multiplying the result by 1000, in order to maintain precision. Since Duration is 131 a 64-bit value, multiplying it by 1000 is unlikely to produce an overflow. 132 133 The time is calculated as (Duration * 1000) / Timer_Frequency. 134 135 @param[in] Duration The event duration in timer ticks. 136 137 @return A 64-bit value which is the Elapsed time in microseconds. 138 **/ 139 UINT64 140 DurationInMicroSeconds ( 141 IN UINT64 Duration 142 ); 143 144 /** 145 Get index of Measurement Record's match in the CumData array. 146 147 If the Measurement's Token value matches a Token in one of the CumData 148 records, the index of the matching record is returned. The returned 149 index is a signed value so that negative values can indicate that 150 the Measurement didn't match any entry in the CumData array. 151 152 @param[in] Measurement A pointer to a Measurement Record to match against the CumData array. 153 154 @retval <0 Token is not in the CumData array. 155 @retval >=0 Return value is the index into CumData where Token is found. 156 **/ 157 INTN 158 GetCumulativeItem( 159 IN MEASUREMENT_RECORD *Measurement 160 ); 161 162 /** 163 Collect verbose statistics about the logged performance measurements. 164 165 General Summary information for all Trace measurements is gathered and 166 stored within the SummaryData structure. This information is both 167 used internally by subsequent reporting functions, and displayed 168 at the end of verbose reports. 169 170 @pre The SummaryData and CumData structures must be initialized 171 prior to calling this function. 172 173 @post The SummaryData and CumData structures contain statistics for the 174 current performance logs. 175 176 @param[in, out] CustomCumulativeData The pointer to the custom cumulative data. 177 178 **/ 179 VOID 180 GatherStatistics( 181 IN OUT PERF_CUM_DATA *CustomCumulativeData OPTIONAL 182 ); 183 184 /** 185 Gather and print ALL Trace Records. 186 187 Displays all "interesting" Trace measurements in order.<BR> 188 The number of records displayed is controlled by: 189 - records with a duration less than mInterestThreshold microseconds are not displayed. 190 - No more than Limit records are displayed. A Limit of zero will not limit the output. 191 - If the ExcludeFlag is TRUE, records matching entries in the CumData array are not 192 displayed. 193 194 @pre The mInterestThreshold global variable is set to the shortest duration to be printed. 195 The mGaugeString and mUnicodeToken global arrays are used for temporary string storage. 196 They must not be in use by a calling function. 197 198 @param[in] Limit The number of records to print. Zero is ALL. 199 @param[in] ExcludeFlag TRUE to exclude individual Cumulative items from display. 200 201 @retval EFI_SUCCESS The operation was successful. 202 @retval EFI_ABORTED The user aborts the operation. 203 @return Others from a call to gBS->LocateHandleBuffer(). 204 **/ 205 EFI_STATUS 206 DumpAllTrace( 207 IN UINTN Limit, 208 IN BOOLEAN ExcludeFlag 209 ); 210 211 /** 212 Gather and print Raw Trace Records. 213 214 All Trace measurements with a duration greater than or equal to 215 mInterestThreshold are printed without interpretation. 216 217 The number of records displayed is controlled by: 218 - records with a duration less than mInterestThreshold microseconds are not displayed. 219 - No more than Limit records are displayed. A Limit of zero will not limit the output. 220 - If the ExcludeFlag is TRUE, records matching entries in the CumData array are not 221 displayed. 222 223 @pre The mInterestThreshold global variable is set to the shortest duration to be printed. 224 225 @param[in] Limit The number of records to print. Zero is ALL. 226 @param[in] ExcludeFlag TRUE to exclude individual Cumulative items from display. 227 @retval EFI_SUCCESS The operation was successful. 228 @retval EFI_ABORTED The user aborts the operation. 229 **/ 230 EFI_STATUS 231 DumpRawTrace( 232 IN UINTN Limit, 233 IN BOOLEAN ExcludeFlag 234 ); 235 236 /** 237 Gather and print Major Phase metrics. 238 239 @param[in] Ticker The timer value for the END of Shell phase 240 241 **/ 242 VOID 243 ProcessPhases( 244 IN UINT64 Ticker 245 ); 246 247 248 /** 249 Gather and print Handle data. 250 251 @param[in] ExcludeFlag TRUE to exclude individual Cumulative items from display. 252 253 @retval EFI_SUCCESS The operation was successful. 254 @retval EFI_ABORTED The user aborts the operation. 255 @return Others from a call to gBS->LocateHandleBuffer(). 256 **/ 257 EFI_STATUS 258 ProcessHandles( 259 IN BOOLEAN ExcludeFlag 260 ); 261 262 263 /** 264 Gather and print PEIM data. 265 266 Only prints complete PEIM records 267 268 @retval EFI_SUCCESS The operation was successful. 269 @retval EFI_ABORTED The user aborts the operation. 270 **/ 271 EFI_STATUS 272 ProcessPeims( 273 VOID 274 ); 275 276 /** 277 Gather and print global data. 278 279 Strips out incomplete or "Execution Phase" records 280 Only prints records where Handle is NULL 281 Increment TIndex for every record, even skipped ones, so that we have an 282 indication of every measurement record taken. 283 284 @retval EFI_SUCCESS The operation was successful. 285 @retval EFI_ABORTED The user aborts the operation. 286 **/ 287 EFI_STATUS 288 ProcessGlobal( 289 VOID 290 ); 291 292 /** 293 Gather and print cumulative data. 294 295 Traverse the measurement records and:<BR> 296 For each record with a Token listed in the CumData array:<BR> 297 - Update the instance count and the total, minimum, and maximum durations. 298 Finally, print the gathered cumulative statistics. 299 300 @param[in] CustomCumulativeData The pointer to the custom cumulative data. 301 302 **/ 303 VOID 304 ProcessCumulative( 305 IN PERF_CUM_DATA *CustomCumulativeData OPTIONAL 306 ); 307 308 /** 309 Gather and print ALL Profiling Records. 310 311 Displays all "interesting" Profile measurements in order. 312 The number of records displayed is controlled by: 313 - records with a duration less than mInterestThreshold microseconds are not displayed. 314 - No more than Limit records are displayed. A Limit of zero will not limit the output. 315 - If the ExcludeFlag is TRUE, records matching entries in the CumData array are not 316 displayed. 317 318 @pre The mInterestThreshold global variable is set to the shortest duration to be printed. 319 The mGaugeString and mUnicodeToken global arrays are used for temporary string storage. 320 They must not be in use by a calling function. 321 322 @param[in] Limit The number of records to print. Zero is ALL. 323 @param[in] ExcludeFlag TRUE to exclude individual Cumulative items from display. 324 325 **/ 326 VOID 327 DumpAllProfile( 328 IN UINTN Limit, 329 IN BOOLEAN ExcludeFlag 330 ); 331 332 /** 333 Gather and print Raw Profile Records. 334 335 All Profile measurements with a duration greater than or equal to 336 mInterestThreshold are printed without interpretation. 337 338 The number of records displayed is controlled by: 339 - records with a duration less than mInterestThreshold microseconds are not displayed. 340 - No more than Limit records are displayed. A Limit of zero will not limit the output. 341 - If the ExcludeFlag is TRUE, records matching entries in the CumData array are not 342 displayed. 343 344 @pre The mInterestThreshold global variable is set to the shortest duration to be printed. 345 346 @param[in] Limit The number of records to print. Zero is ALL. 347 @param[in] ExcludeFlag TRUE to exclude individual Cumulative items from display. 348 349 **/ 350 VOID 351 DumpRawProfile( 352 IN UINTN Limit, 353 IN BOOLEAN ExcludeFlag 354 ); 355 356 #endif 357