change SkChunkAlloc to grow its allocations geometrically (not linearly)
plus add a bench and unittest for it.
git-svn-id: http://skia.googlecode.com/svn/trunk@3989 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/MemsetTest.cpp b/tests/MemsetTest.cpp
index 9c1fc92..7e80b57 100644
--- a/tests/MemsetTest.cpp
+++ b/tests/MemsetTest.cpp
@@ -1,13 +1,39 @@
-
/*
* Copyright 2011 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
+
#include "Test.h"
+#include "SkChunkAlloc.h"
#include "SkUtils.h"
+static void test_chunkalloc(skiatest::Reporter* reporter) {
+ size_t min = 256;
+ SkChunkAlloc alloc(min);
+
+ REPORTER_ASSERT(reporter, 0 == alloc.totalCapacity());
+ REPORTER_ASSERT(reporter, 0 == alloc.blockCount());
+ REPORTER_ASSERT(reporter, !alloc.contains(NULL));
+ REPORTER_ASSERT(reporter, !alloc.contains(reporter));
+
+ alloc.reset();
+ REPORTER_ASSERT(reporter, 0 == alloc.totalCapacity());
+ 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.blockCount() > 0);
+ REPORTER_ASSERT(reporter, alloc.contains(ptr));
+
+ alloc.reset();
+ REPORTER_ASSERT(reporter, !alloc.contains(ptr));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
static void set_zero(void* dst, size_t bytes) {
char* ptr = (char*)dst;
for (size_t i = 0; i < bytes; ++i) {
@@ -85,6 +111,8 @@
static void TestMemset(skiatest::Reporter* reporter) {
test_16(reporter);
test_32(reporter);
+
+ test_chunkalloc(reporter);
};
#include "TestClassDef.h"