diff options
author | 2014-11-18 09:32:36 -0800 | |
---|---|---|
committer | 2014-11-18 09:32:36 -0800 | |
commit | 0bd57b2e1eb6ff824ac59a461d1a8aa24a808886 (patch) | |
tree | 888fcf1fc99ff4e193214be04f547120917bcdb7 /src | |
parent | a06a9531213d2f00a0fe1dc07acd96eba57e6044 (diff) |
SkVarAlloc::approxBytesAllocated()
This is what I was getting at on the other CL.
BUG=skia:
Committed: https://skia.googlesource.com/skia/+/f27f1bcce50c8f95aea8469684a70b70c9baee09
CQ_EXTRA_TRYBOTS=client.skia.android:Test-Android-Nexus5-Adreno330-Arm7-Release-Trybot
Review URL: https://codereview.chromium.org/730193003
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkVarAlloc.cpp | 27 | ||||
-rw-r--r-- | src/core/SkVarAlloc.h | 4 |
2 files changed, 28 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; +} diff --git a/src/core/SkVarAlloc.h b/src/core/SkVarAlloc.h index 2b5401b7f0..9eac658828 100644 --- a/src/core/SkVarAlloc.h +++ b/src/core/SkVarAlloc.h @@ -23,6 +23,10 @@ public: return ptr; } + // Returns our best estimate of the number of bytes we've allocated. + // (We intentionally do not track this precisely to save space.) + size_t approxBytesAllocated() const; + private: void makeSpace(size_t bytes, unsigned flags); |