The system has one page decreased after some executions.
I used the following script to check this:

FS1:
echo -off
memmap >> memmapShellBefore.txt
for %a run (1 10)
 TestesImagemBMP.efi
 memmap >> memmapShellAfter_%a.txt
endfor

The decrease happened at execution number 4 and 9
From execution 1 to 2, and 2 to 3  no decrease was detected. The same with
execution 4 to 5, 5 to 6 6 to 7 and 7 to 8

I thought that since I'm using the script no command log was saved by the
shell application.
At the begin I added a echo -off to avoid scroll.


Thanks and Regards
Rafael R. Machado

Em qua, 1 de jun de 2016 às 14:13, Carsey, Jaben <jaben.car...@intel.com>
escreveu:

> Does the pattern continue or level off after time?
>
> I ask as the shell will make some allocations to save things like command
> history and output history for up/down page up/page down support...
>
> -Jaben
>
> > On Jun 1, 2016, at 10:10 AM, Rafael Machado <
> rafaelrodrigues.mach...@gmail.com> wrote:
> >
> > Hi Everyone.
> >
> > I'm doing some tests related to the GOP and graphical applications.
> > What I've seeing is that after calling the GOP->BLT several times the
> > available memory from the system decrease.
> >
> > For example. When the system just boot I have the following at the uefi
> > shell memmap command:
> >
> >  reserved  :     124 Pages (507,904)
> >  LoaderCode:     186 Pages (761,856)
> >  LoaderData:      24 Pages (98,304)
> >  BS_code   :   1,719 Pages (7,041,024)
> >  BS_data   :  10,774 Pages (44,130,304)
> >  RT_code   :     256 Pages (1,048,576)
> >  RT_data   :     660 Pages (2,703,360)
> >  *available : 407,184 Pages (1,667,825,664)*
> >  ACPI_recl :      96 Pages (393,216)
> >  ACPI_NVS  :     129 Pages (528,384)
> >  MemMapIO  :       1 Pages (4,096)
> > Total Memory: 1,644 MB (1,724,530,688) Bytes
> >
> > After executing a sample application that just draw a white box 10
> times, I
> > have the following:
> >
> >  reserved  :     124 Pages (507,904)
> >  LoaderCode:     186 Pages (761,856)
> >  LoaderData:      24 Pages (98,304)
> >  BS_code   :   1,719 Pages (7,041,024)
> >  BS_data   :  10,776 Pages (44,138,496)
> >  RT_code   :     256 Pages (1,048,576)
> >  RT_data   :     660 Pages (2,703,360)
> > * available : 407,182 Pages (1,667,817,472)*
> >  ACPI_recl :      96 Pages (393,216)
> >  ACPI_NVS  :     129 Pages (528,384)
> >  MemMapIO  :       1 Pages (4,096)
> > Total Memory: 1,644 MB (1,724,530,688) Bytes
> >
> >
> > So the situation is that on a Graphical UEFI application, there is a
> > possibility of getting too much memory.
> > As much as I execute the application the available memory keeps
> decreasing.
> >
> > Could someone please help me to find some problem on the sample
> application
> > code ?
> >
> > "
> > #include <Uefi.h>
> > #include <Library/UefiBootServicesTableLib.h>
> > #include <Library/MemoryAllocationLib.h>
> > #include <Library/UefiLib.h>
> > #include <Library/PrintLib.h>
> > #include <Library/DebugLib.h>
> > #include <Protocol/GraphicsOutput.h>
> > #include <Protocol/EdidActive.h>
> >
> > #define BoxWidth 100
> > #define BoxHeight 100
> >
> > EFI_STATUS PrintImage(EFI_HANDLE ImageHandle, UINTN ImagePositionX, UINTN
> > ImagePositionY){
> >
> > UINTN Size;
> > EFI_STATUS Status;
> > UINTN HandleIndex = 0;
> > EFI_HANDLE *HandleArray = NULL;
> > EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicProtocol = NULL;
> > EFI_GUID gGraphicalProtocol = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
> > EFI_GUID gEdidActivated = EFI_EDID_ACTIVE_PROTOCOL_GUID;
> > EFI_EDID_ACTIVE_PROTOCOL *EdidActivated = NULL;
> > EFI_GRAPHICS_OUTPUT_BLT_PIXEL* inMemoryImage = NULL;
> >
> > Status = gBS->LocateHandleBuffer(ByProtocol,
> > &gEfiGraphicsOutputProtocolGuid,
> > NULL,
> > &Size,
> > &HandleArray);
> >
> > if(!EFI_ERROR(Status))
> > {
> > for(HandleIndex=0; HandleIndex<Size; HandleIndex++)
> > {
> >
> > Status = gBS->OpenProtocol(HandleArray[HandleIndex],
> > &gGraphicalProtocol,
> > (VOID**) &GraphicProtocol,
> > ImageHandle,
> > NULL,
> > EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL);
> >
> > if(EFI_ERROR(Status)){
> >
> > gBS->CloseProtocol(HandleArray[HandleIndex],
> > &gGraphicalProtocol,
> > ImageHandle,
> > NULL);
> >
> > GraphicProtocol = NULL;
> >
> > continue;
> > } else {
> >
> > // Verifies if current handle corresponds to current video
> > Status = gBS->OpenProtocol(HandleArray[HandleIndex],
> > &gEdidActivated,
> > (VOID**) &EdidActivated,
> > ImageHandle,
> > NULL,
> > EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL);
> >
> > if(EFI_ERROR(Status)){
> >
> > gBS->CloseProtocol(HandleArray[HandleIndex],
> > &gGraphicalProtocol,
> > ImageHandle,
> > NULL);
> >
> > GraphicProtocol = NULL;
> >
> > gBS->CloseProtocol(HandleArray[HandleIndex],
> > &gEdidActivated,
> > ImageHandle,
> > NULL);
> >
> > EdidActivated = NULL;
> >
> > continue;
> > } else {
> > break;
> > }
> > }
> > }
> >
> > if(!EFI_ERROR(Status))
> > {
> > Status = gBS->AllocatePool(EfiBootServicesData,
> > sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL) *
> > BoxWidth * BoxHeight,
> > &inMemoryImage);
> >
> > if(!EFI_ERROR(Status))
> > {
> >
> > gBS->SetMem(inMemoryImage,
> > sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL) *
> > BoxWidth * BoxHeight,
> > 0xFF);
> >
> > Status = GraphicProtocol->Blt(GraphicProtocol,
> > inMemoryImage,
> > EfiBltBufferToVideo,
> > 0,
> > 0,
> > ImagePositionX,
> > ImagePositionY,
> > BoxWidth,
> > BoxHeight,
> > 0);
> >
> > if(EFI_ERROR(Status)){
> > Print(L"Fail to print Image");
> > goto CLEAR;
> > }
> > } else {
> > Print(L"Fail to allocate buffer");
> > goto CLEAR;
> > }
> >
> > }else{
> > Print(L"Fail to locate GraphicIoProtocol devices");
> > goto CLEAR;
> > }
> > }
> >
> > CLEAR:
> >
> > if(inMemoryImage != NULL) {
> > FreePool(inMemoryImage);
> > inMemoryImage = NULL;
> > }
> >
> > if(GraphicProtocol != NULL) {
> >
> > Status = gBS->CloseProtocol(HandleArray[HandleIndex],
> > &gGraphicalProtocol,
> > ImageHandle,
> > NULL);
> >
> > GraphicProtocol = NULL;
> > }
> >
> > if(EdidActivated != NULL) {
> >
> > Status = gBS->CloseProtocol(HandleArray[HandleIndex],
> > &gEdidActivated,
> > ImageHandle,
> > NULL);
> >
> > EdidActivated = NULL;
> > }
> >
> > if(HandleArray != NULL) {
> > FreePool(HandleArray);
> > HandleArray = NULL;
> > }
> >
> > return Status;
> > }
> >
> >
> > EFI_STATUS testMain(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE
> *SystemTable)
> > {
> > return PrintImage(ImageHandle, 50, 50);
> > }
> > "
> >
> >
> > Any help will be really useful.
> >
> > Thanks and Regards
> > Rafael R. Machado
> > _______________________________________________
> > edk2-devel mailing list
> > edk2-devel@lists.01.org
> > https://lists.01.org/mailman/listinfo/edk2-devel
>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to