aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/MemsetTest.cpp
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2015-02-27 08:31:57 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-02-27 08:31:57 -0800
commita9061de9ff8d5b9545e5d1ef7a6e4054e1907c95 (patch)
treeb21a2c3d0088938a9e50a8a4b433b403e4d795c2 /tests/MemsetTest.cpp
parent827da23c71310408b2854516af5e2a8910bf700e (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.cpp75
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());
}
///////////////////////////////////////////////////////////////////////////////