diff options
author | robertphillips <robertphillips@google.com> | 2015-02-27 08:31:57 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-27 08:31:57 -0800 |
commit | a9061de9ff8d5b9545e5d1ef7a6e4054e1907c95 (patch) | |
tree | b21a2c3d0088938a9e50a8a4b433b403e4d795c2 /tests/MemsetTest.cpp | |
parent | 827da23c71310408b2854516af5e2a8910bf700e (diff) |
Add rewind capability to SkChunkAlloc
Split off from https://codereview.chromium.org/940533003/ (Decrease GrInOrderDrawBuffer::Cmd's reliance on GrInOrderDrawBuffer)
Review URL: https://codereview.chromium.org/967553003
Diffstat (limited to 'tests/MemsetTest.cpp')
-rw-r--r-- | tests/MemsetTest.cpp | 75 |
1 files changed, 58 insertions, 17 deletions
diff --git a/tests/MemsetTest.cpp b/tests/MemsetTest.cpp index ee6aaea94e..1e1378b4ad 100644 --- a/tests/MemsetTest.cpp +++ b/tests/MemsetTest.cpp @@ -9,32 +9,73 @@ #include "SkUtils.h" #include "Test.h" +static void check_alloc(skiatest::Reporter* reporter, const SkChunkAlloc& alloc, + size_t capacity, size_t used, int numBlocks) { + REPORTER_ASSERT(reporter, alloc.totalCapacity() >= capacity); + REPORTER_ASSERT(reporter, alloc.totalUsed() == used); + SkDEBUGCODE(REPORTER_ASSERT(reporter, alloc.blockCount() == numBlocks);) +} + +static void* simple_alloc(skiatest::Reporter* reporter, SkChunkAlloc* alloc, size_t size) { + void* ptr = alloc->allocThrow(size); + check_alloc(reporter, *alloc, size, size, 1); + REPORTER_ASSERT(reporter, alloc->contains(ptr)); + return ptr; +} + static void test_chunkalloc(skiatest::Reporter* reporter) { - size_t min = 256; - SkChunkAlloc alloc(min); + static const size_t kMin = 1024; + SkChunkAlloc alloc(kMin); - REPORTER_ASSERT(reporter, 0 == alloc.totalCapacity()); - REPORTER_ASSERT(reporter, 0 == alloc.totalUsed()); - REPORTER_ASSERT(reporter, 0 == alloc.blockCount()); + //------------------------------------------------------------------------ + // check empty + check_alloc(reporter, alloc, 0, 0, 0); REPORTER_ASSERT(reporter, !alloc.contains(NULL)); REPORTER_ASSERT(reporter, !alloc.contains(reporter)); + // reset on empty allocator alloc.reset(); - REPORTER_ASSERT(reporter, 0 == alloc.totalCapacity()); - REPORTER_ASSERT(reporter, 0 == alloc.totalUsed()); - REPORTER_ASSERT(reporter, 0 == alloc.blockCount()); - - size_t size = min >> 1; - void* ptr = alloc.allocThrow(size); - REPORTER_ASSERT(reporter, alloc.totalCapacity() >= size); - REPORTER_ASSERT(reporter, alloc.totalUsed() == size); - REPORTER_ASSERT(reporter, alloc.blockCount() > 0); - REPORTER_ASSERT(reporter, alloc.contains(ptr)); + check_alloc(reporter, alloc, 0, 0, 0); + + // rewind on empty allocator + alloc.rewind(); + check_alloc(reporter, alloc, 0, 0, 0); + + //------------------------------------------------------------------------ + // test reset when something is allocated + size_t size = kMin >> 1; + void* ptr = simple_alloc(reporter, &alloc, size); + + alloc.reset(); + check_alloc(reporter, alloc, 0, 0, 0); + REPORTER_ASSERT(reporter, !alloc.contains(ptr)); + + //------------------------------------------------------------------------ + // test rewind when something is allocated + ptr = simple_alloc(reporter, &alloc, size); + + alloc.rewind(); + check_alloc(reporter, alloc, size, 0, 1); + REPORTER_ASSERT(reporter, !alloc.contains(ptr)); + // use the available block + ptr = simple_alloc(reporter, &alloc, size); alloc.reset(); + + //------------------------------------------------------------------------ + // test out allocating a second block + ptr = simple_alloc(reporter, &alloc, size); + + ptr = alloc.allocThrow(kMin); + check_alloc(reporter, alloc, 2*kMin, size+kMin, 2); + REPORTER_ASSERT(reporter, alloc.contains(ptr)); + + //------------------------------------------------------------------------ + // test out unalloc + size_t freed = alloc.unalloc(ptr); + REPORTER_ASSERT(reporter, freed == kMin); + check_alloc(reporter, alloc, 2*kMin, size, 2); REPORTER_ASSERT(reporter, !alloc.contains(ptr)); - REPORTER_ASSERT(reporter, 0 == alloc.totalCapacity()); - REPORTER_ASSERT(reporter, 0 == alloc.totalUsed()); } /////////////////////////////////////////////////////////////////////////////// |