aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkVarAlloc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkVarAlloc.cpp')
-rw-r--r--src/core/SkVarAlloc.cpp27
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;
+}