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

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

Issue 2504193002: [heap] Simplify adjusting of live bytes. (Closed)
Patch Set: fix test Created 4 years, 1 month 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 | « test/cctest/heap/heap-tester.h ('k') | test/cctest/heap/test-spaces.cc » ('j') | 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 5945 matching lines...) Expand 10 before | Expand all | Expand 10 after
5956 int initial_length, 5956 int initial_length,
5957 int elements_to_trim) { 5957 int elements_to_trim) {
5958 v8::HandleScope scope(CcTest::isolate()); 5958 v8::HandleScope scope(CcTest::isolate());
5959 Isolate* isolate = CcTest::i_isolate(); 5959 Isolate* isolate = CcTest::i_isolate();
5960 Factory* factory = isolate->factory(); 5960 Factory* factory = isolate->factory();
5961 Heap* heap = isolate->heap(); 5961 Heap* heap = isolate->heap();
5962 5962
5963 Handle<FixedTypedArrayBase> array = 5963 Handle<FixedTypedArrayBase> array =
5964 factory->NewFixedTypedArray(initial_length, type, true); 5964 factory->NewFixedTypedArray(initial_length, type, true);
5965 int old_size = array->size(); 5965 int old_size = array->size();
5966 heap->RightTrimFixedArray<Heap::CONCURRENT_TO_SWEEPER>(*array, 5966 heap->RightTrimFixedArray(*array, elements_to_trim);
5967 elements_to_trim);
5968 5967
5969 // Check that free space filler is at the right place and did not smash the 5968 // Check that free space filler is at the right place and did not smash the
5970 // array header. 5969 // array header.
5971 CHECK(array->IsFixedArrayBase()); 5970 CHECK(array->IsFixedArrayBase());
5972 CHECK_EQ(initial_length - elements_to_trim, array->length()); 5971 CHECK_EQ(initial_length - elements_to_trim, array->length());
5973 int new_size = array->size(); 5972 int new_size = array->size();
5974 if (new_size != old_size) { 5973 if (new_size != old_size) {
5975 // Free space filler should be created in this case. 5974 // Free space filler should be created in this case.
5976 Address next_obj_address = array->address() + array->size(); 5975 Address next_obj_address = array->address() + array->size();
5977 CHECK(HeapObject::FromAddress(next_obj_address)->IsFiller()); 5976 CHECK(HeapObject::FromAddress(next_obj_address)->IsFiller());
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
6442 (kMaxRegularHeapObjectSize - FixedArray::kHeaderSize) / kPointerSize; 6441 (kMaxRegularHeapObjectSize - FixedArray::kHeaderSize) / kPointerSize;
6443 Handle<FixedArray> array = factory->NewFixedArray(N, TENURED); 6442 Handle<FixedArray> array = factory->NewFixedArray(N, TENURED);
6444 CHECK(heap->old_space()->Contains(*array)); 6443 CHECK(heap->old_space()->Contains(*array));
6445 Handle<Object> number = factory->NewHeapNumber(1.0); 6444 Handle<Object> number = factory->NewHeapNumber(1.0);
6446 CHECK(heap->InNewSpace(*number)); 6445 CHECK(heap->InNewSpace(*number));
6447 for (int i = 0; i < N; i++) { 6446 for (int i = 0; i < N; i++) {
6448 array->set(i, *number); 6447 array->set(i, *number);
6449 } 6448 }
6450 CcTest::CollectGarbage(OLD_SPACE); 6449 CcTest::CollectGarbage(OLD_SPACE);
6451 heap::SimulateFullSpace(heap->old_space()); 6450 heap::SimulateFullSpace(heap->old_space());
6452 heap->RightTrimFixedArray<Heap::CONCURRENT_TO_SWEEPER>(*array, N - 1); 6451 heap->RightTrimFixedArray(*array, N - 1);
6453 heap->mark_compact_collector()->EnsureSweepingCompleted(); 6452 heap->mark_compact_collector()->EnsureSweepingCompleted();
6454 ByteArray* byte_array; 6453 ByteArray* byte_array;
6455 const int M = 256; 6454 const int M = 256;
6456 // Don't allow old space expansion. The test works without this flag too, 6455 // Don't allow old space expansion. The test works without this flag too,
6457 // but becomes very slow. 6456 // but becomes very slow.
6458 heap->set_force_oom(true); 6457 heap->set_force_oom(true);
6459 while (heap->AllocateByteArray(M, TENURED).To(&byte_array)) { 6458 while (heap->AllocateByteArray(M, TENURED).To(&byte_array)) {
6460 for (int j = 0; j < M; j++) { 6459 for (int j = 0; j < M; j++) {
6461 byte_array->set(j, 0x31); 6460 byte_array->set(j, 0x31);
6462 } 6461 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
6526 // slots are recorded for them. 6525 // slots are recorded for them.
6527 for (size_t j = 0; j < arrays.size(); j++) { 6526 for (size_t j = 0; j < arrays.size(); j++) {
6528 array = arrays[j]; 6527 array = arrays[j];
6529 for (int i = 0; i < N; i++) { 6528 for (int i = 0; i < N; i++) {
6530 array->set(i, *ec_obj); 6529 array->set(i, *ec_obj);
6531 } 6530 }
6532 } 6531 }
6533 } 6532 }
6534 heap::SimulateIncrementalMarking(heap); 6533 heap::SimulateIncrementalMarking(heap);
6535 for (size_t j = 0; j < arrays.size(); j++) { 6534 for (size_t j = 0; j < arrays.size(); j++) {
6536 heap->RightTrimFixedArray<Heap::CONCURRENT_TO_SWEEPER>(arrays[j], N - 1); 6535 heap->RightTrimFixedArray(arrays[j], N - 1);
6537 } 6536 }
6538 } 6537 }
6539 // Force allocation from the free list. 6538 // Force allocation from the free list.
6540 heap->set_force_oom(true); 6539 heap->set_force_oom(true);
6541 CcTest::CollectGarbage(OLD_SPACE); 6540 CcTest::CollectGarbage(OLD_SPACE);
6542 } 6541 }
6543 6542
6544 TEST(Regress598319) { 6543 TEST(Regress598319) {
6545 // This test ensures that no white objects can cross the progress bar of large 6544 // This test ensures that no white objects can cross the progress bar of large
6546 // objects during incremental marking. It checks this by using Shift() during 6545 // objects during incremental marking. It checks this by using Shift() during
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
6891 Address end_address = start_address + array->Size(); 6890 Address end_address = start_address + array->Size();
6892 Page* page = Page::FromAddress(start_address); 6891 Page* page = Page::FromAddress(start_address);
6893 CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(*array))); 6892 CHECK(Marking::IsBlack(ObjectMarking::MarkBitFrom(*array)));
6894 CHECK(page->markbits()->AllBitsSetInRange( 6893 CHECK(page->markbits()->AllBitsSetInRange(
6895 page->AddressToMarkbitIndex(start_address), 6894 page->AddressToMarkbitIndex(start_address),
6896 page->AddressToMarkbitIndex(end_address))); 6895 page->AddressToMarkbitIndex(end_address)));
6897 CHECK(heap->old_space()->Contains(*array)); 6896 CHECK(heap->old_space()->Contains(*array));
6898 6897
6899 // Trim it once by one word to make checking for white marking color uniform. 6898 // Trim it once by one word to make checking for white marking color uniform.
6900 Address previous = end_address - kPointerSize; 6899 Address previous = end_address - kPointerSize;
6901 heap->RightTrimFixedArray<Heap::SEQUENTIAL_TO_SWEEPER>(*array, 1); 6900 heap->RightTrimFixedArray(*array, 1);
6902 HeapObject* filler = HeapObject::FromAddress(previous); 6901 HeapObject* filler = HeapObject::FromAddress(previous);
6903 CHECK(filler->IsFiller()); 6902 CHECK(filler->IsFiller());
6904 CHECK(Marking::IsImpossible(ObjectMarking::MarkBitFrom(previous))); 6903 CHECK(Marking::IsImpossible(ObjectMarking::MarkBitFrom(previous)));
6905 6904
6906 // Trim 10 times by one, two, and three word. 6905 // Trim 10 times by one, two, and three word.
6907 for (int i = 1; i <= 3; i++) { 6906 for (int i = 1; i <= 3; i++) {
6908 for (int j = 0; j < 10; j++) { 6907 for (int j = 0; j < 10; j++) {
6909 previous -= kPointerSize * i; 6908 previous -= kPointerSize * i;
6910 heap->RightTrimFixedArray<Heap::SEQUENTIAL_TO_SWEEPER>(*array, i); 6909 heap->RightTrimFixedArray(*array, i);
6911 HeapObject* filler = HeapObject::FromAddress(previous); 6910 HeapObject* filler = HeapObject::FromAddress(previous);
6912 CHECK(filler->IsFiller()); 6911 CHECK(filler->IsFiller());
6913 CHECK(Marking::IsWhite(ObjectMarking::MarkBitFrom(previous))); 6912 CHECK(Marking::IsWhite(ObjectMarking::MarkBitFrom(previous)));
6914 } 6913 }
6915 } 6914 }
6916 6915
6917 heap::GcAndSweep(heap, OLD_SPACE); 6916 heap::GcAndSweep(heap, OLD_SPACE);
6918 } 6917 }
6919 6918
6920 TEST(Regress618958) { 6919 TEST(Regress618958) {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
7020 SlotSet::FREE_EMPTY_BUCKETS); 7019 SlotSet::FREE_EMPTY_BUCKETS);
7021 slots[chunk->area_end() - kPointerSize] = false; 7020 slots[chunk->area_end() - kPointerSize] = false;
7022 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) { 7021 RememberedSet<OLD_TO_NEW>::Iterate(chunk, [&slots](Address addr) {
7023 CHECK(slots[addr]); 7022 CHECK(slots[addr]);
7024 return KEEP_SLOT; 7023 return KEEP_SLOT;
7025 }); 7024 });
7026 } 7025 }
7027 7026
7028 } // namespace internal 7027 } // namespace internal
7029 } // namespace v8 7028 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/heap/heap-tester.h ('k') | test/cctest/heap/test-spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698