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

Side by Side Diff: src/heap/objects-visiting-inl.h

Issue 2377203003: [heap] Remove unnecessary marking specializations (Closed)
Patch Set: BytecodeArray Created 4 years, 2 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/objects-visiting.h ('k') | src/objects.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 #ifndef V8_OBJECTS_VISITING_INL_H_ 5 #ifndef V8_OBJECTS_VISITING_INL_H_
6 #define V8_OBJECTS_VISITING_INL_H_ 6 #define V8_OBJECTS_VISITING_INL_H_
7 7
8 #include "src/heap/array-buffer-tracker.h" 8 #include "src/heap/array-buffer-tracker.h"
9 #include "src/heap/objects-visiting.h" 9 #include "src/heap/objects-visiting.h"
10 #include "src/ic/ic-state.h" 10 #include "src/ic/ic-state.h"
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor, 140 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
141 void>::Visit); 141 void>::Visit);
142 142
143 table_.Register( 143 table_.Register(
144 kVisitFixedFloat64Array, 144 kVisitFixedFloat64Array,
145 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor, 145 &FlexibleBodyVisitor<StaticVisitor, FixedTypedArrayBase::BodyDescriptor,
146 void>::Visit); 146 void>::Visit);
147 147
148 table_.Register(kVisitNativeContext, &VisitNativeContext); 148 table_.Register(kVisitNativeContext, &VisitNativeContext);
149 149
150 table_.Register(kVisitAllocationSite, &VisitAllocationSite); 150 table_.Register(
151 kVisitAllocationSite,
152 &FixedBodyVisitor<StaticVisitor, AllocationSite::MarkingBodyDescriptor,
153 void>::Visit);
151 154
152 table_.Register(kVisitByteArray, &DataObjectVisitor::Visit); 155 table_.Register(kVisitByteArray, &DataObjectVisitor::Visit);
153 156
154 table_.Register(kVisitBytecodeArray, &VisitBytecodeArray); 157 table_.Register(
158 kVisitBytecodeArray,
159 &FixedBodyVisitor<StaticVisitor, BytecodeArray::MarkingBodyDescriptor,
160 void>::Visit);
155 161
156 table_.Register(kVisitFreeSpace, &DataObjectVisitor::Visit); 162 table_.Register(kVisitFreeSpace, &DataObjectVisitor::Visit);
157 163
158 table_.Register(kVisitSeqOneByteString, &DataObjectVisitor::Visit); 164 table_.Register(kVisitSeqOneByteString, &DataObjectVisitor::Visit);
159 165
160 table_.Register(kVisitSeqTwoByteString, &DataObjectVisitor::Visit); 166 table_.Register(kVisitSeqTwoByteString, &DataObjectVisitor::Visit);
161 167
162 table_.Register(kVisitJSWeakCollection, &VisitWeakCollection); 168 table_.Register(kVisitJSWeakCollection, &VisitWeakCollection);
163 169
164 table_.Register( 170 table_.Register(
165 kVisitOddball, 171 kVisitOddball,
166 &FixedBodyVisitor<StaticVisitor, Oddball::BodyDescriptor, void>::Visit); 172 &FixedBodyVisitor<StaticVisitor, Oddball::BodyDescriptor, void>::Visit);
167 173
168 table_.Register(kVisitMap, &VisitMap); 174 table_.Register(kVisitMap, &VisitMap);
169 175
170 table_.Register(kVisitCode, &VisitCode); 176 table_.Register(kVisitCode, &VisitCode);
171 177
172 table_.Register(kVisitSharedFunctionInfo, &VisitSharedFunctionInfo); 178 table_.Register(kVisitSharedFunctionInfo, &VisitSharedFunctionInfo);
173 179
174 table_.Register(kVisitJSFunction, &VisitJSFunction); 180 table_.Register(kVisitJSFunction, &VisitJSFunction);
175 181
176 table_.Register( 182 table_.Register(
177 kVisitJSArrayBuffer, 183 kVisitJSArrayBuffer,
178 &FlexibleBodyVisitor<StaticVisitor, JSArrayBuffer::BodyDescriptor, 184 &FlexibleBodyVisitor<StaticVisitor, JSArrayBuffer::BodyDescriptor,
179 void>::Visit); 185 void>::Visit);
180 186
181 // Registration for kVisitJSRegExp is done by StaticVisitor. 187 table_.Register(kVisitJSRegExp, &JSObjectVisitor::Visit);
182 188
183 table_.Register( 189 table_.Register(
184 kVisitCell, 190 kVisitCell,
185 &FixedBodyVisitor<StaticVisitor, Cell::BodyDescriptor, void>::Visit); 191 &FixedBodyVisitor<StaticVisitor, Cell::BodyDescriptor, void>::Visit);
186 192
187 table_.Register(kVisitPropertyCell, &VisitPropertyCell); 193 table_.Register(kVisitPropertyCell,
194 &FixedBodyVisitor<StaticVisitor, PropertyCell::BodyDescriptor,
195 void>::Visit);
188 196
189 table_.Register(kVisitWeakCell, &VisitWeakCell); 197 table_.Register(kVisitWeakCell, &VisitWeakCell);
190 198
191 table_.Register(kVisitTransitionArray, &VisitTransitionArray); 199 table_.Register(kVisitTransitionArray, &VisitTransitionArray);
192 200
193 table_.template RegisterSpecializations<DataObjectVisitor, kVisitDataObject, 201 table_.template RegisterSpecializations<DataObjectVisitor, kVisitDataObject,
194 kVisitDataObjectGeneric>(); 202 kVisitDataObjectGeneric>();
195 203
196 table_.template RegisterSpecializations<JSObjectVisitor, kVisitJSObject, 204 table_.template RegisterSpecializations<JSObjectVisitor, kVisitJSObject,
197 kVisitJSObjectGeneric>(); 205 kVisitJSObjectGeneric>();
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 if (map_object->CanTransition()) { 320 if (map_object->CanTransition()) {
313 MarkMapContents(heap, map_object); 321 MarkMapContents(heap, map_object);
314 } else { 322 } else {
315 StaticVisitor::VisitPointers( 323 StaticVisitor::VisitPointers(
316 heap, object, 324 heap, object,
317 HeapObject::RawField(object, Map::kPointerFieldsBeginOffset), 325 HeapObject::RawField(object, Map::kPointerFieldsBeginOffset),
318 HeapObject::RawField(object, Map::kPointerFieldsEndOffset)); 326 HeapObject::RawField(object, Map::kPointerFieldsEndOffset));
319 } 327 }
320 } 328 }
321 329
322
323 template <typename StaticVisitor>
324 void StaticMarkingVisitor<StaticVisitor>::VisitPropertyCell(
325 Map* map, HeapObject* object) {
326 Heap* heap = map->GetHeap();
327
328 StaticVisitor::VisitPointers(
329 heap, object,
330 HeapObject::RawField(object, PropertyCell::kPointerFieldsBeginOffset),
331 HeapObject::RawField(object, PropertyCell::kPointerFieldsEndOffset));
332 }
333
334
335 template <typename StaticVisitor> 330 template <typename StaticVisitor>
336 void StaticMarkingVisitor<StaticVisitor>::VisitWeakCell(Map* map, 331 void StaticMarkingVisitor<StaticVisitor>::VisitWeakCell(Map* map,
337 HeapObject* object) { 332 HeapObject* object) {
338 Heap* heap = map->GetHeap(); 333 Heap* heap = map->GetHeap();
339 WeakCell* weak_cell = reinterpret_cast<WeakCell*>(object); 334 WeakCell* weak_cell = reinterpret_cast<WeakCell*>(object);
340 // Enqueue weak cell in linked list of encountered weak collections. 335 // Enqueue weak cell in linked list of encountered weak collections.
341 // We can ignore weak cells with cleared values because they will always 336 // We can ignore weak cells with cleared values because they will always
342 // contain smi zero. 337 // contain smi zero.
343 if (weak_cell->next_cleared() && !weak_cell->cleared()) { 338 if (weak_cell->next_cleared() && !weak_cell->cleared()) {
344 HeapObject* value = HeapObject::cast(weak_cell->value()); 339 HeapObject* value = HeapObject::cast(weak_cell->value());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 // Enqueue the array in linked list of encountered transition arrays if it is 372 // Enqueue the array in linked list of encountered transition arrays if it is
378 // not already in the list. 373 // not already in the list.
379 if (array->next_link()->IsUndefined(heap->isolate())) { 374 if (array->next_link()->IsUndefined(heap->isolate())) {
380 Heap* heap = map->GetHeap(); 375 Heap* heap = map->GetHeap();
381 array->set_next_link(heap->encountered_transition_arrays(), 376 array->set_next_link(heap->encountered_transition_arrays(),
382 UPDATE_WEAK_WRITE_BARRIER); 377 UPDATE_WEAK_WRITE_BARRIER);
383 heap->set_encountered_transition_arrays(array); 378 heap->set_encountered_transition_arrays(array);
384 } 379 }
385 } 380 }
386 381
387
388 template <typename StaticVisitor>
389 void StaticMarkingVisitor<StaticVisitor>::VisitAllocationSite(
390 Map* map, HeapObject* object) {
391 Heap* heap = map->GetHeap();
392
393 StaticVisitor::VisitPointers(
394 heap, object,
395 HeapObject::RawField(object, AllocationSite::kPointerFieldsBeginOffset),
396 HeapObject::RawField(object, AllocationSite::kPointerFieldsEndOffset));
397 }
398
399
400 template <typename StaticVisitor> 382 template <typename StaticVisitor>
401 void StaticMarkingVisitor<StaticVisitor>::VisitWeakCollection( 383 void StaticMarkingVisitor<StaticVisitor>::VisitWeakCollection(
402 Map* map, HeapObject* object) { 384 Map* map, HeapObject* object) {
403 typedef FlexibleBodyVisitor<StaticVisitor, 385 typedef FlexibleBodyVisitor<StaticVisitor,
404 JSWeakCollection::BodyDescriptorWeak, 386 JSWeakCollection::BodyDescriptorWeak,
405 void> JSWeakCollectionBodyVisitor; 387 void> JSWeakCollectionBodyVisitor;
406 Heap* heap = map->GetHeap(); 388 Heap* heap = map->GetHeap();
407 JSWeakCollection* weak_collection = 389 JSWeakCollection* weak_collection =
408 reinterpret_cast<JSWeakCollection*>(object); 390 reinterpret_cast<JSWeakCollection*>(object);
409 391
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 VisitJSFunctionWeakCode(map, object); 479 VisitJSFunctionWeakCode(map, object);
498 return; 480 return;
499 } else { 481 } else {
500 // Visit all unoptimized code objects to prevent flushing them. 482 // Visit all unoptimized code objects to prevent flushing them.
501 StaticVisitor::MarkObject(heap, function->shared()->code()); 483 StaticVisitor::MarkObject(heap, function->shared()->code());
502 } 484 }
503 } 485 }
504 VisitJSFunctionStrongCode(map, object); 486 VisitJSFunctionStrongCode(map, object);
505 } 487 }
506 488
507
508 template <typename StaticVisitor>
509 void StaticMarkingVisitor<StaticVisitor>::VisitJSRegExp(Map* map,
510 HeapObject* object) {
511 JSObjectVisitor::Visit(map, object);
512 }
513
514 template <typename StaticVisitor>
515 void StaticMarkingVisitor<StaticVisitor>::VisitBytecodeArray(
516 Map* map, HeapObject* object) {
517 StaticVisitor::VisitPointers(
518 map->GetHeap(), object,
519 HeapObject::RawField(object, BytecodeArray::kConstantPoolOffset),
520 HeapObject::RawField(object, BytecodeArray::kFrameSizeOffset));
521 }
522
523
524 template <typename StaticVisitor> 489 template <typename StaticVisitor>
525 void StaticMarkingVisitor<StaticVisitor>::MarkMapContents(Heap* heap, 490 void StaticMarkingVisitor<StaticVisitor>::MarkMapContents(Heap* heap,
526 Map* map) { 491 Map* map) {
527 // Since descriptor arrays are potentially shared, ensure that only the 492 // Since descriptor arrays are potentially shared, ensure that only the
528 // descriptors that belong to this map are marked. The first time a non-empty 493 // descriptors that belong to this map are marked. The first time a non-empty
529 // descriptor array is marked, its header is also visited. The slot holding 494 // descriptor array is marked, its header is also visited. The slot holding
530 // the descriptor array will be implicitly recorded when the pointer fields of 495 // the descriptor array will be implicitly recorded when the pointer fields of
531 // this map are visited. Prototype maps don't keep track of transitions, so 496 // this map are visited. Prototype maps don't keep track of transitions, so
532 // just mark the entire descriptor array. 497 // just mark the entire descriptor array.
533 if (!map->is_prototype_map()) { 498 if (!map->is_prototype_map()) {
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 typedef FlexibleBodyVisitor<StaticVisitor, JSFunction::BodyDescriptorWeakCode, 670 typedef FlexibleBodyVisitor<StaticVisitor, JSFunction::BodyDescriptorWeakCode,
706 void> JSFunctionWeakCodeBodyVisitor; 671 void> JSFunctionWeakCodeBodyVisitor;
707 JSFunctionWeakCodeBodyVisitor::Visit(map, object); 672 JSFunctionWeakCodeBodyVisitor::Visit(map, object);
708 } 673 }
709 674
710 675
711 } // namespace internal 676 } // namespace internal
712 } // namespace v8 677 } // namespace v8
713 678
714 #endif // V8_OBJECTS_VISITING_INL_H_ 679 #endif // V8_OBJECTS_VISITING_INL_H_
OLDNEW
« no previous file with comments | « src/heap/objects-visiting.h ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698