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: src/heap.cc

Issue 310783003: Visit encountered JSWeakCollection list during scavenging. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « src/heap.h ('k') | src/mark-compact.h » ('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 // 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 "v8.h" 5 #include "v8.h"
6 6
7 #include "accessors.h" 7 #include "accessors.h"
8 #include "api.h" 8 #include "api.h"
9 #include "bootstrapper.h" 9 #include "bootstrapper.h"
10 #include "codegen.h" 10 #include "codegen.h"
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 max_semi_space_size_ = reserved_semispace_size_ = V8_MAX_SEMISPACE_SIZE; 138 max_semi_space_size_ = reserved_semispace_size_ = V8_MAX_SEMISPACE_SIZE;
139 #endif 139 #endif
140 140
141 // Ensure old_generation_size_ is a multiple of kPageSize. 141 // Ensure old_generation_size_ is a multiple of kPageSize.
142 ASSERT(MB >= Page::kPageSize); 142 ASSERT(MB >= Page::kPageSize);
143 143
144 memset(roots_, 0, sizeof(roots_[0]) * kRootListLength); 144 memset(roots_, 0, sizeof(roots_[0]) * kRootListLength);
145 set_native_contexts_list(NULL); 145 set_native_contexts_list(NULL);
146 set_array_buffers_list(Smi::FromInt(0)); 146 set_array_buffers_list(Smi::FromInt(0));
147 set_allocation_sites_list(Smi::FromInt(0)); 147 set_allocation_sites_list(Smi::FromInt(0));
148 set_encountered_weak_collections(Smi::FromInt(0));
148 // Put a dummy entry in the remembered pages so we can find the list the 149 // Put a dummy entry in the remembered pages so we can find the list the
149 // minidump even if there are no real unmapped pages. 150 // minidump even if there are no real unmapped pages.
150 RememberUnmappedPage(NULL, false); 151 RememberUnmappedPage(NULL, false);
151 152
152 ClearObjectStats(true); 153 ClearObjectStats(true);
153 } 154 }
154 155
155 156
156 intptr_t Heap::Capacity() { 157 intptr_t Heap::Capacity() {
157 if (!HasBeenSetUp()) return 0; 158 if (!HasBeenSetUp()) return 0;
(...skipping 1343 matching lines...) Expand 10 before | Expand all | Expand 10 after
1501 heap_object = js_global_property_cell_iterator.Next()) { 1502 heap_object = js_global_property_cell_iterator.Next()) {
1502 if (heap_object->IsPropertyCell()) { 1503 if (heap_object->IsPropertyCell()) {
1503 PropertyCell* cell = PropertyCell::cast(heap_object); 1504 PropertyCell* cell = PropertyCell::cast(heap_object);
1504 Address value_address = cell->ValueAddress(); 1505 Address value_address = cell->ValueAddress();
1505 scavenge_visitor.VisitPointer(reinterpret_cast<Object**>(value_address)); 1506 scavenge_visitor.VisitPointer(reinterpret_cast<Object**>(value_address));
1506 Address type_address = cell->TypeAddress(); 1507 Address type_address = cell->TypeAddress();
1507 scavenge_visitor.VisitPointer(reinterpret_cast<Object**>(type_address)); 1508 scavenge_visitor.VisitPointer(reinterpret_cast<Object**>(type_address));
1508 } 1509 }
1509 } 1510 }
1510 1511
1512 // Copy objects reachable from the encountered weak collections list.
1513 scavenge_visitor.VisitPointer(&encountered_weak_collections_);
1514
1511 // Copy objects reachable from the code flushing candidates list. 1515 // Copy objects reachable from the code flushing candidates list.
1512 MarkCompactCollector* collector = mark_compact_collector(); 1516 MarkCompactCollector* collector = mark_compact_collector();
1513 if (collector->is_code_flushing_enabled()) { 1517 if (collector->is_code_flushing_enabled()) {
1514 collector->code_flusher()->IteratePointersToFromSpace(&scavenge_visitor); 1518 collector->code_flusher()->IteratePointersToFromSpace(&scavenge_visitor);
1515 } 1519 }
1516 1520
1517 new_space_front = DoScavenge(&scavenge_visitor, new_space_front); 1521 new_space_front = DoScavenge(&scavenge_visitor, new_space_front);
1518 1522
1519 while (isolate()->global_handles()->IterateObjectGroups( 1523 while (isolate()->global_handles()->IterateObjectGroups(
1520 &scavenge_visitor, &IsUnscavengedHeapObject)) { 1524 &scavenge_visitor, &IsUnscavengedHeapObject)) {
(...skipping 4896 matching lines...) Expand 10 before | Expand all | Expand 10 after
6417 static_cast<int>(object_sizes_last_time_[index])); 6421 static_cast<int>(object_sizes_last_time_[index]));
6418 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) 6422 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT)
6419 #undef ADJUST_LAST_TIME_OBJECT_COUNT 6423 #undef ADJUST_LAST_TIME_OBJECT_COUNT
6420 6424
6421 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); 6425 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_));
6422 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); 6426 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_));
6423 ClearObjectStats(); 6427 ClearObjectStats();
6424 } 6428 }
6425 6429
6426 } } // namespace v8::internal 6430 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap.h ('k') | src/mark-compact.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698