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

Side by Side Diff: src/heap/spaces.cc

Issue 1614953002: [heap] Cleanup: Remove WAS_SWEPT flag. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments Created 4 years, 11 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/spaces.h ('k') | src/heap/store-buffer.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/heap/spaces.h" 5 #include "src/heap/spaces.h"
6 6
7 #include "src/base/bits.h" 7 #include "src/base/bits.h"
8 #include "src/base/platform/platform.h" 8 #include "src/base/platform/platform.h"
9 #include "src/full-codegen/full-codegen.h" 9 #include "src/full-codegen/full-codegen.h"
10 #include "src/heap/slots-buffer.h" 10 #include "src/heap/slots-buffer.h"
(...skipping 17 matching lines...) Expand all
28 } 28 }
29 29
30 30
31 HeapObjectIterator::HeapObjectIterator(Page* page) { 31 HeapObjectIterator::HeapObjectIterator(Page* page) {
32 Space* owner = page->owner(); 32 Space* owner = page->owner();
33 DCHECK(owner == page->heap()->old_space() || 33 DCHECK(owner == page->heap()->old_space() ||
34 owner == page->heap()->map_space() || 34 owner == page->heap()->map_space() ||
35 owner == page->heap()->code_space()); 35 owner == page->heap()->code_space());
36 Initialize(reinterpret_cast<PagedSpace*>(owner), page->area_start(), 36 Initialize(reinterpret_cast<PagedSpace*>(owner), page->area_start(),
37 page->area_end(), kOnePageOnly); 37 page->area_end(), kOnePageOnly);
38 DCHECK(page->WasSwept() || page->SweepingCompleted()); 38 DCHECK(page->SweepingDone());
39 } 39 }
40 40
41 41
42 void HeapObjectIterator::Initialize(PagedSpace* space, Address cur, Address end, 42 void HeapObjectIterator::Initialize(PagedSpace* space, Address cur, Address end,
43 HeapObjectIterator::PageMode mode) { 43 HeapObjectIterator::PageMode mode) {
44 space_ = space; 44 space_ = space;
45 cur_addr_ = cur; 45 cur_addr_ = cur;
46 cur_end_ = end; 46 cur_end_ = end;
47 page_mode_ = mode; 47 page_mode_ = mode;
48 } 48 }
(...skipping 10 matching lines...) Expand all
59 } else { 59 } else {
60 cur_page = Page::FromAddress(cur_addr_ - 1); 60 cur_page = Page::FromAddress(cur_addr_ - 1);
61 DCHECK(cur_addr_ == cur_page->area_end()); 61 DCHECK(cur_addr_ == cur_page->area_end());
62 } 62 }
63 cur_page = cur_page->next_page(); 63 cur_page = cur_page->next_page();
64 if (cur_page == space_->anchor()) return false; 64 if (cur_page == space_->anchor()) return false;
65 cur_page->heap()->mark_compact_collector()->SweepOrWaitUntilSweepingCompleted( 65 cur_page->heap()->mark_compact_collector()->SweepOrWaitUntilSweepingCompleted(
66 cur_page); 66 cur_page);
67 cur_addr_ = cur_page->area_start(); 67 cur_addr_ = cur_page->area_start();
68 cur_end_ = cur_page->area_end(); 68 cur_end_ = cur_page->area_end();
69 DCHECK(cur_page->WasSwept() || cur_page->SweepingCompleted()); 69 DCHECK(cur_page->SweepingDone());
70 return true; 70 return true;
71 } 71 }
72 72
73 73
74 // ----------------------------------------------------------------------------- 74 // -----------------------------------------------------------------------------
75 // CodeRange 75 // CodeRange
76 76
77 77
78 CodeRange::CodeRange(Isolate* isolate) 78 CodeRange::CodeRange(Isolate* isolate)
79 : isolate_(isolate), 79 : isolate_(isolate),
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 chunk->area_start_ = area_start; 462 chunk->area_start_ = area_start;
463 chunk->area_end_ = area_end; 463 chunk->area_end_ = area_end;
464 chunk->flags_ = 0; 464 chunk->flags_ = 0;
465 chunk->set_owner(owner); 465 chunk->set_owner(owner);
466 chunk->InitializeReservedMemory(); 466 chunk->InitializeReservedMemory();
467 chunk->slots_buffer_ = NULL; 467 chunk->slots_buffer_ = NULL;
468 chunk->skip_list_ = NULL; 468 chunk->skip_list_ = NULL;
469 chunk->write_barrier_counter_ = kWriteBarrierCounterGranularity; 469 chunk->write_barrier_counter_ = kWriteBarrierCounterGranularity;
470 chunk->progress_bar_ = 0; 470 chunk->progress_bar_ = 0;
471 chunk->high_water_mark_.SetValue(static_cast<intptr_t>(area_start - base)); 471 chunk->high_water_mark_.SetValue(static_cast<intptr_t>(area_start - base));
472 chunk->parallel_sweeping_state().SetValue(kSweepingDone); 472 chunk->concurrent_sweeping_state().SetValue(kSweepingDone);
473 chunk->parallel_compaction_state().SetValue(kCompactingDone); 473 chunk->parallel_compaction_state().SetValue(kCompactingDone);
474 chunk->mutex_ = NULL; 474 chunk->mutex_ = NULL;
475 chunk->available_in_small_free_list_ = 0; 475 chunk->available_in_small_free_list_ = 0;
476 chunk->available_in_medium_free_list_ = 0; 476 chunk->available_in_medium_free_list_ = 0;
477 chunk->available_in_large_free_list_ = 0; 477 chunk->available_in_large_free_list_ = 0;
478 chunk->available_in_huge_free_list_ = 0; 478 chunk->available_in_huge_free_list_ = 0;
479 chunk->non_available_small_blocks_ = 0; 479 chunk->non_available_small_blocks_ = 0;
480 chunk->ResetLiveBytes(); 480 chunk->ResetLiveBytes();
481 Bitmap::Clear(chunk); 481 Bitmap::Clear(chunk);
482 chunk->initialize_scan_on_scavenge(false); 482 chunk->initialize_scan_on_scavenge(false);
483 chunk->SetFlag(WAS_SWEPT);
484 chunk->set_next_chunk(nullptr); 483 chunk->set_next_chunk(nullptr);
485 chunk->set_prev_chunk(nullptr); 484 chunk->set_prev_chunk(nullptr);
486 485
487 DCHECK(OFFSET_OF(MemoryChunk, flags_) == kFlagsOffset); 486 DCHECK(OFFSET_OF(MemoryChunk, flags_) == kFlagsOffset);
488 DCHECK(OFFSET_OF(MemoryChunk, live_byte_count_) == kLiveBytesOffset); 487 DCHECK(OFFSET_OF(MemoryChunk, live_byte_count_) == kLiveBytesOffset);
489 488
490 if (executable == EXECUTABLE) { 489 if (executable == EXECUTABLE) {
491 chunk->SetFlag(IS_EXECUTABLE); 490 chunk->SetFlag(IS_EXECUTABLE);
492 } 491 }
493 492
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
916 } 915 }
917 return false; 916 return false;
918 } 917 }
919 918
920 919
921 // ----------------------------------------------------------------------------- 920 // -----------------------------------------------------------------------------
922 // MemoryChunk implementation 921 // MemoryChunk implementation
923 922
924 void MemoryChunk::IncrementLiveBytesFromMutator(HeapObject* object, int by) { 923 void MemoryChunk::IncrementLiveBytesFromMutator(HeapObject* object, int by) {
925 MemoryChunk* chunk = MemoryChunk::FromAddress(object->address()); 924 MemoryChunk* chunk = MemoryChunk::FromAddress(object->address());
926 if (!chunk->InNewSpace() && !static_cast<Page*>(chunk)->WasSwept()) { 925 if (!chunk->InNewSpace() && !static_cast<Page*>(chunk)->SweepingDone()) {
927 static_cast<PagedSpace*>(chunk->owner())->Allocate(by); 926 static_cast<PagedSpace*>(chunk->owner())->Allocate(by);
928 } 927 }
929 chunk->IncrementLiveBytes(by); 928 chunk->IncrementLiveBytes(by);
930 } 929 }
931 930
932 931
933 void MemoryChunk::ReleaseAllocatedMemory() { 932 void MemoryChunk::ReleaseAllocatedMemory() {
934 delete slots_buffer_; 933 delete slots_buffer_;
935 delete skip_list_; 934 delete skip_list_;
936 delete mutex_; 935 delete mutex_;
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 page->ResetFreeListStatistics(); 1217 page->ResetFreeListStatistics();
1219 } 1218 }
1220 } 1219 }
1221 1220
1222 1221
1223 void PagedSpace::IncreaseCapacity(int size) { 1222 void PagedSpace::IncreaseCapacity(int size) {
1224 accounting_stats_.ExpandSpace(size); 1223 accounting_stats_.ExpandSpace(size);
1225 } 1224 }
1226 1225
1227 1226
1228 void PagedSpace::ReleasePage(Page* page) { 1227 void PagedSpace::ReleasePage(Page* page, bool evict_free_list_items) {
1229 DCHECK(page->LiveBytes() == 0); 1228 DCHECK(page->LiveBytes() == 0);
1230 DCHECK(AreaSize() == page->area_size()); 1229 DCHECK(AreaSize() == page->area_size());
1231 1230
1232 if (page->WasSwept()) { 1231 if (evict_free_list_items) {
1233 intptr_t size = free_list_.EvictFreeListItems(page); 1232 intptr_t size = free_list_.EvictFreeListItems(page);
1234 accounting_stats_.AllocateBytes(size); 1233 accounting_stats_.AllocateBytes(size);
1235 DCHECK_EQ(AreaSize(), static_cast<int>(size)); 1234 DCHECK_EQ(AreaSize(), static_cast<int>(size));
1236 } 1235 }
1237 1236
1238 if (page->IsFlagSet(MemoryChunk::SCAN_ON_SCAVENGE)) { 1237 if (page->IsFlagSet(MemoryChunk::SCAN_ON_SCAVENGE)) {
1239 heap()->decrement_scan_on_scavenge_pages(); 1238 heap()->decrement_scan_on_scavenge_pages();
1240 page->ClearFlag(MemoryChunk::SCAN_ON_SCAVENGE); 1239 page->ClearFlag(MemoryChunk::SCAN_ON_SCAVENGE);
1241 } 1240 }
1242 1241
(...skipping 25 matching lines...) Expand all
1268 void PagedSpace::Verify(ObjectVisitor* visitor) { 1267 void PagedSpace::Verify(ObjectVisitor* visitor) {
1269 bool allocation_pointer_found_in_space = 1268 bool allocation_pointer_found_in_space =
1270 (allocation_info_.top() == allocation_info_.limit()); 1269 (allocation_info_.top() == allocation_info_.limit());
1271 PageIterator page_iterator(this); 1270 PageIterator page_iterator(this);
1272 while (page_iterator.has_next()) { 1271 while (page_iterator.has_next()) {
1273 Page* page = page_iterator.next(); 1272 Page* page = page_iterator.next();
1274 CHECK(page->owner() == this); 1273 CHECK(page->owner() == this);
1275 if (page == Page::FromAllocationTop(allocation_info_.top())) { 1274 if (page == Page::FromAllocationTop(allocation_info_.top())) {
1276 allocation_pointer_found_in_space = true; 1275 allocation_pointer_found_in_space = true;
1277 } 1276 }
1278 CHECK(page->WasSwept()); 1277 CHECK(page->SweepingDone());
1279 HeapObjectIterator it(page); 1278 HeapObjectIterator it(page);
1280 Address end_of_previous_object = page->area_start(); 1279 Address end_of_previous_object = page->area_start();
1281 Address top = page->area_end(); 1280 Address top = page->area_end();
1282 int black_size = 0; 1281 int black_size = 0;
1283 for (HeapObject* object = it.Next(); object != NULL; object = it.Next()) { 1282 for (HeapObject* object = it.Next(); object != NULL; object = it.Next()) {
1284 CHECK(end_of_previous_object <= object->address()); 1283 CHECK(end_of_previous_object <= object->address());
1285 1284
1286 // The first word should be a map, and we expect all map pointers to 1285 // The first word should be a map, and we expect all map pointers to
1287 // be in map space. 1286 // be in map space.
1288 Map* map = object->map(); 1287 Map* map = object->map();
(...skipping 2075 matching lines...) Expand 10 before | Expand all | Expand 10 after
3364 object->ShortPrint(); 3363 object->ShortPrint();
3365 PrintF("\n"); 3364 PrintF("\n");
3366 } 3365 }
3367 printf(" --------------------------------------\n"); 3366 printf(" --------------------------------------\n");
3368 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); 3367 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes());
3369 } 3368 }
3370 3369
3371 #endif // DEBUG 3370 #endif // DEBUG
3372 } // namespace internal 3371 } // namespace internal
3373 } // namespace v8 3372 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/spaces.h ('k') | src/heap/store-buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698