Lines Matching full:pool

24     static size_t ScratchBlockSize(SkSBlockAllocator<N>& pool) {  in ScratchBlockSize()  argument
25 return (size_t) pool->scratchBlockSize(); in ScratchBlockSize()
31 static int block_count(const SkSBlockAllocator<N>& pool) { in block_count() argument
33 for (const Block* b : pool->blocks()) { in block_count()
41 static Block* get_block(SkSBlockAllocator<N>& pool, int blockIndex) { in get_block() argument
44 for (Block* b: pool->blocks()) { in get_block()
60 static size_t total_size(SkSBlockAllocator<N>& pool) { in total_size() argument
61 return pool->totalSize() - BlockAllocatorTestAccess::ScratchBlockSize(pool); in total_size()
65 static size_t add_block(SkSBlockAllocator<N>& pool) { in add_block() argument
66 size_t currentSize = total_size(pool); in add_block()
67 SkBlockAllocator::Block* current = pool->currentBlock(); in add_block()
68 while(pool->currentBlock() == current) { in add_block()
69 pool->template allocate<4>(pool->preallocSize() / 2); in add_block()
71 return total_size(pool) - currentSize; in add_block()
75 static void* alloc_byte(SkSBlockAllocator<N>& pool) { in alloc_byte() argument
76 auto br = pool->template allocate<1>(1); in alloc_byte()
107 SkSBlockAllocator<1024> pool{}; in DEF_TEST() local
108 SkDEBUGCODE(pool->validate();) in DEF_TEST()
123 REPORTER_ASSERT(r, pool->currentBlock() == br.fBlock); in DEF_TEST()
137 auto p1 = pool->allocate<1>(14); in DEF_TEST()
140 auto p2 = pool->allocate<2>(24); in DEF_TEST()
143 auto p4 = pool->allocate<4>(28); in DEF_TEST()
146 auto p8 = pool->allocate<8>(40); in DEF_TEST()
149 auto p16 = pool->allocate<16>(64); in DEF_TEST()
152 auto p32 = pool->allocate<32>(96); in DEF_TEST()
156 REPORTER_ASSERT(r, total_size(pool) == pool->preallocSize()); in DEF_TEST()
157 SkDEBUGCODE(pool->validate();) in DEF_TEST()
160 size_t avail = pool->currentBlock()->avail<4>(); in DEF_TEST()
161 auto pAvail = pool->allocate<4>(avail); in DEF_TEST()
166 REPORTER_ASSERT(r, pool->currentBlock()->avail<4>() < 4); in DEF_TEST()
167 auto pNextBlock = pool->allocate<4>(4); in DEF_TEST()
169 REPORTER_ASSERT(r, total_size(pool) > pool->preallocSize()); in DEF_TEST()
172 size_t currentSize = total_size(pool); in DEF_TEST()
173 size_t bigRequest = pool->currentBlock()->avail<4>() * 2; in DEF_TEST()
174 auto pTooBig = pool->allocate<4>(bigRequest); in DEF_TEST()
176 REPORTER_ASSERT(r, total_size(pool) > currentSize); in DEF_TEST()
179 REPORTER_ASSERT(r, total_size(pool) - currentSize < 4096); in DEF_TEST()
180 currentSize = total_size(pool); in DEF_TEST()
181 auto pReallyTooBig = pool->allocate<4>(4096); in DEF_TEST()
183 REPORTER_ASSERT(r, total_size(pool) >= currentSize + 4096); in DEF_TEST()
184 SkDEBUGCODE(pool->validate();) in DEF_TEST()
188 SkSBlockAllocator<1024> pool{}; in DEF_TEST() local
189 SkDEBUGCODE(pool->validate();) in DEF_TEST()
192 SkBlockAllocator::ByteRange p = pool->allocate<4>(16); in DEF_TEST()
200 auto pNext = pool->allocate<4>(16); in DEF_TEST()
226 pNext = pool->allocate<4>(16); in DEF_TEST()
229 SkDEBUGCODE(pool->validate();) in DEF_TEST()
241 SkSBlockAllocator<1024> pool{}; in DEF_TEST() local
242 SkDEBUGCODE(pool->validate();) in DEF_TEST()
245 auto p = pool->allocate<8>(32); in DEF_TEST()
246 REPORTER_ASSERT(r, pool->currentBlock()->release(p.fStart, p.fEnd)); in DEF_TEST()
248 auto p2 = pool->allocate<8>(32); in DEF_TEST()
252 auto p3 = pool->allocate<8>(64); in DEF_TEST()
258 auto p4 = pool->allocate<8>(16); in DEF_TEST()
259 auto p5 = pool->allocate<8>(96); in DEF_TEST()
265 p = pool->allocate<8>(32); in DEF_TEST()
269 SkDEBUGCODE(pool->validate();) in DEF_TEST()
275 SkSBlockAllocator<1024> pool{}; in DEF_TEST() local
276 SkDEBUGCODE(pool->validate();) in DEF_TEST()
281 ptrs.push_back(pool->allocate<4>(16)); in DEF_TEST()
285 SkDEBUGCODE(pool->validate();) in DEF_TEST()
293 SkDEBUGCODE(pool->validate();) in DEF_TEST()
294 REPORTER_ASSERT(r, pool->allocate<4>(16).fStart == ptrs[0].fStart); in DEF_TEST()
312 SkSBlockAllocator<kInitSize> pool{(GrowthPolicy) gp}; in DEF_TEST() local
313 SkDEBUGCODE(pool->validate();) in DEF_TEST()
315 REPORTER_ASSERT(r, kExpectedSizes[gp][0] == total_size(pool)); in DEF_TEST()
317 REPORTER_ASSERT(r, kExpectedSizes[gp][i] == add_block(pool)); in DEF_TEST()
320 SkDEBUGCODE(pool->validate();) in DEF_TEST()
327 SkSBlockAllocator<kBlockIncrement> pool{GrowthPolicy::kLinear}; in DEF_TEST() local
328 SkDEBUGCODE(pool->validate();) in DEF_TEST()
330 void* firstAlloc = alloc_byte(pool); in DEF_TEST()
333 add_block(pool); in DEF_TEST()
334 add_block(pool); in DEF_TEST()
335 add_block(pool); in DEF_TEST()
336 SkDEBUGCODE(pool->validate();) in DEF_TEST()
338 REPORTER_ASSERT(r, block_count(pool) == 4); // 3 added plus the implicit head in DEF_TEST()
340 get_block(pool, 0)->setMetadata(2); in DEF_TEST()
344 pool->reset(); in DEF_TEST()
345 SkDEBUGCODE(pool->validate();) in DEF_TEST()
347 REPORTER_ASSERT(r,block_count(pool) == 1); in DEF_TEST()
348 REPORTER_ASSERT(r, pool->preallocSize() == pool->totalSize()); in DEF_TEST()
349 REPORTER_ASSERT(r, get_block(pool, 0)->metadata() == 0); in DEF_TEST()
351 REPORTER_ASSERT(r, firstAlloc == alloc_byte(pool)); in DEF_TEST()
352 REPORTER_ASSERT(r, 2 * kBlockIncrement == add_block(pool)); in DEF_TEST()
353 REPORTER_ASSERT(r, 3 * kBlockIncrement == add_block(pool)); in DEF_TEST()
354 SkDEBUGCODE(pool->validate();) in DEF_TEST()
361 SkSBlockAllocator<1024> pool{(GrowthPolicy) gp}; in DEF_TEST() local
362 SkDEBUGCODE(pool->validate();) in DEF_TEST()
364 void* firstAlloc = alloc_byte(pool); in DEF_TEST()
366 size_t b1Size = total_size(pool); in DEF_TEST()
367 size_t b2Size = add_block(pool); in DEF_TEST()
368 size_t b3Size = add_block(pool); in DEF_TEST()
369 size_t b4Size = add_block(pool); in DEF_TEST()
370 SkDEBUGCODE(pool->validate();) in DEF_TEST()
372 get_block(pool, 0)->setMetadata(1); in DEF_TEST()
373 get_block(pool, 1)->setMetadata(2); in DEF_TEST()
374 get_block(pool, 2)->setMetadata(3); in DEF_TEST()
375 get_block(pool, 3)->setMetadata(4); in DEF_TEST()
379 REPORTER_ASSERT(r, total_size(pool) == b1Size + b2Size + b3Size + b4Size); in DEF_TEST()
380 pool->releaseBlock(get_block(pool, 1)); in DEF_TEST()
381 REPORTER_ASSERT(r, block_count(pool) == 3); in DEF_TEST()
382 REPORTER_ASSERT(r, get_block(pool, 1)->metadata() == 3); in DEF_TEST()
383 REPORTER_ASSERT(r, total_size(pool) == b1Size + b3Size + b4Size); in DEF_TEST()
385 pool->releaseBlock(get_block(pool, 1)); in DEF_TEST()
386 REPORTER_ASSERT(r, block_count(pool) == 2); in DEF_TEST()
387 REPORTER_ASSERT(r, get_block(pool, 1)->metadata() == 4); in DEF_TEST()
388 REPORTER_ASSERT(r, total_size(pool) == b1Size + b4Size); in DEF_TEST()
390 pool->releaseBlock(get_block(pool, 1)); in DEF_TEST()
391 REPORTER_ASSERT(r, block_count(pool) == 1); in DEF_TEST()
392 REPORTER_ASSERT(r, total_size(pool) == b1Size); in DEF_TEST()
396 pool->resetScratchSpace(); in DEF_TEST()
397 size_t size = add_block(pool); in DEF_TEST()
399 pool->releaseBlock(get_block(pool, 1)); in DEF_TEST()
402 pool->releaseBlock(get_block(pool, 0)); in DEF_TEST()
403 REPORTER_ASSERT(r, total_size(pool) == pool->preallocSize()); in DEF_TEST()
404 REPORTER_ASSERT(r, block_count(pool) == 1); in DEF_TEST()
405 REPORTER_ASSERT(r, firstAlloc == alloc_byte(pool)); in DEF_TEST()
406 REPORTER_ASSERT(r, get_block(pool, 0)->metadata() == 0); // metadata reset too in DEF_TEST()
410 add_block(pool); in DEF_TEST()
411 add_block(pool); in DEF_TEST()
412 pool->releaseBlock(get_block(pool, 0)); in DEF_TEST()
413 REPORTER_ASSERT(r, block_count(pool) == 3); in DEF_TEST()
414 SkDEBUGCODE(pool->validate();) in DEF_TEST()
419 SkSBlockAllocator<256> pool; in DEF_TEST() local
421 pool->headBlock()->setMetadata(1); in DEF_TEST()
422 add_block(pool); in DEF_TEST()
423 add_block(pool); in DEF_TEST()
424 add_block(pool); in DEF_TEST()
428 for (auto* b : pool->blocks()) { in DEF_TEST()
429 pool->releaseBlock(b); in DEF_TEST()
433 // pool should have just the head block, but was reset in DEF_TEST()
434 REPORTER_ASSERT(r, pool->headBlock()->metadata() == 0); in DEF_TEST()
435 REPORTER_ASSERT(r, block_count(pool) == 1); in DEF_TEST()
438 pool->headBlock()->setMetadata(1); in DEF_TEST()
439 add_block(pool); in DEF_TEST()
440 add_block(pool); in DEF_TEST()
441 add_block(pool); in DEF_TEST()
445 for (auto* b : pool->rblocks()) { in DEF_TEST()
446 pool->releaseBlock(b); in DEF_TEST()
450 // pool should have just the head block, but was reset in DEF_TEST()
451 REPORTER_ASSERT(r, pool->headBlock()->metadata() == 0); in DEF_TEST()
452 REPORTER_ASSERT(r, block_count(pool) == 1); in DEF_TEST()
456 SkSBlockAllocator<256> pool; in DEF_TEST() local
458 size_t added = add_block(pool); in DEF_TEST()
459 REPORTER_ASSERT(r, BlockAllocatorTestAccess::ScratchBlockSize(pool) == 0); in DEF_TEST()
460 size_t total = pool->totalSize(); in DEF_TEST()
461 pool->releaseBlock(pool->currentBlock()); in DEF_TEST()
464 REPORTER_ASSERT(r, pool->totalSize() == total); in DEF_TEST()
465 REPORTER_ASSERT(r, BlockAllocatorTestAccess::ScratchBlockSize(pool) == added); in DEF_TEST()
468 pool->reset(); in DEF_TEST()
469 REPORTER_ASSERT(r, BlockAllocatorTestAccess::ScratchBlockSize(pool) == 0); in DEF_TEST()
472 size_t avail = pool->currentBlock()->avail(); in DEF_TEST()
474 pool->reserve(reserve); in DEF_TEST()
475 REPORTER_ASSERT(r, (size_t) pool->currentBlock()->avail() == avail); in DEF_TEST()
476 // And rounds up to the fixed size of this pool's growth policy in DEF_TEST()
477 REPORTER_ASSERT(r, BlockAllocatorTestAccess::ScratchBlockSize(pool) >= reserve && in DEF_TEST()
478 BlockAllocatorTestAccess::ScratchBlockSize(pool) % 256 == 0); in DEF_TEST()
481 size_t preAllocTotalSize = pool->totalSize(); in DEF_TEST()
482 pool->allocate<1>(avail + 1); in DEF_TEST()
483 REPORTER_ASSERT(r, BlockAllocatorTestAccess::ScratchBlockSize(pool) == 0); in DEF_TEST()
484 REPORTER_ASSERT(r, pool->totalSize() == preAllocTotalSize); in DEF_TEST()
488 pool->reserve(pool->currentBlock()->avail()); in DEF_TEST()
489 REPORTER_ASSERT(r, BlockAllocatorTestAccess::ScratchBlockSize(pool) == 0); in DEF_TEST()
492 pool->reserve(pool->currentBlock()->avail(), SkBlockAllocator::kIgnoreExistingBytes_Flag); in DEF_TEST()
493 REPORTER_ASSERT(r, BlockAllocatorTestAccess::ScratchBlockSize(pool) > 0); in DEF_TEST()
497 pool->resetScratchSpace(); in DEF_TEST()
498 pool->reserve(32, SkBlockAllocator::kIgnoreGrowthPolicy_Flag); in DEF_TEST()
499 REPORTER_ASSERT(r, BlockAllocatorTestAccess::ScratchBlockSize(pool) > 0 && in DEF_TEST()
500 BlockAllocatorTestAccess::ScratchBlockSize(pool) < 256); in DEF_TEST()
504 SkBlockAllocator::Block* oldTail = pool->currentBlock(); in DEF_TEST()
507 pool->reserve(scratchAvail); in DEF_TEST()
508 REPORTER_ASSERT(r, BlockAllocatorTestAccess::ScratchBlockSize(pool) >= scratchAvail); in DEF_TEST()
512 scratchAvail = BlockAllocatorTestAccess::ScratchBlockSize(pool); in DEF_TEST()
513 pool->allocate<1>(scratchAvail + 1); in DEF_TEST()
514 REPORTER_ASSERT(r, pool->currentBlock() != oldTail); in DEF_TEST()
515 REPORTER_ASSERT(r, BlockAllocatorTestAccess::ScratchBlockSize(pool) == scratchAvail); in DEF_TEST()
569 SkSBlockAllocator<1024> pool{}; in DEF_TEST() local
570 SkDEBUGCODE(pool->validate();) in DEF_TEST()
574 auto p1 = pool->allocate<16, sizeof(TestMeta)>(16); in DEF_TEST()
575 SkDEBUGCODE(pool->validate();) in DEF_TEST()
588 auto p2 = pool->allocate<alignof(TestMetaBig), sizeof(TestMetaBig)>(16); in DEF_TEST()
589 SkDEBUGCODE(pool->validate();) in DEF_TEST()
607 SkSBlockAllocator<256> pool{}; in DEF_TEST() local
608 SkDEBUGCODE(pool->validate();) in DEF_TEST()
610 REPORTER_ASSERT(r, pool->metadata() == 0); // initial value in DEF_TEST()
612 pool->setMetadata(4); in DEF_TEST()
613 REPORTER_ASSERT(r, pool->metadata() == 4); in DEF_TEST()
617 pool->releaseBlock(pool->headBlock()); in DEF_TEST()
618 REPORTER_ASSERT(r, pool->metadata() == 4); in DEF_TEST()
621 pool->reset(); in DEF_TEST()
622 REPORTER_ASSERT(r, pool->metadata() == 0); in DEF_TEST()
626 static void run_owning_block_test(skiatest::Reporter* r, SkBlockAllocator* pool) { in run_owning_block_test() argument
627 auto br = pool->allocate<Align, Padding>(1); in run_owning_block_test()
632 Block* block = pool->owningBlock<Align, Padding>(userPtr, br.fStart); in run_owning_block_test()
635 block = pool->owningBlock<Align>(metaPtr, br.fStart); in run_owning_block_test()
643 static void run_owning_block_tests(skiatest::Reporter* r, SkBlockAllocator* pool) { in run_owning_block_tests() argument
644 run_owning_block_test<1, Padding>(r, pool); in run_owning_block_tests()
645 run_owning_block_test<2, Padding>(r, pool); in run_owning_block_tests()
646 run_owning_block_test<4, Padding>(r, pool); in run_owning_block_tests()
647 run_owning_block_test<8, Padding>(r, pool); in run_owning_block_tests()
648 run_owning_block_test<16, Padding>(r, pool); in run_owning_block_tests()
649 run_owning_block_test<32, Padding>(r, pool); in run_owning_block_tests()
650 run_owning_block_test<64, Padding>(r, pool); in run_owning_block_tests()
651 run_owning_block_test<128, Padding>(r, pool); in run_owning_block_tests()
655 SkSBlockAllocator<1024> pool{}; in DEF_TEST() local
656 SkDEBUGCODE(pool->validate();) in DEF_TEST()
658 run_owning_block_tests<1>(r, pool.allocator()); in DEF_TEST()
659 run_owning_block_tests<2>(r, pool.allocator()); in DEF_TEST()
660 run_owning_block_tests<4>(r, pool.allocator()); in DEF_TEST()
661 run_owning_block_tests<8>(r, pool.allocator()); in DEF_TEST()
662 run_owning_block_tests<16>(r, pool.allocator()); in DEF_TEST()
663 run_owning_block_tests<32>(r, pool.allocator()); in DEF_TEST()
666 run_owning_block_tests<3>(r, pool.allocator()); in DEF_TEST()
667 run_owning_block_tests<9>(r, pool.allocator()); in DEF_TEST()
668 run_owning_block_tests<17>(r, pool.allocator()); in DEF_TEST()