| Index: test/cctest/test-alloc.cc
|
| ===================================================================
|
| --- test/cctest/test-alloc.cc (revision 3005)
|
| +++ test/cctest/test-alloc.cc (working copy)
|
| @@ -144,65 +144,3 @@
|
| CHECK_EQ(42, result->Int32Value());
|
| env->Exit();
|
| }
|
| -
|
| -
|
| -// CodeRange test.
|
| -// Tests memory management in a CodeRange by allocating and freeing blocks,
|
| -// using a pseudorandom generator to choose block sizes geometrically
|
| -// distributed between 2 * Page::kPageSize and 2^5 + 1 * Page::kPageSize.
|
| -// Ensure that the freed chunks are collected and reused by allocating (in
|
| -// total) more than the size of the CodeRange.
|
| -
|
| -// This pseudorandom generator does not need to be particularly good.
|
| -// Use the lower half of the V8::Random() generator.
|
| -unsigned int Pseudorandom() {
|
| - static uint32_t lo = 2345;
|
| - lo = 18273 * (lo & 0xFFFF) + (lo >> 16); // Provably not 0.
|
| - return lo & 0xFFFF;
|
| -}
|
| -
|
| -
|
| -// Plain old data class. Represents a block of allocated memory.
|
| -class Block {
|
| - public:
|
| - Block(void* base_arg, int size_arg)
|
| - : base(base_arg), size(size_arg) {}
|
| -
|
| - void *base;
|
| - int size;
|
| -};
|
| -
|
| -
|
| -TEST(CodeRange) {
|
| - const int code_range_size = 16*MB;
|
| - CodeRange::Setup(code_range_size);
|
| - int current_allocated = 0;
|
| - int total_allocated = 0;
|
| - List<Block> blocks(1000);
|
| -
|
| - while (total_allocated < 5 * code_range_size) {
|
| - if (current_allocated < code_range_size / 10) {
|
| - // Allocate a block.
|
| - // Geometrically distributed sizes, greater than Page::kPageSize.
|
| - size_t requested = (Page::kPageSize << (Pseudorandom() % 6)) +
|
| - Pseudorandom() % 5000 + 1;
|
| - size_t allocated = 0;
|
| - void* base = CodeRange::AllocateRawMemory(requested, &allocated);
|
| - blocks.Add(Block(base, allocated));
|
| - current_allocated += allocated;
|
| - total_allocated += allocated;
|
| - } else {
|
| - // Free a block.
|
| - int index = Pseudorandom() % blocks.length();
|
| - CodeRange::FreeRawMemory(blocks[index].base, blocks[index].size);
|
| - current_allocated -= blocks[index].size;
|
| - if (index < blocks.length() - 1) {
|
| - blocks[index] = blocks.RemoveLast();
|
| - } else {
|
| - blocks.RemoveLast();
|
| - }
|
| - }
|
| - }
|
| -
|
| - CodeRange::TearDown();
|
| -}
|
|
|