diff options
Diffstat (limited to 'src/core/SkVarAlloc.cpp')
-rw-r--r-- | src/core/SkVarAlloc.cpp | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/core/SkVarAlloc.cpp b/src/core/SkVarAlloc.cpp index 6f5b5a18d3..8f84b95743 100644 --- a/src/core/SkVarAlloc.cpp +++ b/src/core/SkVarAlloc.cpp @@ -3,7 +3,7 @@ // We use non-standard malloc diagnostic methods to make sure our allocations are sized well. #if defined(SK_BUILD_FOR_MAC) #include <malloc/malloc.h> -#elif defined(SK_BUILD_FOR_LINUX) +#elif defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_WIN32) #include <malloc.h> #endif @@ -56,7 +56,28 @@ void SkVarAlloc::makeSpace(size_t bytes, unsigned flags) { #if defined(SK_BUILD_FOR_MAC) SkASSERT(alloc == malloc_good_size(alloc)); -#elif defined(SK_BUILD_FOR_LINUX) - SkASSERT(alloc == malloc_usable_size(fByte - sizeof(Block))); +#elif defined(SK_BUILD_FOR_UNIX) + // TODO(mtklein): tune so we can assert something like this + //SkASSERT(alloc == malloc_usable_size(fBlock)); #endif } + +static size_t heap_size(void* p) { +#if defined(SK_BUILD_FOR_MAC) + return malloc_size(p); +#elif defined(SK_BUILD_FOR_UNIX) + return malloc_usable_size(p); +#elif defined(SK_BUILD_FOR_WIN32) + return _msize(p); +#else + return 0; // Tough luck. +#endif +} + +size_t SkVarAlloc::approxBytesAllocated() const { + size_t sum = 0; + for (Block* b = fBlock; b; b = b->prev) { + sum += heap_size(b); + } + return sum; +} |