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
This commit is contained in:
mtklein 2014-11-18 09:32:36 -08:00 committed by Commit bot
parent a06a953121
commit 0bd57b2e1e
4 changed files with 42 additions and 3 deletions

View File

@ -212,6 +212,7 @@
'../tests/TypefaceTest.cpp',
'../tests/UnicodeTest.cpp',
'../tests/UtilsTest.cpp',
'../tests/VarAllocTest.cpp',
'../tests/WArrayTest.cpp',
'../tests/WritePixelsTest.cpp',
'../tests/Writer32Test.cpp',

View File

@ -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;
}

View File

@ -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);

13
tests/VarAllocTest.cpp Normal file
View File

@ -0,0 +1,13 @@
#include "Test.h"
#include "SkVarAlloc.h"
DEF_TEST(VarAlloc, r) {
SkVarAlloc va;
char* p = va.alloc(128, SK_MALLOC_THROW);
sk_bzero(p, 128); // Just checking this is safe.
#ifndef SK_BUILD_FOR_ANDROID
// This method will always return 0 on Android.
REPORTER_ASSERT(r, va.approxBytesAllocated() >= 128);
#endif
}