]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Increase reallocation size for temp memory files
authorJim_Dailey@Dell.com <Jim_Dailey@Dell.com>
Thu, 18 Feb 2016 15:51:33 +0000 (23:51 +0800)
committerLiming Gao <liming.gao@intel.com>
Thu, 3 Mar 2016 04:45:19 +0000 (12:45 +0800)
If data of any real size were to be piped from one command to another,
an inordinate amount of time could be taken up by reallocating memory
that is only 10 bytes bigger than what is currently needed. Also, this
could cause unwelcome memory fragmentation.

Added a define to control how much memory is reallocated beyond that
which is currently needed. Set it to 1K vs. the original 10 bytes.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jim Dailey <jim_dailey@dell.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
ShellPkg/Application/Shell/FileHandleWrappers.c

index a9117bee92ae61e12d0b22d844eb287f71d10e52..1a0c9992abefea128c6e101f97bed547ecfce46b 100644 (file)
@@ -18,6 +18,8 @@
 #include "Shell.h"\r
 #include "FileHandleInternal.h"\r
 \r
+#define MEM_WRITE_REALLOC_OVERHEAD 1024\r
+\r
 /**\r
   File style interface for console (Open).  \r
   \r
@@ -1398,8 +1400,8 @@ FileInterfaceMemWrite(
     // Unicode\r
     //\r
     if ((UINTN)(MemFile->Position + (*BufferSize)) > (UINTN)(MemFile->BufferSize)) {\r
-      MemFile->Buffer = ReallocatePool((UINTN)(MemFile->BufferSize), (UINTN)(MemFile->BufferSize) + (*BufferSize) + 10, MemFile->Buffer);\r
-      MemFile->BufferSize += (*BufferSize) + 10;\r
+      MemFile->Buffer = ReallocatePool((UINTN)(MemFile->BufferSize), (UINTN)(MemFile->BufferSize) + (*BufferSize) + MEM_WRITE_REALLOC_OVERHEAD, MemFile->Buffer);\r
+      MemFile->BufferSize += (*BufferSize) + MEM_WRITE_REALLOC_OVERHEAD;\r
     }\r
     CopyMem(((UINT8*)MemFile->Buffer) + MemFile->Position, Buffer, *BufferSize);\r
     MemFile->Position += (*BufferSize);\r
@@ -1415,8 +1417,8 @@ FileInterfaceMemWrite(
     }\r
     AsciiSPrint(AsciiBuffer, *BufferSize, "%S", Buffer);\r
     if ((UINTN)(MemFile->Position + AsciiStrSize(AsciiBuffer)) > (UINTN)(MemFile->BufferSize)) {\r
-      MemFile->Buffer = ReallocatePool((UINTN)(MemFile->BufferSize), (UINTN)(MemFile->BufferSize) + AsciiStrSize(AsciiBuffer) + 10, MemFile->Buffer);\r
-      MemFile->BufferSize += AsciiStrSize(AsciiBuffer) + 10;\r
+      MemFile->Buffer = ReallocatePool((UINTN)(MemFile->BufferSize), (UINTN)(MemFile->BufferSize) + AsciiStrSize(AsciiBuffer) + MEM_WRITE_REALLOC_OVERHEAD, MemFile->Buffer);\r
+      MemFile->BufferSize += AsciiStrSize(AsciiBuffer) + MEM_WRITE_REALLOC_OVERHEAD;\r
     }\r
     CopyMem(((UINT8*)MemFile->Buffer) + MemFile->Position, AsciiBuffer, AsciiStrSize(AsciiBuffer));\r
     MemFile->Position += (*BufferSize / sizeof(CHAR16));\r