Well... sadly the best way to debug would be to get the memory map yourself, 
run your graphical operation, and then compare all inside the same program 
(assuming that you allocate no memory within your memory map acquisitions).

-Jaben

> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> Rafael Machado
> Sent: Wednesday, June 01, 2016 10:33 AM
> To: Carsey, Jaben <jaben.car...@intel.com>
> Cc: edk2-devel@lists.01.org
> Subject: Re: [edk2] Memory Consumption after BLT (GOP)
> Importance: High
> 
> 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
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to