Index: src/core/SkVarAlloc.cpp |
diff --git a/src/core/SkVarAlloc.cpp b/src/core/SkVarAlloc.cpp |
index 6f5b5a18d3a16427a9d6c7b49bfb1bbfa1f53b24..8f84b95743e5ba54d80b39ec34c0c7c2b4f1c502 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; |
+} |