MdeModulePkg: Update Performance instances to use new protocol
Update Performance instances in MdeModulePkg to use new PerformanceMeasurement protocol. Cc: Liming Gao <liming.gao@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> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
parent
56f7741e27
commit
137fb13deb
@ -82,21 +82,10 @@ BOOLEAN mLockInsertRecord = FALSE;
|
|||||||
EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *mDevicePathToText = NULL;
|
EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *mDevicePathToText = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Interfaces for Performance Protocol.
|
// Interfaces for PerformanceMeasurement Protocol.
|
||||||
//
|
//
|
||||||
PERFORMANCE_PROTOCOL mPerformanceInterface = {
|
EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL mPerformanceMeasurementInterface = {
|
||||||
StartGauge,
|
CreatePerformanceMeasurement,
|
||||||
EndGauge,
|
|
||||||
GetGauge
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
// Interfaces for PerformanceEx Protocol.
|
|
||||||
//
|
|
||||||
PERFORMANCE_EX_PROTOCOL mPerformanceExInterface = {
|
|
||||||
StartGaugeEx,
|
|
||||||
EndGaugeEx,
|
|
||||||
GetGaugeEx
|
|
||||||
};
|
};
|
||||||
|
|
||||||
PERFORMANCE_PROPERTY mPerformanceProperty;
|
PERFORMANCE_PROPERTY mPerformanceProperty;
|
||||||
@ -799,18 +788,11 @@ InsertFpdtMeasurement (
|
|||||||
UseModuleName = FALSE;
|
UseModuleName = FALSE;
|
||||||
ZeroMem (ModuleName, sizeof (ModuleName));
|
ZeroMem (ModuleName, sizeof (ModuleName));
|
||||||
|
|
||||||
if (mLockInsertRecord) {
|
|
||||||
return EFI_UNSUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
mLockInsertRecord = TRUE;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get record info (type, size, ProgressID and Module Guid).
|
// Get record info (type, size, ProgressID and Module Guid).
|
||||||
//
|
//
|
||||||
Status = GetFpdtRecordInfo (IsStart, Handle, Token, Module, &RecordInfo, &UseModuleName);
|
Status = GetFpdtRecordInfo (IsStart, Handle, Token, Module, &RecordInfo, &UseModuleName);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
mLockInsertRecord = FALSE;
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -824,7 +806,6 @@ InsertFpdtMeasurement (
|
|||||||
// If input ID doesn't follow the rule, we will adjust it.
|
// If input ID doesn't follow the rule, we will adjust it.
|
||||||
//
|
//
|
||||||
if ((Identifier != 0) && (IsKnownID (Identifier)) && (!IsKnownTokens (Token))) {
|
if ((Identifier != 0) && (IsKnownID (Identifier)) && (!IsKnownTokens (Token))) {
|
||||||
mLockInsertRecord = FALSE;
|
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
} else if ((Identifier != 0) && (!IsKnownID (Identifier)) && (!IsKnownTokens (Token))) {
|
} else if ((Identifier != 0) && (!IsKnownID (Identifier)) && (!IsKnownTokens (Token))) {
|
||||||
if (IsStart && ((Identifier & 0x000F) != 0)) {
|
if (IsStart && ((Identifier & 0x000F) != 0)) {
|
||||||
@ -844,7 +825,6 @@ InsertFpdtMeasurement (
|
|||||||
DEBUG ((DEBUG_INFO, "DxeCorePerformanceLib: No enough space to save boot records\n"));
|
DEBUG ((DEBUG_INFO, "DxeCorePerformanceLib: No enough space to save boot records\n"));
|
||||||
mLackSpaceIsReported = TRUE;
|
mLackSpaceIsReported = TRUE;
|
||||||
}
|
}
|
||||||
mLockInsertRecord = FALSE;
|
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
@ -866,7 +846,6 @@ InsertFpdtMeasurement (
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (mPerformancePointer == NULL) {
|
if (mPerformancePointer == NULL) {
|
||||||
mLockInsertRecord = FALSE;
|
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
mMaxPerformanceLength = mPerformanceLength + RecordInfo.RecordSize + FIRMWARE_RECORD_BUFFER;
|
mMaxPerformanceLength = mPerformanceLength + RecordInfo.RecordSize + FIRMWARE_RECORD_BUFFER;
|
||||||
@ -963,11 +942,9 @@ InsertFpdtMeasurement (
|
|||||||
//
|
//
|
||||||
// Record is not supported in current DXE phase, return EFI_ABORTED
|
// Record is not supported in current DXE phase, return EFI_ABORTED
|
||||||
//
|
//
|
||||||
mLockInsertRecord = FALSE;
|
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
mLockInsertRecord = FALSE;
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1063,219 +1040,6 @@ ReportFpdtRecordBuffer (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Adds a record at the end of the performance measurement log
|
|
||||||
that records the start time of a performance measurement.
|
|
||||||
|
|
||||||
Adds a record to the end of the performance measurement log
|
|
||||||
that contains the Handle, Token, Module and Identifier.
|
|
||||||
The end time of the new record must be set to zero.
|
|
||||||
If TimeStamp is not zero, then TimeStamp is used to fill in the start time in the record.
|
|
||||||
If TimeStamp is zero, the start time in the record is filled in with the value
|
|
||||||
read from the current time stamp.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
@param Identifier 32-bit identifier. If the value is 0, the created record
|
|
||||||
is same as the one created by StartGauge of PERFORMANCE_PROTOCOL.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The data was read correctly from the device.
|
|
||||||
@retval EFI_OUT_OF_RESOURCES There are not enough resources to record the measurement.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
StartGaugeEx (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp,
|
|
||||||
IN UINT32 Identifier
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InsertFpdtMeasurement (TRUE, Handle, Token, Module, TimeStamp, Identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first matching record that contains a zero end time and fills in a valid end time.
|
|
||||||
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first record that matches Handle, Token, Module and Identifier and has an end time value of zero.
|
|
||||||
If the record can not be found then return EFI_NOT_FOUND.
|
|
||||||
If the record is found and TimeStamp is not zero,
|
|
||||||
then the end time in the record is filled in with the value specified by TimeStamp.
|
|
||||||
If the record is found and TimeStamp is zero, then the end time in the matching record
|
|
||||||
is filled in with the current time stamp value.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
@param Identifier 32-bit identifier. If the value is 0, the found record
|
|
||||||
is same as the one found by EndGauge of PERFORMANCE_PROTOCOL.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The end of the measurement was recorded.
|
|
||||||
@retval EFI_NOT_FOUND The specified measurement record could not be found.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
EndGaugeEx (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp,
|
|
||||||
IN UINT32 Identifier
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return InsertFpdtMeasurement (FALSE, Handle, Token, Module, TimeStamp, Identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retrieves a previously logged performance measurement.
|
|
||||||
It can also retrieve the log created by StartGauge and EndGauge of PERFORMANCE_PROTOCOL,
|
|
||||||
and then assign the Identifier with 0.
|
|
||||||
|
|
||||||
!!! Not support!!!
|
|
||||||
|
|
||||||
Retrieves the performance log entry from the performance log specified by LogEntryKey.
|
|
||||||
If it stands for a valid entry, then EFI_SUCCESS is returned and
|
|
||||||
GaugeDataEntryEx stores the pointer to that entry.
|
|
||||||
|
|
||||||
@param LogEntryKey The key for the previous performance measurement log entry.
|
|
||||||
If 0, then the first performance measurement log entry is retrieved.
|
|
||||||
@param GaugeDataEntryEx The indirect pointer to the extended gauge data entry specified by LogEntryKey
|
|
||||||
if the retrieval is successful.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The GuageDataEntryEx is successfully found based on LogEntryKey.
|
|
||||||
@retval EFI_NOT_FOUND The LogEntryKey is the last entry (equals to the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER The LogEntryKey is not a valid entry (greater than the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER GaugeDataEntryEx is NULL.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
GetGaugeEx (
|
|
||||||
IN UINTN LogEntryKey,
|
|
||||||
OUT GAUGE_DATA_ENTRY_EX **GaugeDataEntryEx
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_UNSUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Adds a record at the end of the performance measurement log
|
|
||||||
that records the start time of a performance measurement.
|
|
||||||
|
|
||||||
Adds a record to the end of the performance measurement log
|
|
||||||
that contains the Handle, Token, and Module.
|
|
||||||
The end time of the new record must be set to zero.
|
|
||||||
If TimeStamp is not zero, then TimeStamp is used to fill in the start time in the record.
|
|
||||||
If TimeStamp is zero, the start time in the record is filled in with the value
|
|
||||||
read from the current time stamp.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The data was read correctly from the device.
|
|
||||||
@retval EFI_OUT_OF_RESOURCES There are not enough resources to record the measurement.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
StartGauge (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return StartGaugeEx (Handle, Token, Module, TimeStamp, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first matching record that contains a zero end time and fills in a valid end time.
|
|
||||||
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first record that matches Handle, Token, and Module and has an end time value of zero.
|
|
||||||
If the record can not be found then return EFI_NOT_FOUND.
|
|
||||||
If the record is found and TimeStamp is not zero,
|
|
||||||
then the end time in the record is filled in with the value specified by TimeStamp.
|
|
||||||
If the record is found and TimeStamp is zero, then the end time in the matching record
|
|
||||||
is filled in with the current time stamp value.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The end of the measurement was recorded.
|
|
||||||
@retval EFI_NOT_FOUND The specified measurement record could not be found.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
EndGauge (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EndGaugeEx (Handle, Token, Module, TimeStamp, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retrieves a previously logged performance measurement.
|
|
||||||
It can also retrieve the log created by StartGaugeEx and EndGaugeEx of PERFORMANCE_EX_PROTOCOL,
|
|
||||||
and then eliminate the Identifier.
|
|
||||||
|
|
||||||
!!! Not support!!!
|
|
||||||
|
|
||||||
Retrieves the performance log entry from the performance log specified by LogEntryKey.
|
|
||||||
If it stands for a valid entry, then EFI_SUCCESS is returned and
|
|
||||||
GaugeDataEntry stores the pointer to that entry.
|
|
||||||
|
|
||||||
@param LogEntryKey The key for the previous performance measurement log entry.
|
|
||||||
If 0, then the first performance measurement log entry is retrieved.
|
|
||||||
@param GaugeDataEntry The indirect pointer to the gauge data entry specified by LogEntryKey
|
|
||||||
if the retrieval is successful.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The GuageDataEntry is successfully found based on LogEntryKey.
|
|
||||||
@retval EFI_NOT_FOUND The LogEntryKey is the last entry (equals to the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER The LogEntryKey is not a valid entry (greater than the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER GaugeDataEntry is NULL.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
GetGauge (
|
|
||||||
IN UINTN LogEntryKey,
|
|
||||||
OUT GAUGE_DATA_ENTRY **GaugeDataEntry
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_UNSUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The constructor function initializes Performance infrastructure for DXE phase.
|
The constructor function initializes Performance infrastructure for DXE phase.
|
||||||
|
|
||||||
@ -1319,10 +1083,8 @@ DxeCorePerformanceLibConstructor (
|
|||||||
Handle = NULL;
|
Handle = NULL;
|
||||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||||
&Handle,
|
&Handle,
|
||||||
&gPerformanceProtocolGuid,
|
&gEdkiiPerformanceMeasurementProtocolGuid,
|
||||||
&mPerformanceInterface,
|
&mPerformanceMeasurementInterface,
|
||||||
&gPerformanceExProtocolGuid,
|
|
||||||
&mPerformanceExInterface,
|
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
@ -1359,6 +1121,55 @@ DxeCorePerformanceLibConstructor (
|
|||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create performance record with event description and a timestamp.
|
||||||
|
|
||||||
|
@param CallerIdentifier - Image handle or pointer to caller ID GUID.
|
||||||
|
@param Guid - Pointer to a GUID.
|
||||||
|
@param String - Pointer to a string describing the measurement.
|
||||||
|
@param TimeStamp - 64-bit time stamp.
|
||||||
|
@param Address - Pointer to a location in memory relevant to the measurement.
|
||||||
|
@param Identifier - Performance identifier describing the type of measurement.
|
||||||
|
@param Attribute - The attribute of the measurement. According to attribute can create a start
|
||||||
|
record for PERF_START/PERF_START_EX, or a end record for PERF_END/PERF_END_EX,
|
||||||
|
or a general record for other Perf macros.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS - Successfully created performance record.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES - Ran out of space to store the records.
|
||||||
|
@retval EFI_INVALID_PARAMETER - Invalid parameter passed to function - NULL
|
||||||
|
pointer or invalid PerfId.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
CreatePerformanceMeasurement (
|
||||||
|
IN CONST VOID *CallerIdentifier,
|
||||||
|
IN CONST VOID *Guid, OPTIONAL
|
||||||
|
IN CONST CHAR8 *String, OPTIONAL
|
||||||
|
IN UINT64 TimeStamp,
|
||||||
|
IN UINT64 Address, OPTIONAL
|
||||||
|
IN UINT32 Identifier,
|
||||||
|
IN PERF_MEASUREMENT_ATTRIBUTE Attribute
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
Status = EFI_SUCCESS;
|
||||||
|
|
||||||
|
if (mLockInsertRecord) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
mLockInsertRecord = TRUE;
|
||||||
|
|
||||||
|
if (Attribute == PerfStartEntry) {
|
||||||
|
Status = InsertFpdtMeasurement (TRUE, CallerIdentifier, String, String, TimeStamp, Identifier);
|
||||||
|
} else if (Attribute == PerfEndEntry) {
|
||||||
|
Status = InsertFpdtMeasurement (FALSE, CallerIdentifier, String, String, TimeStamp, Identifier);
|
||||||
|
}
|
||||||
|
mLockInsertRecord = FALSE;
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Adds a record at the end of the performance measurement log
|
Adds a record at the end of the performance measurement log
|
||||||
that records the start time of a performance measurement.
|
that records the start time of a performance measurement.
|
||||||
@ -1394,7 +1205,17 @@ StartPerformanceMeasurementEx (
|
|||||||
IN UINT32 Identifier
|
IN UINT32 Identifier
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return InsertFpdtMeasurement (TRUE, Handle, Token, Module, TimeStamp, Identifier);
|
CONST CHAR8 *String;
|
||||||
|
|
||||||
|
if (Token != NULL) {
|
||||||
|
String = Token;
|
||||||
|
} else if (Module != NULL) {
|
||||||
|
String = Module;
|
||||||
|
} else {
|
||||||
|
String = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (RETURN_STATUS)CreatePerformanceMeasurement (Handle, NULL, String, TimeStamp, 0, Identifier, PerfStartEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1433,7 +1254,17 @@ EndPerformanceMeasurementEx (
|
|||||||
IN UINT32 Identifier
|
IN UINT32 Identifier
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return InsertFpdtMeasurement (FALSE, Handle, Token, Module, TimeStamp, Identifier);
|
CONST CHAR8 *String;
|
||||||
|
|
||||||
|
if (Token != NULL) {
|
||||||
|
String = Token;
|
||||||
|
} else if (Module != NULL) {
|
||||||
|
String = Module;
|
||||||
|
} else {
|
||||||
|
String = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (RETURN_STATUS)CreatePerformanceMeasurement (Handle, NULL, String, TimeStamp, 0, Identifier, PerfEndEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1527,7 +1358,7 @@ StartPerformanceMeasurement (
|
|||||||
IN UINT64 TimeStamp
|
IN UINT64 TimeStamp
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return InsertFpdtMeasurement (TRUE, Handle, Token, Module, TimeStamp, 0);
|
return StartPerformanceMeasurementEx (Handle, Token, Module, TimeStamp, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1563,7 +1394,7 @@ EndPerformanceMeasurement (
|
|||||||
IN UINT64 TimeStamp
|
IN UINT64 TimeStamp
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return InsertFpdtMeasurement (FALSE, Handle, Token, Module, TimeStamp, 0);
|
return EndPerformanceMeasurementEx (Handle, Token, Module, TimeStamp, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -67,18 +67,14 @@
|
|||||||
|
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
## SOMETIMES_CONSUMES ## HOB
|
|
||||||
## PRODUCES ## UNDEFINED # Install protocol
|
|
||||||
## PRODUCES ## SystemTable
|
## PRODUCES ## SystemTable
|
||||||
gPerformanceProtocolGuid
|
gPerformanceProtocolGuid
|
||||||
## SOMETIMES_CONSUMES ## HOB
|
|
||||||
## PRODUCES ## UNDEFINED # Install protocol
|
|
||||||
gPerformanceExProtocolGuid
|
|
||||||
gZeroGuid ## SOMETIMES_CONSUMES ## GUID
|
gZeroGuid ## SOMETIMES_CONSUMES ## GUID
|
||||||
gEfiFirmwarePerformanceGuid ## SOMETIMES_PRODUCES ## UNDEFINED # StatusCode Data
|
gEfiFirmwarePerformanceGuid ## SOMETIMES_PRODUCES ## UNDEFINED # StatusCode Data
|
||||||
gEdkiiFpdtExtendedFirmwarePerformanceGuid ## SOMETIMES_CONSUMES ## HOB # StatusCode Data
|
gEdkiiFpdtExtendedFirmwarePerformanceGuid ## SOMETIMES_CONSUMES ## HOB # StatusCode Data
|
||||||
gEfiEventReadyToBootGuid ## CONSUMES ## Event
|
gEfiEventReadyToBootGuid ## CONSUMES ## Event
|
||||||
gEdkiiPiSmmCommunicationRegionTableGuid ## SOMETIMES_CONSUMES ## SystemTable
|
gEdkiiPiSmmCommunicationRegionTableGuid ## SOMETIMES_CONSUMES ## SystemTable
|
||||||
|
gEdkiiPerformanceMeasurementProtocolGuid ## PRODUCES ## UNDEFINED # Install protocol
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask ## CONSUMES
|
gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask ## CONSUMES
|
||||||
|
@ -22,6 +22,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <PiDxe.h>
|
#include <PiDxe.h>
|
||||||
|
|
||||||
#include <Guid/Performance.h>
|
#include <Guid/Performance.h>
|
||||||
|
#include <Guid/PerformanceMeasurement.h>
|
||||||
#include <Guid/ExtendedFirmwarePerformance.h>
|
#include <Guid/ExtendedFirmwarePerformance.h>
|
||||||
#include <Guid/ZeroGuid.h>
|
#include <Guid/ZeroGuid.h>
|
||||||
#include <Guid/EventGroup.h>
|
#include <Guid/EventGroup.h>
|
||||||
@ -49,201 +50,34 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <Library/DxeServicesLib.h>
|
#include <Library/DxeServicesLib.h>
|
||||||
#include <Library/PeCoffGetEntryPointLib.h>
|
#include <Library/PeCoffGetEntryPointLib.h>
|
||||||
|
|
||||||
//
|
|
||||||
// Interface declarations for PerformanceEx Protocol.
|
|
||||||
//
|
|
||||||
/**
|
/**
|
||||||
Adds a record at the end of the performance measurement log
|
Create performance record with event description and a timestamp.
|
||||||
that records the start time of a performance measurement.
|
|
||||||
|
|
||||||
Adds a record to the end of the performance measurement log
|
@param CallerIdentifier - Image handle or pointer to caller ID GUID.
|
||||||
that contains the Handle, Token, Module and Identifier.
|
@param Guid - Pointer to a GUID.
|
||||||
The end time of the new record must be set to zero.
|
@param String - Pointer to a string describing the measurement.
|
||||||
If TimeStamp is not zero, then TimeStamp is used to fill in the start time in the record.
|
@param TimeStamp - 64-bit time stamp.
|
||||||
If TimeStamp is zero, the start time in the record is filled in with the value
|
@param Address - Pointer to a location in memory relevant to the measurement.
|
||||||
read from the current time stamp.
|
@param Identifier - Performance identifier describing the type of measurement.
|
||||||
|
@param Attribute - The attribute of the measurement. According to attribute can create a start
|
||||||
@param Handle Pointer to environment specific context used
|
record for PERF_START/PERF_START_EX, or a end record for PERF_END/PERF_END_EX,
|
||||||
to identify the component being measured.
|
or a general record for other Perf macros.
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
@param Identifier 32-bit identifier. If the value is 0, the created record
|
|
||||||
is same as the one created by StartGauge of PERFORMANCE_PROTOCOL.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The data was read correctly from the device.
|
|
||||||
@retval EFI_OUT_OF_RESOURCES There are not enough resources to record the measurement.
|
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS - Successfully created performance record.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES - Ran out of space to store the records.
|
||||||
|
@retval EFI_INVALID_PARAMETER - Invalid parameter passed to function - NULL
|
||||||
|
pointer or invalid PerfId.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
StartGaugeEx (
|
CreatePerformanceMeasurement(
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
IN CONST VOID *CallerIdentifier, OPTIONAL
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
IN CONST VOID *Guid, OPTIONAL
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
IN CONST CHAR8 *String, OPTIONAL
|
||||||
IN UINT64 TimeStamp,
|
IN UINT64 TimeStamp, OPTIONAL
|
||||||
IN UINT32 Identifier
|
IN UINT64 Address, OPTIONAL
|
||||||
|
IN UINT32 Identifier,
|
||||||
|
IN PERF_MEASUREMENT_ATTRIBUTE Attribute
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first matching record that contains a zero end time and fills in a valid end time.
|
|
||||||
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first record that matches Handle, Token, Module and Identifier and has an end time value of zero.
|
|
||||||
If the record can not be found then return EFI_NOT_FOUND.
|
|
||||||
If the record is found and TimeStamp is not zero,
|
|
||||||
then the end time in the record is filled in with the value specified by TimeStamp.
|
|
||||||
If the record is found and TimeStamp is zero, then the end time in the matching record
|
|
||||||
is filled in with the current time stamp value.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
@param Identifier 32-bit identifier. If the value is 0, the found record
|
|
||||||
is same as the one found by EndGauge of PERFORMANCE_PROTOCOL.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The end of the measurement was recorded.
|
|
||||||
@retval EFI_NOT_FOUND The specified measurement record could not be found.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
EndGaugeEx (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp,
|
|
||||||
IN UINT32 Identifier
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retrieves a previously logged performance measurement.
|
|
||||||
It can also retrieve the log created by StartGauge and EndGauge of PERFORMANCE_PROTOCOL,
|
|
||||||
and then assign the Identifier with 0.
|
|
||||||
|
|
||||||
Retrieves the performance log entry from the performance log specified by LogEntryKey.
|
|
||||||
If it stands for a valid entry, then EFI_SUCCESS is returned and
|
|
||||||
GaugeDataEntryEx stores the pointer to that entry.
|
|
||||||
|
|
||||||
@param LogEntryKey The key for the previous performance measurement log entry.
|
|
||||||
If 0, then the first performance measurement log entry is retrieved.
|
|
||||||
@param GaugeDataEntryEx The indirect pointer to the extended gauge data entry specified by LogEntryKey
|
|
||||||
if the retrieval is successful.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The GuageDataEntryEx is successfully found based on LogEntryKey.
|
|
||||||
@retval EFI_NOT_FOUND The LogEntryKey is the last entry (equals to the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER The LogEntryKey is not a valid entry (greater than the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER GaugeDataEntryEx is NULL.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
GetGaugeEx (
|
|
||||||
IN UINTN LogEntryKey,
|
|
||||||
OUT GAUGE_DATA_ENTRY_EX **GaugeDataEntryEx
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Interface declarations for Performance Protocol.
|
|
||||||
//
|
|
||||||
/**
|
|
||||||
Adds a record at the end of the performance measurement log
|
|
||||||
that records the start time of a performance measurement.
|
|
||||||
|
|
||||||
Adds a record to the end of the performance measurement log
|
|
||||||
that contains the Handle, Token, and Module.
|
|
||||||
The end time of the new record must be set to zero.
|
|
||||||
If TimeStamp is not zero, then TimeStamp is used to fill in the start time in the record.
|
|
||||||
If TimeStamp is zero, the start time in the record is filled in with the value
|
|
||||||
read from the current time stamp.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The data was read correctly from the device.
|
|
||||||
@retval EFI_OUT_OF_RESOURCES There are not enough resources to record the measurement.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
StartGauge (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first matching record that contains a zero end time and fills in a valid end time.
|
|
||||||
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first record that matches Handle, Token, and Module and has an end time value of zero.
|
|
||||||
If the record can not be found then return EFI_NOT_FOUND.
|
|
||||||
If the record is found and TimeStamp is not zero,
|
|
||||||
then the end time in the record is filled in with the value specified by TimeStamp.
|
|
||||||
If the record is found and TimeStamp is zero, then the end time in the matching record
|
|
||||||
is filled in with the current time stamp value.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The end of the measurement was recorded.
|
|
||||||
@retval EFI_NOT_FOUND The specified measurement record could not be found.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
EndGauge (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retrieves a previously logged performance measurement.
|
|
||||||
It can also retrieve the log created by StartGaugeEx and EndGaugeEx of PERFORMANCE_EX_PROTOCOL,
|
|
||||||
and then eliminate the Identifier.
|
|
||||||
|
|
||||||
Retrieves the performance log entry from the performance log specified by LogEntryKey.
|
|
||||||
If it stands for a valid entry, then EFI_SUCCESS is returned and
|
|
||||||
GaugeDataEntry stores the pointer to that entry.
|
|
||||||
|
|
||||||
@param LogEntryKey The key for the previous performance measurement log entry.
|
|
||||||
If 0, then the first performance measurement log entry is retrieved.
|
|
||||||
@param GaugeDataEntry The indirect pointer to the gauge data entry specified by LogEntryKey
|
|
||||||
if the retrieval is successful.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The GuageDataEntry is successfully found based on LogEntryKey.
|
|
||||||
@retval EFI_NOT_FOUND The LogEntryKey is the last entry (equals to the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER The LogEntryKey is not a valid entry (greater than the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER GaugeDataEntry is NULL.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
GetGauge (
|
|
||||||
IN UINTN LogEntryKey,
|
|
||||||
OUT GAUGE_DATA_ENTRY **GaugeDataEntry
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -20,7 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
|
|
||||||
#include <PiDxe.h>
|
#include <PiDxe.h>
|
||||||
|
|
||||||
#include <Guid/Performance.h>
|
#include <Guid/PerformanceMeasurement.h>
|
||||||
|
|
||||||
#include <Library/PerformanceLib.h>
|
#include <Library/PerformanceLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
@ -30,8 +30,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
//
|
//
|
||||||
// The cached Performance Protocol and PerformanceEx Protocol interface.
|
// The cached Performance Protocol and PerformanceEx Protocol interface.
|
||||||
//
|
//
|
||||||
PERFORMANCE_PROTOCOL *mPerformance = NULL;
|
EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL *mPerformanceMeasurement = NULL;
|
||||||
PERFORMANCE_EX_PROTOCOL *mPerformanceEx = NULL;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The function caches the pointers to PerformanceEx protocol and Performance Protocol.
|
The function caches the pointers to PerformanceEx protocol and Performance Protocol.
|
||||||
@ -43,35 +42,24 @@ PERFORMANCE_EX_PROTOCOL *mPerformanceEx = NULL;
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
GetPerformanceProtocol (
|
GetPerformanceMeasurementProtocol (
|
||||||
VOID
|
VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
PERFORMANCE_PROTOCOL *Performance;
|
EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL *PerformanceMeasurement;
|
||||||
PERFORMANCE_EX_PROTOCOL *PerformanceEx;
|
|
||||||
|
|
||||||
if (mPerformanceEx != NULL || mPerformance != NULL) {
|
if (mPerformanceMeasurement != NULL) {
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gBS->LocateProtocol (&gPerformanceExProtocolGuid, NULL, (VOID **) &PerformanceEx);
|
Status = gBS->LocateProtocol (&gEdkiiPerformanceMeasurementProtocolGuid, NULL, (VOID **) &PerformanceMeasurement);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
ASSERT (PerformanceEx != NULL);
|
ASSERT (PerformanceMeasurement != NULL);
|
||||||
//
|
//
|
||||||
// Cache PerformanceEx Protocol.
|
// Cache PerformanceMeasurement Protocol.
|
||||||
//
|
//
|
||||||
mPerformanceEx = PerformanceEx;
|
mPerformanceMeasurement = PerformanceMeasurement;
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = gBS->LocateProtocol (&gPerformanceProtocolGuid, NULL, (VOID **) &Performance);
|
|
||||||
if (!EFI_ERROR (Status)) {
|
|
||||||
ASSERT (Performance != NULL);
|
|
||||||
//
|
|
||||||
// Cache performance protocol.
|
|
||||||
//
|
|
||||||
mPerformance = Performance;
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,17 +98,24 @@ StartPerformanceMeasurementEx (
|
|||||||
IN UINT32 Identifier
|
IN UINT32 Identifier
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
CONST CHAR8* String;
|
||||||
|
|
||||||
Status = GetPerformanceProtocol ();
|
Status = GetPerformanceMeasurementProtocol ();
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return RETURN_OUT_OF_RESOURCES;
|
return RETURN_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mPerformanceEx != NULL) {
|
if (Token != NULL) {
|
||||||
Status = mPerformanceEx->StartGaugeEx (Handle, Token, Module, TimeStamp, Identifier);
|
String = Token;
|
||||||
} else if (mPerformance != NULL) {
|
} else if (Module != NULL) {
|
||||||
Status = mPerformance->StartGauge (Handle, Token, Module, TimeStamp);
|
String = Module;
|
||||||
|
} else {
|
||||||
|
String = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mPerformanceMeasurement != NULL) {
|
||||||
|
Status = mPerformanceMeasurement->CreatePerformanceMeasurement (Handle, NULL, String, TimeStamp, 0, Identifier, PerfStartEntry);
|
||||||
} else {
|
} else {
|
||||||
ASSERT (FALSE);
|
ASSERT (FALSE);
|
||||||
}
|
}
|
||||||
@ -162,17 +157,24 @@ EndPerformanceMeasurementEx (
|
|||||||
IN UINT32 Identifier
|
IN UINT32 Identifier
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
CONST CHAR8* String;
|
||||||
|
|
||||||
Status = GetPerformanceProtocol ();
|
Status = GetPerformanceMeasurementProtocol ();
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return RETURN_NOT_FOUND;
|
return RETURN_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mPerformanceEx != NULL) {
|
if (Token != NULL) {
|
||||||
Status = mPerformanceEx->EndGaugeEx (Handle, Token, Module, TimeStamp, Identifier);
|
String = Token;
|
||||||
} else if (mPerformance != NULL) {
|
} else if (Module != NULL) {
|
||||||
Status = mPerformance->EndGauge (Handle, Token, Module, TimeStamp);
|
String = Module;
|
||||||
|
} else {
|
||||||
|
String = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mPerformanceMeasurement != NULL) {
|
||||||
|
Status = mPerformanceMeasurement->CreatePerformanceMeasurement (Handle, NULL, String, TimeStamp, 0, Identifier, PerfEndEntry);
|
||||||
} else {
|
} else {
|
||||||
ASSERT (FALSE);
|
ASSERT (FALSE);
|
||||||
}
|
}
|
||||||
@ -233,58 +235,8 @@ GetPerformanceMeasurementEx (
|
|||||||
OUT UINT32 *Identifier
|
OUT UINT32 *Identifier
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
return 0;
|
||||||
GAUGE_DATA_ENTRY_EX *GaugeData;
|
|
||||||
|
|
||||||
GaugeData = NULL;
|
|
||||||
|
|
||||||
ASSERT (Handle != NULL);
|
|
||||||
ASSERT (Token != NULL);
|
|
||||||
ASSERT (Module != NULL);
|
|
||||||
ASSERT (StartTimeStamp != NULL);
|
|
||||||
ASSERT (EndTimeStamp != NULL);
|
|
||||||
ASSERT (Identifier != NULL);
|
|
||||||
|
|
||||||
Status = GetPerformanceProtocol ();
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mPerformanceEx != NULL) {
|
|
||||||
Status = mPerformanceEx->GetGaugeEx (LogEntryKey++, &GaugeData);
|
|
||||||
} else if (mPerformance != NULL) {
|
|
||||||
Status = mPerformance->GetGauge (LogEntryKey++, (GAUGE_DATA_ENTRY **) &GaugeData);
|
|
||||||
} else {
|
|
||||||
ASSERT (FALSE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Make sure that LogEntryKey is a valid log entry key,
|
|
||||||
//
|
|
||||||
ASSERT (Status != EFI_INVALID_PARAMETER);
|
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
//
|
|
||||||
// The LogEntryKey is the last entry (equals to the total entry number).
|
|
||||||
//
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT (GaugeData != NULL);
|
|
||||||
|
|
||||||
*Handle = (VOID *) (UINTN) GaugeData->Handle;
|
|
||||||
*Token = GaugeData->Token;
|
|
||||||
*Module = GaugeData->Module;
|
|
||||||
*StartTimeStamp = GaugeData->StartTimeStamp;
|
|
||||||
*EndTimeStamp = GaugeData->EndTimeStamp;
|
|
||||||
if (mPerformanceEx != NULL) {
|
|
||||||
*Identifier = GaugeData->Identifier;
|
|
||||||
} else {
|
|
||||||
*Identifier = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return LogEntryKey;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -403,8 +355,7 @@ GetPerformanceMeasurement (
|
|||||||
OUT UINT64 *EndTimeStamp
|
OUT UINT64 *EndTimeStamp
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Identifier;
|
return 0;
|
||||||
return GetPerformanceMeasurementEx (LogEntryKey, Handle, Token, Module, StartTimeStamp, EndTimeStamp, &Identifier);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# to log performance data. If both PerformanceEx and Performance Protocol are not available,
|
# to log performance data. If both PerformanceEx and Performance Protocol are not available,
|
||||||
# it does not log any performance information.
|
# it does not log any performance information.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# 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
|
# which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -48,8 +48,7 @@
|
|||||||
|
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gPerformanceProtocolGuid ## SOMETIMES_CONSUMES ## UNDEFINED # Locate protocol
|
gEdkiiPerformanceMeasurementProtocolGuid ## SOMETIMES_CONSUMES ## UNDEFINED # Locate protocol
|
||||||
gPerformanceExProtocolGuid ## SOMETIMES_CONSUMES ## UNDEFINED # Locate protocol
|
|
||||||
|
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
|
@ -54,21 +54,10 @@ SPIN_LOCK mSmmFpdtLock;
|
|||||||
PERFORMANCE_PROPERTY mPerformanceProperty;
|
PERFORMANCE_PROPERTY mPerformanceProperty;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Interfaces for SMM Performance Protocol.
|
// Interfaces for SMM PerformanceMeasurement Protocol.
|
||||||
//
|
//
|
||||||
PERFORMANCE_PROTOCOL mPerformanceInterface = {
|
EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL mPerformanceMeasurementInterface = {
|
||||||
StartGauge,
|
CreatePerformanceMeasurement,
|
||||||
EndGauge,
|
|
||||||
GetGauge
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
// Interfaces for SMM PerformanceEx Protocol.
|
|
||||||
//
|
|
||||||
PERFORMANCE_EX_PROTOCOL mPerformanceExInterface = {
|
|
||||||
StartGaugeEx,
|
|
||||||
EndGaugeEx,
|
|
||||||
GetGaugeEx
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -643,235 +632,6 @@ InsertFpdtMeasurement (
|
|||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Adds a record at the end of the performance measurement log
|
|
||||||
that records the start time of a performance measurement.
|
|
||||||
|
|
||||||
Adds a record to the end of the performance measurement log
|
|
||||||
that contains the Handle, Token, Module and Identifier.
|
|
||||||
The end time of the new record must be set to zero.
|
|
||||||
If TimeStamp is not zero, then TimeStamp is used to fill in the start time in the record.
|
|
||||||
If TimeStamp is zero, the start time in the record is filled in with the value
|
|
||||||
read from the current time stamp.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
@param Identifier 32-bit identifier. If the value is 0, the created record
|
|
||||||
is same as the one created by StartGauge of PERFORMANCE_PROTOCOL.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The data was read correctly from the device.
|
|
||||||
@retval EFI_OUT_OF_RESOURCES There are not enough resources to record the measurement.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
StartGaugeEx (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp,
|
|
||||||
IN UINT32 Identifier
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
|
|
||||||
AcquireSpinLock (&mSmmFpdtLock);
|
|
||||||
|
|
||||||
Status = InsertFpdtMeasurement (TRUE, Handle, Token, Module, TimeStamp, Identifier);
|
|
||||||
|
|
||||||
ReleaseSpinLock (&mSmmFpdtLock);
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first matching record that contains a zero end time and fills in a valid end time.
|
|
||||||
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first record that matches Handle, Token, Module and Identifier and has an end time value of zero.
|
|
||||||
If the record can not be found then return EFI_NOT_FOUND.
|
|
||||||
If the record is found and TimeStamp is not zero,
|
|
||||||
then the end time in the record is filled in with the value specified by TimeStamp.
|
|
||||||
If the record is found and TimeStamp is zero, then the end time in the matching record
|
|
||||||
is filled in with the current time stamp value.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
@param Identifier 32-bit identifier. If the value is 0, the found record
|
|
||||||
is same as the one found by EndGauge of PERFORMANCE_PROTOCOL.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The end of the measurement was recorded.
|
|
||||||
@retval EFI_NOT_FOUND The specified measurement record could not be found.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
EndGaugeEx (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp,
|
|
||||||
IN UINT32 Identifier
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
|
|
||||||
AcquireSpinLock (&mSmmFpdtLock);
|
|
||||||
|
|
||||||
Status = InsertFpdtMeasurement (FALSE, Handle, Token, Module, TimeStamp, Identifier);
|
|
||||||
|
|
||||||
ReleaseSpinLock (&mSmmFpdtLock);
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retrieves a previously logged performance measurement.
|
|
||||||
It can also retrieve the log created by StartGauge and EndGauge of PERFORMANCE_PROTOCOL,
|
|
||||||
and then assign the Identifier with 0.
|
|
||||||
|
|
||||||
!!! Not Support!!!
|
|
||||||
|
|
||||||
Retrieves the performance log entry from the performance log specified by LogEntryKey.
|
|
||||||
If it stands for a valid entry, then EFI_SUCCESS is returned and
|
|
||||||
GaugeDataEntryEx stores the pointer to that entry.
|
|
||||||
|
|
||||||
@param LogEntryKey The key for the previous performance measurement log entry.
|
|
||||||
If 0, then the first performance measurement log entry is retrieved.
|
|
||||||
@param GaugeDataEntryEx The indirect pointer to the extended gauge data entry specified by LogEntryKey
|
|
||||||
if the retrieval is successful.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The GuageDataEntryEx is successfully found based on LogEntryKey.
|
|
||||||
@retval EFI_NOT_FOUND The LogEntryKey is the last entry (equals to the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER The LogEntryKey is not a valid entry (greater than the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER GaugeDataEntryEx is NULL.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
GetGaugeEx (
|
|
||||||
IN UINTN LogEntryKey,
|
|
||||||
OUT GAUGE_DATA_ENTRY_EX **GaugeDataEntryEx
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_UNSUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Adds a record at the end of the performance measurement log
|
|
||||||
that records the start time of a performance measurement.
|
|
||||||
|
|
||||||
Adds a record to the end of the performance measurement log
|
|
||||||
that contains the Handle, Token, and Module.
|
|
||||||
The end time of the new record must be set to zero.
|
|
||||||
If TimeStamp is not zero, then TimeStamp is used to fill in the start time in the record.
|
|
||||||
If TimeStamp is zero, the start time in the record is filled in with the value
|
|
||||||
read from the current time stamp.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The data was read correctly from the device.
|
|
||||||
@retval EFI_OUT_OF_RESOURCES There are not enough resources to record the measurement.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
StartGauge (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return StartGaugeEx (Handle, Token, Module, TimeStamp, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first matching record that contains a zero end time and fills in a valid end time.
|
|
||||||
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first record that matches Handle, Token, and Module and has an end time value of zero.
|
|
||||||
If the record can not be found then return EFI_NOT_FOUND.
|
|
||||||
If the record is found and TimeStamp is not zero,
|
|
||||||
then the end time in the record is filled in with the value specified by TimeStamp.
|
|
||||||
If the record is found and TimeStamp is zero, then the end time in the matching record
|
|
||||||
is filled in with the current time stamp value.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The end of the measurement was recorded.
|
|
||||||
@retval EFI_NOT_FOUND The specified measurement record could not be found.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
EndGauge (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EndGaugeEx (Handle, Token, Module, TimeStamp, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retrieves a previously logged performance measurement.
|
|
||||||
It can also retrieve the log created by StartGaugeEx and EndGaugeEx of PERFORMANCE_EX_PROTOCOL,
|
|
||||||
and then eliminate the Identifier.
|
|
||||||
|
|
||||||
!!! Not Support!!!
|
|
||||||
|
|
||||||
Retrieves the performance log entry from the performance log specified by LogEntryKey.
|
|
||||||
If it stands for a valid entry, then EFI_SUCCESS is returned and
|
|
||||||
GaugeDataEntry stores the pointer to that entry.
|
|
||||||
|
|
||||||
@param LogEntryKey The key for the previous performance measurement log entry.
|
|
||||||
If 0, then the first performance measurement log entry is retrieved.
|
|
||||||
@param GaugeDataEntry The indirect pointer to the gauge data entry specified by LogEntryKey
|
|
||||||
if the retrieval is successful.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The GuageDataEntry is successfully found based on LogEntryKey.
|
|
||||||
@retval EFI_NOT_FOUND The LogEntryKey is the last entry (equals to the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER The LogEntryKey is not a valid entry (greater than the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER GaugeDataEntry is NULL.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
GetGauge (
|
|
||||||
IN UINTN LogEntryKey,
|
|
||||||
OUT GAUGE_DATA_ENTRY **GaugeDataEntry
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return EFI_UNSUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
SmmReadyToBoot protocol notification event handler.
|
SmmReadyToBoot protocol notification event handler.
|
||||||
|
|
||||||
@ -942,16 +702,9 @@ InitializeSmmCorePerformanceLib (
|
|||||||
Handle = NULL;
|
Handle = NULL;
|
||||||
Status = gSmst->SmmInstallProtocolInterface (
|
Status = gSmst->SmmInstallProtocolInterface (
|
||||||
&Handle,
|
&Handle,
|
||||||
&gSmmPerformanceProtocolGuid,
|
&gEdkiiSmmPerformanceMeasurementProtocolGuid,
|
||||||
EFI_NATIVE_INTERFACE,
|
EFI_NATIVE_INTERFACE,
|
||||||
&mPerformanceInterface
|
&mPerformanceMeasurementInterface
|
||||||
);
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
Status = gSmst->SmmInstallProtocolInterface (
|
|
||||||
&Handle,
|
|
||||||
&gSmmPerformanceExProtocolGuid,
|
|
||||||
EFI_NATIVE_INTERFACE,
|
|
||||||
&mPerformanceExInterface
|
|
||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
@ -1031,6 +784,48 @@ SmmCorePerformanceLibConstructor (
|
|||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create performance record with event description and a timestamp.
|
||||||
|
|
||||||
|
@param CallerIdentifier - Image handle or pointer to caller ID GUID.
|
||||||
|
@param Guid - Pointer to a GUID.
|
||||||
|
@param String - Pointer to a string describing the measurement.
|
||||||
|
@param TimeStamp - 64-bit time stamp.
|
||||||
|
@param Address - Pointer to a location in memory relevant to the measurement.
|
||||||
|
@param Identifier - Performance identifier describing the type of measurement.
|
||||||
|
@param Attribute - The attribute of the measurement. According to attribute can create a start
|
||||||
|
record for PERF_START/PERF_START_EX, or a end record for PERF_END/PERF_END_EX,
|
||||||
|
or a general record for other Perf macros.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS - Successfully created performance record.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES - Ran out of space to store the records.
|
||||||
|
@retval EFI_INVALID_PARAMETER - Invalid parameter passed to function - NULL
|
||||||
|
pointer or invalid PerfId.
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
CreatePerformanceMeasurement(
|
||||||
|
IN CONST VOID *CallerIdentifier, OPTIONAL
|
||||||
|
IN CONST VOID *Guid, OPTIONAL
|
||||||
|
IN CONST CHAR8 *String, OPTIONAL
|
||||||
|
IN UINT64 TimeStamp, OPTIONAL
|
||||||
|
IN UINT64 Address, OPTIONAL
|
||||||
|
IN UINT32 Identifier,
|
||||||
|
IN PERF_MEASUREMENT_ATTRIBUTE Attribute
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
AcquireSpinLock (&mSmmFpdtLock);
|
||||||
|
if (Attribute == PerfStartEntry) {
|
||||||
|
Status = InsertFpdtMeasurement (TRUE, CallerIdentifier, String, String, TimeStamp, Identifier);
|
||||||
|
} else if (Attribute == PerfEndEntry) {
|
||||||
|
Status = InsertFpdtMeasurement (FALSE, CallerIdentifier, String, String, TimeStamp, Identifier);
|
||||||
|
}
|
||||||
|
ReleaseSpinLock (&mSmmFpdtLock);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Adds a record at the end of the performance measurement log
|
Adds a record at the end of the performance measurement log
|
||||||
that records the start time of a performance measurement.
|
that records the start time of a performance measurement.
|
||||||
@ -1066,7 +861,17 @@ StartPerformanceMeasurementEx (
|
|||||||
IN UINT32 Identifier
|
IN UINT32 Identifier
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return (RETURN_STATUS) StartGaugeEx (Handle, Token, Module, TimeStamp, Identifier);
|
CONST CHAR8 *String;
|
||||||
|
|
||||||
|
if (Token != NULL) {
|
||||||
|
String = Token;
|
||||||
|
} else if (Module != NULL) {
|
||||||
|
String = Module;
|
||||||
|
} else {
|
||||||
|
String = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (RETURN_STATUS)CreatePerformanceMeasurement (Handle, NULL, String, TimeStamp, 0, Identifier, PerfStartEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1105,7 +910,17 @@ EndPerformanceMeasurementEx (
|
|||||||
IN UINT32 Identifier
|
IN UINT32 Identifier
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return (RETURN_STATUS) EndGaugeEx (Handle, Token, Module, TimeStamp, Identifier);
|
CONST CHAR8 *String;
|
||||||
|
|
||||||
|
if (Token != NULL) {
|
||||||
|
String = Token;
|
||||||
|
} else if (Module != NULL) {
|
||||||
|
String = Module;
|
||||||
|
} else {
|
||||||
|
String = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (RETURN_STATUS)CreatePerformanceMeasurement (Handle, NULL, String, TimeStamp, 0, Identifier, PerfEndEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1198,7 +1013,7 @@ StartPerformanceMeasurement (
|
|||||||
IN UINT64 TimeStamp
|
IN UINT64 TimeStamp
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return StartGaugeEx (Handle, Token, Module, TimeStamp, 0);
|
return StartPerformanceMeasurementEx (Handle, Token, Module, TimeStamp, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1234,7 +1049,7 @@ EndPerformanceMeasurement (
|
|||||||
IN UINT64 TimeStamp
|
IN UINT64 TimeStamp
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return EndGaugeEx (Handle, Token, Module, TimeStamp, 0);
|
return EndPerformanceMeasurementEx (Handle, Token, Module, TimeStamp, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,16 +66,11 @@
|
|||||||
gEdkiiSmmReadyToBootProtocolGuid ## NOTIFY
|
gEdkiiSmmReadyToBootProtocolGuid ## NOTIFY
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
## PRODUCES ## UNDEFINED # Install protocol
|
|
||||||
## CONSUMES ## UNDEFINED # SmiHandlerRegister
|
|
||||||
gSmmPerformanceProtocolGuid
|
|
||||||
## PRODUCES ## UNDEFINED # Install protocol
|
|
||||||
## CONSUMES ## UNDEFINED # SmiHandlerRegister
|
|
||||||
gSmmPerformanceExProtocolGuid
|
|
||||||
## PRODUCES ## SystemTable
|
## PRODUCES ## SystemTable
|
||||||
gPerformanceProtocolGuid
|
gPerformanceProtocolGuid
|
||||||
gEdkiiFpdtExtendedFirmwarePerformanceGuid ## SOMETIMES_PRODUCES ## UNDEFINED # StatusCode Data
|
gEdkiiFpdtExtendedFirmwarePerformanceGuid ## SOMETIMES_PRODUCES ## UNDEFINED # StatusCode Data
|
||||||
gZeroGuid ## SOMETIMES_CONSUMES ## GUID
|
gZeroGuid ## SOMETIMES_CONSUMES ## GUID
|
||||||
|
gEdkiiSmmPerformanceMeasurementProtocolGuid ## PRODUCES ## UNDEFINED # Install protocol
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask ## CONSUMES
|
gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask ## CONSUMES
|
||||||
|
@ -20,6 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
|
|
||||||
|
|
||||||
#include <Guid/Performance.h>
|
#include <Guid/Performance.h>
|
||||||
|
#include <Guid/PerformanceMeasurement.h>
|
||||||
#include <Guid/ExtendedFirmwarePerformance.h>
|
#include <Guid/ExtendedFirmwarePerformance.h>
|
||||||
#include <Guid/FirmwarePerformance.h>
|
#include <Guid/FirmwarePerformance.h>
|
||||||
#include <Guid/ZeroGuid.h>
|
#include <Guid/ZeroGuid.h>
|
||||||
@ -46,200 +47,36 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <Protocol/DevicePathToText.h>
|
#include <Protocol/DevicePathToText.h>
|
||||||
|
|
||||||
//
|
//
|
||||||
// Interface declarations for SMM PerformanceEx Protocol.
|
// Interface declarations for SMM PerformanceMeasurement Protocol.
|
||||||
//
|
//
|
||||||
/**
|
/**
|
||||||
Adds a record at the end of the performance measurement log
|
Create performance record with event description and a timestamp.
|
||||||
that records the start time of a performance measurement.
|
|
||||||
|
|
||||||
Adds a record to the end of the performance measurement log
|
@param CallerIdentifier - Image handle or pointer to caller ID GUID.
|
||||||
that contains the Handle, Token, Module and Identifier.
|
@param Guid - Pointer to a GUID.
|
||||||
The end time of the new record must be set to zero.
|
@param String - Pointer to a string describing the measurement.
|
||||||
If TimeStamp is not zero, then TimeStamp is used to fill in the start time in the record.
|
@param TimeStamp - 64-bit time stamp.
|
||||||
If TimeStamp is zero, the start time in the record is filled in with the value
|
@param Address - Pointer to a location in memory relevant to the measurement.
|
||||||
read from the current time stamp.
|
@param Identifier - Performance identifier describing the type of measurement.
|
||||||
|
@param Attribute - The attribute of the measurement. According to attribute can create a start
|
||||||
@param Handle Pointer to environment specific context used
|
record for PERF_START/PERF_START_EX, or a end record for PERF_END/PERF_END_EX,
|
||||||
to identify the component being measured.
|
or a general record for other Perf macros.
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
@param Identifier 32-bit identifier. If the value is 0, the created record
|
|
||||||
is same as the one created by StartGauge of PERFORMANCE_PROTOCOL.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The data was read correctly from the device.
|
|
||||||
@retval EFI_OUT_OF_RESOURCES There are not enough resources to record the measurement.
|
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS - Successfully created performance record.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES - Ran out of space to store the records.
|
||||||
|
@retval EFI_INVALID_PARAMETER - Invalid parameter passed to function - NULL
|
||||||
|
pointer or invalid PerfId.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
StartGaugeEx (
|
CreatePerformanceMeasurement(
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
IN CONST VOID *CallerIdentifier, OPTIONAL
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
IN CONST VOID *Guid, OPTIONAL
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
IN CONST CHAR8 *String, OPTIONAL
|
||||||
IN UINT64 TimeStamp,
|
IN UINT64 TimeStamp, OPTIONAL
|
||||||
IN UINT32 Identifier
|
IN UINT64 Address, OPTIONAL
|
||||||
|
IN UINT32 Identifier,
|
||||||
|
IN PERF_MEASUREMENT_ATTRIBUTE Attribute
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first matching record that contains a zero end time and fills in a valid end time.
|
|
||||||
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first record that matches Handle, Token, Module and Identifier and has an end time value of zero.
|
|
||||||
If the record can not be found then return EFI_NOT_FOUND.
|
|
||||||
If the record is found and TimeStamp is not zero,
|
|
||||||
then the end time in the record is filled in with the value specified by TimeStamp.
|
|
||||||
If the record is found and TimeStamp is zero, then the end time in the matching record
|
|
||||||
is filled in with the current time stamp value.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
@param Identifier 32-bit identifier. If the value is 0, the found record
|
|
||||||
is same as the one found by EndGauge of PERFORMANCE_PROTOCOL.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The end of the measurement was recorded.
|
|
||||||
@retval EFI_NOT_FOUND The specified measurement record could not be found.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
EndGaugeEx (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp,
|
|
||||||
IN UINT32 Identifier
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retrieves a previously logged performance measurement.
|
|
||||||
It can also retrieve the log created by StartGauge and EndGauge of PERFORMANCE_PROTOCOL,
|
|
||||||
and then assign the Identifier with 0.
|
|
||||||
|
|
||||||
Retrieves the performance log entry from the performance log specified by LogEntryKey.
|
|
||||||
If it stands for a valid entry, then EFI_SUCCESS is returned and
|
|
||||||
GaugeDataEntryEx stores the pointer to that entry.
|
|
||||||
|
|
||||||
@param LogEntryKey The key for the previous performance measurement log entry.
|
|
||||||
If 0, then the first performance measurement log entry is retrieved.
|
|
||||||
@param GaugeDataEntryEx The indirect pointer to the extended gauge data entry specified by LogEntryKey
|
|
||||||
if the retrieval is successful.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The GuageDataEntryEx is successfully found based on LogEntryKey.
|
|
||||||
@retval EFI_NOT_FOUND The LogEntryKey is the last entry (equals to the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER The LogEntryKey is not a valid entry (greater than the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER GaugeDataEntryEx is NULL.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
GetGaugeEx (
|
|
||||||
IN UINTN LogEntryKey,
|
|
||||||
OUT GAUGE_DATA_ENTRY_EX **GaugeDataEntryEx
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Interface declarations for SMM Performance Protocol.
|
|
||||||
//
|
|
||||||
/**
|
|
||||||
Adds a record at the end of the performance measurement log
|
|
||||||
that records the start time of a performance measurement.
|
|
||||||
|
|
||||||
Adds a record to the end of the performance measurement log
|
|
||||||
that contains the Handle, Token, and Module.
|
|
||||||
The end time of the new record must be set to zero.
|
|
||||||
If TimeStamp is not zero, then TimeStamp is used to fill in the start time in the record.
|
|
||||||
If TimeStamp is zero, the start time in the record is filled in with the value
|
|
||||||
read from the current time stamp.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The data was read correctly from the device.
|
|
||||||
@retval EFI_OUT_OF_RESOURCES There are not enough resources to record the measurement.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
StartGauge (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first matching record that contains a zero end time and fills in a valid end time.
|
|
||||||
|
|
||||||
Searches the performance measurement log from the beginning of the log
|
|
||||||
for the first record that matches Handle, Token, and Module and has an end time value of zero.
|
|
||||||
If the record can not be found then return EFI_NOT_FOUND.
|
|
||||||
If the record is found and TimeStamp is not zero,
|
|
||||||
then the end time in the record is filled in with the value specified by TimeStamp.
|
|
||||||
If the record is found and TimeStamp is zero, then the end time in the matching record
|
|
||||||
is filled in with the current time stamp value.
|
|
||||||
|
|
||||||
@param Handle Pointer to environment specific context used
|
|
||||||
to identify the component being measured.
|
|
||||||
@param Token Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the component being measured.
|
|
||||||
@param Module Pointer to a Null-terminated ASCII string
|
|
||||||
that identifies the module being measured.
|
|
||||||
@param TimeStamp 64-bit time stamp.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The end of the measurement was recorded.
|
|
||||||
@retval EFI_NOT_FOUND The specified measurement record could not be found.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
EndGauge (
|
|
||||||
IN CONST VOID *Handle, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Token, OPTIONAL
|
|
||||||
IN CONST CHAR8 *Module, OPTIONAL
|
|
||||||
IN UINT64 TimeStamp
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retrieves a previously logged performance measurement.
|
|
||||||
It can also retrieve the log created by StartGaugeEx and EndGaugeEx of PERFORMANCE_EX_PROTOCOL,
|
|
||||||
and then eliminate the Identifier.
|
|
||||||
|
|
||||||
Retrieves the performance log entry from the performance log specified by LogEntryKey.
|
|
||||||
If it stands for a valid entry, then EFI_SUCCESS is returned and
|
|
||||||
GaugeDataEntry stores the pointer to that entry.
|
|
||||||
|
|
||||||
@param LogEntryKey The key for the previous performance measurement log entry.
|
|
||||||
If 0, then the first performance measurement log entry is retrieved.
|
|
||||||
@param GaugeDataEntry The indirect pointer to the gauge data entry specified by LogEntryKey
|
|
||||||
if the retrieval is successful.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The GuageDataEntry is successfully found based on LogEntryKey.
|
|
||||||
@retval EFI_NOT_FOUND The LogEntryKey is the last entry (equals to the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER The LogEntryKey is not a valid entry (greater than the total entry number).
|
|
||||||
@retval EFI_INVALIDE_PARAMETER GaugeDataEntry is NULL.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
GetGauge (
|
|
||||||
IN UINTN LogEntryKey,
|
|
||||||
OUT GAUGE_DATA_ENTRY **GaugeDataEntry
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -18,7 +18,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
**/
|
**/
|
||||||
|
|
||||||
|
|
||||||
#include <Guid/Performance.h>
|
#include <Guid/PerformanceMeasurement.h>
|
||||||
|
|
||||||
#include <Library/PerformanceLib.h>
|
#include <Library/PerformanceLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
@ -28,10 +28,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
|
|
||||||
//
|
//
|
||||||
// The cached SMM Performance Protocol and SMM PerformanceEx Protocol interface.
|
// The cached SMM Performance Protocol and SMM PerformanceEx Protocol interface.
|
||||||
//
|
EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL *mPerformanceMeasurement = NULL;
|
||||||
PERFORMANCE_PROTOCOL *mPerformance = NULL;
|
BOOLEAN mPerformanceMeasurementEnabled;
|
||||||
PERFORMANCE_EX_PROTOCOL *mPerformanceEx = NULL;
|
|
||||||
BOOLEAN mPerformanceMeasurementEnabled;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The constructor function initializes the Performance Measurement Enable flag
|
The constructor function initializes the Performance Measurement Enable flag
|
||||||
@ -65,38 +63,26 @@ SmmPerformanceLibConstructor (
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
GetPerformanceProtocol (
|
GetPerformanceMeasurementProtocol (
|
||||||
VOID
|
VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
PERFORMANCE_PROTOCOL *Performance;
|
EDKII_PERFORMANCE_MEASUREMENT_PROTOCOL *PerformanceMeasurement;
|
||||||
PERFORMANCE_EX_PROTOCOL *PerformanceEx;
|
|
||||||
|
|
||||||
if (mPerformanceEx != NULL || mPerformance != NULL) {
|
if (mPerformanceMeasurement != NULL) {
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gSmst->SmmLocateProtocol (&gSmmPerformanceExProtocolGuid, NULL, (VOID **) &PerformanceEx);
|
Status = gSmst->SmmLocateProtocol (&gEdkiiSmmPerformanceMeasurementProtocolGuid, NULL, (VOID **) &PerformanceMeasurement);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
ASSERT (PerformanceEx != NULL);
|
ASSERT (PerformanceMeasurement != NULL);
|
||||||
//
|
//
|
||||||
// Cache PerformanceEx Protocol.
|
// Cache PerformanceMeasurement Protocol.
|
||||||
//
|
//
|
||||||
mPerformanceEx = PerformanceEx;
|
mPerformanceMeasurement = PerformanceMeasurement;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gSmst->SmmLocateProtocol (&gSmmPerformanceProtocolGuid, NULL, (VOID **) &Performance);
|
|
||||||
if (!EFI_ERROR (Status)) {
|
|
||||||
ASSERT (Performance != NULL);
|
|
||||||
//
|
|
||||||
// Cache performance protocol.
|
|
||||||
//
|
|
||||||
mPerformance = Performance;
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,17 +118,24 @@ StartPerformanceMeasurementEx (
|
|||||||
IN UINT32 Identifier
|
IN UINT32 Identifier
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
CONST CHAR8* String;
|
||||||
|
|
||||||
Status = GetPerformanceProtocol ();
|
Status = GetPerformanceMeasurementProtocol ();
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return RETURN_OUT_OF_RESOURCES;
|
return RETURN_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mPerformanceEx != NULL) {
|
if (Token != NULL) {
|
||||||
Status = mPerformanceEx->StartGaugeEx (Handle, Token, Module, TimeStamp, Identifier);
|
String = Token;
|
||||||
} else if (mPerformance != NULL) {
|
} else if (Module != NULL) {
|
||||||
Status = mPerformance->StartGauge (Handle, Token, Module, TimeStamp);
|
String = Module;
|
||||||
|
} else {
|
||||||
|
String = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mPerformanceMeasurement != NULL) {
|
||||||
|
Status = mPerformanceMeasurement->CreatePerformanceMeasurement (Handle, NULL, String, TimeStamp, 0, Identifier, PerfStartEntry);
|
||||||
} else {
|
} else {
|
||||||
ASSERT (FALSE);
|
ASSERT (FALSE);
|
||||||
}
|
}
|
||||||
@ -184,17 +177,24 @@ EndPerformanceMeasurementEx (
|
|||||||
IN UINT32 Identifier
|
IN UINT32 Identifier
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
CONST CHAR8* String;
|
||||||
|
|
||||||
Status = GetPerformanceProtocol ();
|
Status = GetPerformanceMeasurementProtocol ();
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return RETURN_NOT_FOUND;
|
return RETURN_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mPerformanceEx != NULL) {
|
if (Token != NULL) {
|
||||||
Status = mPerformanceEx->EndGaugeEx (Handle, Token, Module, TimeStamp, Identifier);
|
String = Token;
|
||||||
} else if (mPerformance != NULL) {
|
} else if (Module != NULL) {
|
||||||
Status = mPerformance->EndGauge (Handle, Token, Module, TimeStamp);
|
String = Module;
|
||||||
|
} else {
|
||||||
|
String = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mPerformanceMeasurement != NULL) {
|
||||||
|
Status = mPerformanceMeasurement->CreatePerformanceMeasurement (Handle, NULL, String, TimeStamp, 0, Identifier, PerfEndEntry);
|
||||||
} else {
|
} else {
|
||||||
ASSERT (FALSE);
|
ASSERT (FALSE);
|
||||||
}
|
}
|
||||||
@ -255,58 +255,7 @@ GetPerformanceMeasurementEx (
|
|||||||
OUT UINT32 *Identifier
|
OUT UINT32 *Identifier
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
return 0;
|
||||||
GAUGE_DATA_ENTRY_EX *GaugeData;
|
|
||||||
|
|
||||||
GaugeData = NULL;
|
|
||||||
|
|
||||||
ASSERT (Handle != NULL);
|
|
||||||
ASSERT (Token != NULL);
|
|
||||||
ASSERT (Module != NULL);
|
|
||||||
ASSERT (StartTimeStamp != NULL);
|
|
||||||
ASSERT (EndTimeStamp != NULL);
|
|
||||||
ASSERT (Identifier != NULL);
|
|
||||||
|
|
||||||
Status = GetPerformanceProtocol ();
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mPerformanceEx != NULL) {
|
|
||||||
Status = mPerformanceEx->GetGaugeEx (LogEntryKey++, &GaugeData);
|
|
||||||
} else if (mPerformance != NULL) {
|
|
||||||
Status = mPerformance->GetGauge (LogEntryKey++, (GAUGE_DATA_ENTRY **) &GaugeData);
|
|
||||||
} else {
|
|
||||||
ASSERT (FALSE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Make sure that LogEntryKey is a valid log entry key,
|
|
||||||
//
|
|
||||||
ASSERT (Status != EFI_INVALID_PARAMETER);
|
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
//
|
|
||||||
// The LogEntryKey is the last entry (equals to the total entry number).
|
|
||||||
//
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT (GaugeData != NULL);
|
|
||||||
|
|
||||||
*Handle = (VOID *) (UINTN) GaugeData->Handle;
|
|
||||||
*Token = GaugeData->Token;
|
|
||||||
*Module = GaugeData->Module;
|
|
||||||
*StartTimeStamp = GaugeData->StartTimeStamp;
|
|
||||||
*EndTimeStamp = GaugeData->EndTimeStamp;
|
|
||||||
if (mPerformanceEx != NULL) {
|
|
||||||
*Identifier = GaugeData->Identifier;
|
|
||||||
} else {
|
|
||||||
*Identifier = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return LogEntryKey;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -425,8 +374,7 @@ GetPerformanceMeasurement (
|
|||||||
OUT UINT64 *EndTimeStamp
|
OUT UINT64 *EndTimeStamp
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Identifier;
|
return 0;
|
||||||
return GetPerformanceMeasurementEx (LogEntryKey, Handle, Token, Module, StartTimeStamp, EndTimeStamp, &Identifier);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
# to log performance data. If both SMM PerformanceEx and Performance Protocol are not available,
|
# to log performance data. If both SMM PerformanceEx and Performance Protocol are not available,
|
||||||
# it does not log any performance information.
|
# it does not log any performance information.
|
||||||
#
|
#
|
||||||
# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
|
# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
# This program and the accompanying materials
|
# This program and the accompanying materials
|
||||||
# are licensed and made available under the terms and conditions of the BSD License
|
# 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
|
# which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -50,8 +50,7 @@
|
|||||||
BaseMemoryLib
|
BaseMemoryLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gSmmPerformanceProtocolGuid ## SOMETIMES_CONSUMES ## UNDEFINED # Locate protocol
|
gEdkiiSmmPerformanceMeasurementProtocolGuid ## SOMETIMES_CONSUMES ## UNDEFINED # Locate protocol
|
||||||
gSmmPerformanceExProtocolGuid ## SOMETIMES_CONSUMES ## UNDEFINED # Locate protocol
|
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask ## CONSUMES
|
gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask ## CONSUMES
|
||||||
|
Loading…
x
Reference in New Issue
Block a user