From 42db641adb142ec315dcf488cdfb9731a8e9070f Mon Sep 17 00:00:00 2001 From: cxl Date: Sat, 29 Jun 2019 18:07:52 +0000 Subject: [PATCH] Core: HEAPLOG improved git-svn-id: svn://ultimatepp.org/upp/trunk@13458 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Core/HeapImp.h | 3 -- uppsrc/Core/lheap.cpp | 1 - uppsrc/Core/sheap.cpp | 79 ++++++++++++++++++++++--------------------- 3 files changed, 41 insertions(+), 42 deletions(-) diff --git a/uppsrc/Core/HeapImp.h b/uppsrc/Core/HeapImp.h index 8185bf30a..da0336142 100644 --- a/uppsrc/Core/HeapImp.h +++ b/uppsrc/Core/HeapImp.h @@ -457,9 +457,6 @@ struct Heap : BlkHeap { void Shutdown(); static void AuxFinalCheck(); -#ifdef flagHEAPLOG - void *AllocSz0(size_t& sz); -#endif void *AllocSz(size_t& sz); void Free(void *ptr); size_t GetBlockSize(void *ptr); diff --git a/uppsrc/Core/lheap.cpp b/uppsrc/Core/lheap.cpp index 13c7f28f8..89bb14501 100644 --- a/uppsrc/Core/lheap.cpp +++ b/uppsrc/Core/lheap.cpp @@ -48,7 +48,6 @@ void *Heap::TryLAlloc(int i0, word wcount) LBlkHeader *h = l->next; if(h != l) { ASSERT(h->GetSize() >= wcount); - RTIMING("MakeAlloc"); lheap.MakeAlloc(h, wcount); h->heap = this; return (BlkPrefix *)h + 1; diff --git a/uppsrc/Core/sheap.cpp b/uppsrc/Core/sheap.cpp index a2b3e506e..c4536042f 100644 --- a/uppsrc/Core/sheap.cpp +++ b/uppsrc/Core/sheap.cpp @@ -128,12 +128,6 @@ void *Heap::Allok(int k) return DbgFreeCheckK(AllocK(k), k); } -#ifdef flagHEAPLOG - -#define AllocSz AllocSz0 - -#endif - force_inline void *Heap::AllocSz(size_t& sz) { @@ -170,28 +164,6 @@ void *Heap::AllocSz(size_t& sz) return LAlloc(sz); } -#ifdef flagHEAPLOG - -#undef AllocSz - -StaticMutex sHeapLogLock; - -static FILE *sLog = fopen(GetExeDirFile("heap.log"), "w"); - -force_inline -void *Heap::AllocSz(size_t& sz) -{ - size_t sz0 = sz; - void *ptr = AllocSz0(sz); - if(sLog) { - Mutex::Lock __(sHeapLogLock); - fprintf(sLog, "%x %zx %p\n", Thread::GetCurrentId(), sz, ptr); - } - return ptr; -} - -#endif - force_inline void Heap::FreeK(void *ptr, Page *page, int k) { @@ -256,12 +228,6 @@ void Heap::Free(void *ptr, Page *page, int k) force_inline void Heap::Free(void *ptr) { -#ifdef flagHEAPLOG - if(sLog) { - Mutex::Lock __(sHeapLogLock); - fprintf(sLog, "-%x %p\n", Thread::GetCurrentId(), ptr); - } -#endif if(!ptr) return; LLOG("Free " << ptr); if(IsSmall(ptr)) { @@ -399,21 +365,56 @@ size_t GetMemoryBlockSize_(void *ptr) #else + +#ifdef flagHEAPLOG + +#undef AllocSz + +StaticMutex sHeapLogLock; + +static FILE *sLog = fopen(GetExeDirFile("heap.log"), "w"); + +void LogFree(void *ptr) +{ + if(sLog) { + Mutex::Lock __(sHeapLogLock); + fprintf(sLog, "-%x %p\n", Thread::GetCurrentId(), ptr); + } +} + +void *LogAlloc(void *ptr, size_t sz) +{ + if(sLog) { + Mutex::Lock __(sHeapLogLock); + fprintf(sLog, "%x %zx %p\n", Thread::GetCurrentId(), sz, ptr); + } + return ptr; +} + +#else + +inline void LogFree(void *ptr) {} + +inline void *LogAlloc(void *ptr, size_t sz) { return ptr; } + +#endif + void *MemoryAlloc(size_t sz) { LTIMING("MemoryAlloc"); - return ThreadHeap()->AllocSz(sz); + return LogAlloc(ThreadHeap()->AllocSz(sz), sz); } void *MemoryAllocSz(size_t& sz) { LTIMING("MemoryAllocSz"); - return ThreadHeap()->AllocSz(sz); + return LogAlloc(ThreadHeap()->AllocSz(sz), sz); } void MemoryFree(void *ptr) { LTIMING("MemoryFree"); + LogFree(ptr); ThreadHeap()->Free(ptr); } @@ -430,24 +431,26 @@ bool MemoryTryRealloc__(void *ptr, size_t& size) void *MemoryAlloc32() { LTIMING("MemoryAlloc32"); - return ThreadHeap()->Alloc32(); + return LogAlloc(ThreadHeap()->Alloc32(), 32); } void MemoryFree32(void *ptr) { LTIMING("MemoryFree32"); + LogFree(ptr); ThreadHeap()->Free32(ptr); } void *MemoryAlloc48() { LTIMING("MemoryAlloc48"); - return ThreadHeap()->Alloc48(); + return LogAlloc(ThreadHeap()->Alloc48(), 48); } void MemoryFree48(void *ptr) { LTIMING("MemoryFree48"); + LogFree(ptr); ThreadHeap()->Free48(ptr); }