Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(965)

Side by Side Diff: test/cctest/heap/test-heap.cc

Issue 2319683002: [heap] Fixes for heap testing (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/heap/heap.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 2338 matching lines...) Expand 10 before | Expand all | Expand 10 after
2349 PrintF("Heap::SizeOfObjects: %" V8PRIdPTR 2349 PrintF("Heap::SizeOfObjects: %" V8PRIdPTR
2350 ", " 2350 ", "
2351 "Iterator: %" V8PRIdPTR 2351 "Iterator: %" V8PRIdPTR
2352 ", " 2352 ", "
2353 "delta: %" V8PRIdPTR "\n", 2353 "delta: %" V8PRIdPTR "\n",
2354 size_of_objects_1, size_of_objects_2, delta); 2354 size_of_objects_1, size_of_objects_2, delta);
2355 CHECK_GT(size_of_objects_2 / 20, delta); 2355 CHECK_GT(size_of_objects_2 / 20, delta);
2356 } 2356 }
2357 } 2357 }
2358 2358
2359
2360 static void FillUpNewSpace(NewSpace* new_space) {
2361 // Fill up new space to the point that it is completely full. Make sure
2362 // that the scavenger does not undo the filling.
2363 Heap* heap = new_space->heap();
2364 Isolate* isolate = heap->isolate();
2365 Factory* factory = isolate->factory();
2366 HandleScope scope(isolate);
2367 AlwaysAllocateScope always_allocate(isolate);
2368 intptr_t available = new_space->Capacity() - new_space->Size();
2369 intptr_t number_of_fillers = (available / FixedArray::SizeFor(32)) - 1;
2370 for (intptr_t i = 0; i < number_of_fillers; i++) {
2371 CHECK(heap->InNewSpace(*factory->NewFixedArray(32, NOT_TENURED)));
2372 }
2373 }
2374
2375
2376 TEST(GrowAndShrinkNewSpace) { 2359 TEST(GrowAndShrinkNewSpace) {
2377 // Avoid shrinking new space in GC epilogue. This can happen if allocation 2360 // Avoid shrinking new space in GC epilogue. This can happen if allocation
2378 // throughput samples have been taken while executing the benchmark. 2361 // throughput samples have been taken while executing the benchmark.
2379 FLAG_predictable = true; 2362 FLAG_predictable = true;
2380 2363
2381 CcTest::InitializeVM(); 2364 CcTest::InitializeVM();
2382 Heap* heap = CcTest::heap(); 2365 Heap* heap = CcTest::heap();
2383 NewSpace* new_space = heap->new_space(); 2366 NewSpace* new_space = heap->new_space();
2384 2367
2385 if (heap->MaxSemiSpaceSize() == heap->InitialSemiSpaceSize()) { 2368 if (heap->MaxSemiSpaceSize() == heap->InitialSemiSpaceSize()) {
2386 return; 2369 return;
2387 } 2370 }
2388 2371
2389 // Explicitly growing should double the space capacity. 2372 // Explicitly growing should double the space capacity.
2390 intptr_t old_capacity, new_capacity; 2373 intptr_t old_capacity, new_capacity;
2391 old_capacity = new_space->TotalCapacity(); 2374 old_capacity = new_space->TotalCapacity();
2392 new_space->Grow(); 2375 new_space->Grow();
2393 new_capacity = new_space->TotalCapacity(); 2376 new_capacity = new_space->TotalCapacity();
2394 CHECK(2 * old_capacity == new_capacity); 2377 CHECK_EQ(2 * old_capacity, new_capacity);
2395 2378
2396 old_capacity = new_space->TotalCapacity(); 2379 old_capacity = new_space->TotalCapacity();
2397 FillUpNewSpace(new_space); 2380 {
2381 v8::HandleScope temporary_scope(CcTest::isolate());
2382 heap::SimulateFullSpace(new_space);
2383 }
2398 new_capacity = new_space->TotalCapacity(); 2384 new_capacity = new_space->TotalCapacity();
2399 CHECK(old_capacity == new_capacity); 2385 CHECK_EQ(old_capacity, new_capacity);
2400 2386
2401 // Explicitly shrinking should not affect space capacity. 2387 // Explicitly shrinking should not affect space capacity.
2402 old_capacity = new_space->TotalCapacity(); 2388 old_capacity = new_space->TotalCapacity();
2403 new_space->Shrink(); 2389 new_space->Shrink();
2404 new_capacity = new_space->TotalCapacity(); 2390 new_capacity = new_space->TotalCapacity();
2405 CHECK(old_capacity == new_capacity); 2391 CHECK_EQ(old_capacity, new_capacity);
2406 2392
2407 // Let the scavenger empty the new space. 2393 // Let the scavenger empty the new space.
2408 CcTest::CollectGarbage(NEW_SPACE); 2394 CcTest::CollectGarbage(NEW_SPACE);
2409 CHECK_LE(new_space->Size(), old_capacity); 2395 CHECK_LE(new_space->Size(), old_capacity);
2410 2396
2411 // Explicitly shrinking should halve the space capacity. 2397 // Explicitly shrinking should halve the space capacity.
2412 old_capacity = new_space->TotalCapacity(); 2398 old_capacity = new_space->TotalCapacity();
2413 new_space->Shrink(); 2399 new_space->Shrink();
2414 new_capacity = new_space->TotalCapacity(); 2400 new_capacity = new_space->TotalCapacity();
2415 CHECK(old_capacity == 2 * new_capacity); 2401 CHECK_EQ(old_capacity, 2 * new_capacity);
2416 2402
2417 // Consecutive shrinking should not affect space capacity. 2403 // Consecutive shrinking should not affect space capacity.
2418 old_capacity = new_space->TotalCapacity(); 2404 old_capacity = new_space->TotalCapacity();
2419 new_space->Shrink(); 2405 new_space->Shrink();
2420 new_space->Shrink(); 2406 new_space->Shrink();
2421 new_space->Shrink(); 2407 new_space->Shrink();
2422 new_capacity = new_space->TotalCapacity(); 2408 new_capacity = new_space->TotalCapacity();
2423 CHECK(old_capacity == new_capacity); 2409 CHECK_EQ(old_capacity, new_capacity);
2424 } 2410 }
2425 2411
2426
2427 TEST(CollectingAllAvailableGarbageShrinksNewSpace) { 2412 TEST(CollectingAllAvailableGarbageShrinksNewSpace) {
2428 CcTest::InitializeVM(); 2413 CcTest::InitializeVM();
2429 Heap* heap = CcTest::heap(); 2414 Heap* heap = CcTest::heap();
2430 if (heap->MaxSemiSpaceSize() == heap->InitialSemiSpaceSize()) { 2415 if (heap->MaxSemiSpaceSize() == heap->InitialSemiSpaceSize()) {
2431 return; 2416 return;
2432 } 2417 }
2433 2418
2434 v8::HandleScope scope(CcTest::isolate()); 2419 v8::HandleScope scope(CcTest::isolate());
2435 NewSpace* new_space = heap->new_space(); 2420 NewSpace* new_space = heap->new_space();
2436 intptr_t old_capacity, new_capacity; 2421 intptr_t old_capacity, new_capacity;
2437 old_capacity = new_space->TotalCapacity(); 2422 old_capacity = new_space->TotalCapacity();
2438 new_space->Grow(); 2423 new_space->Grow();
2439 new_capacity = new_space->TotalCapacity(); 2424 new_capacity = new_space->TotalCapacity();
2440 CHECK(2 * old_capacity == new_capacity); 2425 CHECK_EQ(2 * old_capacity, new_capacity);
2441 FillUpNewSpace(new_space); 2426 {
2427 v8::HandleScope temporary_scope(CcTest::isolate());
2428 heap::SimulateFullSpace(new_space);
2429 }
2442 CcTest::CollectAllAvailableGarbage(); 2430 CcTest::CollectAllAvailableGarbage();
2443 new_capacity = new_space->TotalCapacity(); 2431 new_capacity = new_space->TotalCapacity();
2444 CHECK(old_capacity == new_capacity); 2432 CHECK_EQ(old_capacity, new_capacity);
2445 } 2433 }
2446 2434
2447
2448 static int NumberOfGlobalObjects() { 2435 static int NumberOfGlobalObjects() {
2449 int count = 0; 2436 int count = 0;
2450 HeapIterator iterator(CcTest::heap()); 2437 HeapIterator iterator(CcTest::heap());
2451 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { 2438 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
2452 if (obj->IsJSGlobalObject()) count++; 2439 if (obj->IsJSGlobalObject()) count++;
2453 } 2440 }
2454 return count; 2441 return count;
2455 } 2442 }
2456 2443
2457 2444
(...skipping 4660 matching lines...) Expand 10 before | Expand all | Expand 10 after
7118 chunk, chunk->area_end() - kPointerSize, chunk->area_end()); 7105 chunk, chunk->area_end() - kPointerSize, chunk->area_end());
7119 slots[chunk->area_end() - kPointerSize] = false; 7106 slots[chunk->area_end() - kPointerSize] = false;
7120 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) { 7107 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) {
7121 CHECK(slots[addr]); 7108 CHECK(slots[addr]);
7122 return KEEP_SLOT; 7109 return KEEP_SLOT;
7123 }); 7110 });
7124 } 7111 }
7125 7112
7126 } // namespace internal 7113 } // namespace internal
7127 } // namespace v8 7114 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698