mirror of https://github.com/acidanthera/audk.git
Record LoadImage perf log for LoadImageEx() and use NULL as Handle to record StartImage perf log when StartImage() fails.
Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13379 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
7ea7eee3a5
commit
f3235b77e4
|
@ -1441,7 +1441,16 @@ CoreLoadImageEx (
|
||||||
IN UINT32 Attribute
|
IN UINT32 Attribute
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return CoreLoadImageCommon (
|
EFI_STATUS Status;
|
||||||
|
UINT64 Tick;
|
||||||
|
EFI_HANDLE Handle;
|
||||||
|
|
||||||
|
Tick = 0;
|
||||||
|
PERF_CODE (
|
||||||
|
Tick = GetPerformanceCounter ();
|
||||||
|
);
|
||||||
|
|
||||||
|
Status = CoreLoadImageCommon (
|
||||||
TRUE,
|
TRUE,
|
||||||
ParentImageHandle,
|
ParentImageHandle,
|
||||||
FilePath,
|
FilePath,
|
||||||
|
@ -1453,6 +1462,19 @@ CoreLoadImageEx (
|
||||||
EntryPoint,
|
EntryPoint,
|
||||||
Attribute
|
Attribute
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Handle = NULL;
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
//
|
||||||
|
// ImageHandle will be valid only Status is success.
|
||||||
|
//
|
||||||
|
Handle = *ImageHandle;
|
||||||
|
}
|
||||||
|
|
||||||
|
PERF_START (Handle, "LoadImage:", NULL, Tick);
|
||||||
|
PERF_END (Handle, "LoadImage:", NULL, 0);
|
||||||
|
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1487,6 +1509,11 @@ CoreStartImage (
|
||||||
LOADED_IMAGE_PRIVATE_DATA *LastImage;
|
LOADED_IMAGE_PRIVATE_DATA *LastImage;
|
||||||
UINT64 HandleDatabaseKey;
|
UINT64 HandleDatabaseKey;
|
||||||
UINTN SetJumpFlag;
|
UINTN SetJumpFlag;
|
||||||
|
UINT64 Tick;
|
||||||
|
EFI_HANDLE Handle;
|
||||||
|
|
||||||
|
Tick = 0;
|
||||||
|
Handle = ImageHandle;
|
||||||
|
|
||||||
Image = CoreLoadedImageInfo (ImageHandle);
|
Image = CoreLoadedImageInfo (ImageHandle);
|
||||||
if (Image == NULL || Image->Started) {
|
if (Image == NULL || Image->Started) {
|
||||||
|
@ -1506,10 +1533,9 @@ CoreStartImage (
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
PERF_CODE (
|
||||||
// Don't profile Objects or invalid start requests
|
Tick = GetPerformanceCounter ();
|
||||||
//
|
);
|
||||||
PERF_START (ImageHandle, "StartImage:", NULL, 0);
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -1529,7 +1555,12 @@ CoreStartImage (
|
||||||
//
|
//
|
||||||
Image->JumpBuffer = AllocatePool (sizeof (BASE_LIBRARY_JUMP_BUFFER) + BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT);
|
Image->JumpBuffer = AllocatePool (sizeof (BASE_LIBRARY_JUMP_BUFFER) + BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT);
|
||||||
if (Image->JumpBuffer == NULL) {
|
if (Image->JumpBuffer == NULL) {
|
||||||
PERF_END (ImageHandle, "StartImage:", NULL, 0);
|
//
|
||||||
|
// Image may be unloaded after return with failure,
|
||||||
|
// then ImageHandle may be invalid, so use NULL handle to record perf log.
|
||||||
|
//
|
||||||
|
PERF_START (NULL, "StartImage:", NULL, Tick);
|
||||||
|
PERF_END (NULL, "StartImage:", NULL, 0);
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
Image->JumpContext = ALIGN_POINTER (Image->JumpBuffer, BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT);
|
Image->JumpContext = ALIGN_POINTER (Image->JumpBuffer, BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT);
|
||||||
|
@ -1620,12 +1651,17 @@ CoreStartImage (
|
||||||
//
|
//
|
||||||
if (EFI_ERROR (Image->Status) || Image->Type == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {
|
if (EFI_ERROR (Image->Status) || Image->Type == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {
|
||||||
CoreUnloadAndCloseImage (Image, TRUE);
|
CoreUnloadAndCloseImage (Image, TRUE);
|
||||||
|
//
|
||||||
|
// ImageHandle may be invalid after the image is unloaded, so use NULL handle to record perf log.
|
||||||
|
//
|
||||||
|
Handle = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Done
|
// Done
|
||||||
//
|
//
|
||||||
PERF_END (ImageHandle, "StartImage:", NULL, 0);
|
PERF_START (Handle, "StartImage:", NULL, Tick);
|
||||||
|
PERF_END (Handle, "StartImage:", NULL, 0);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue