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

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

Issue 1490233009: [heap] Make link from optimized code to inlined code explicit. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Allow handle deref. Created 5 years 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') | 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 // 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 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 template <typename StaticVisitor> 408 template <typename StaticVisitor>
409 void StaticMarkingVisitor<StaticVisitor>::VisitCode(Map* map, 409 void StaticMarkingVisitor<StaticVisitor>::VisitCode(Map* map,
410 HeapObject* object) { 410 HeapObject* object) {
411 typedef FlexibleBodyVisitor<StaticVisitor, Code::BodyDescriptor, void> 411 typedef FlexibleBodyVisitor<StaticVisitor, Code::BodyDescriptor, void>
412 CodeBodyVisitor; 412 CodeBodyVisitor;
413 Heap* heap = map->GetHeap(); 413 Heap* heap = map->GetHeap();
414 Code* code = Code::cast(object); 414 Code* code = Code::cast(object);
415 if (FLAG_age_code && !heap->isolate()->serializer_enabled()) { 415 if (FLAG_age_code && !heap->isolate()->serializer_enabled()) {
416 code->MakeOlder(heap->mark_compact_collector()->marking_parity()); 416 code->MakeOlder(heap->mark_compact_collector()->marking_parity());
417 } 417 }
418 MarkCompactCollector* collector = heap->mark_compact_collector();
419 if (collector->is_code_flushing_enabled()) {
420 if (code->kind() == Code::OPTIMIZED_FUNCTION) {
421 // Visit all unoptimized code objects to prevent flushing them.
422 MarkInlinedFunctionsCode(heap, code);
423 }
424 }
425 CodeBodyVisitor::Visit(map, object); 418 CodeBodyVisitor::Visit(map, object);
426 } 419 }
427 420
428 421
429 template <typename StaticVisitor> 422 template <typename StaticVisitor>
430 void StaticMarkingVisitor<StaticVisitor>::VisitSharedFunctionInfo( 423 void StaticMarkingVisitor<StaticVisitor>::VisitSharedFunctionInfo(
431 Map* map, HeapObject* object) { 424 Map* map, HeapObject* object) {
432 Heap* heap = map->GetHeap(); 425 Heap* heap = map->GetHeap();
433 SharedFunctionInfo* shared = SharedFunctionInfo::cast(object); 426 SharedFunctionInfo* shared = SharedFunctionInfo::cast(object);
434 if (shared->ic_age() != heap->global_ic_age()) { 427 if (shared->ic_age() != heap->global_ic_age()) {
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 Object* shared_object = code_map->get(SharedFunctionInfo::kSharedCodeIndex); 591 Object* shared_object = code_map->get(SharedFunctionInfo::kSharedCodeIndex);
599 if (FLAG_turbo_preserve_shared_code && shared_object->IsCode() && 592 if (FLAG_turbo_preserve_shared_code && shared_object->IsCode() &&
600 FLAG_age_code && !Code::cast(shared_object)->IsOld()) { 593 FLAG_age_code && !Code::cast(shared_object)->IsOld()) {
601 StaticVisitor::VisitPointer( 594 StaticVisitor::VisitPointer(
602 heap, code_map, 595 heap, code_map,
603 code_map->RawFieldOfElementAt(SharedFunctionInfo::kSharedCodeIndex)); 596 code_map->RawFieldOfElementAt(SharedFunctionInfo::kSharedCodeIndex));
604 } 597 }
605 } 598 }
606 599
607 600
608 template <typename StaticVisitor>
609 void StaticMarkingVisitor<StaticVisitor>::MarkInlinedFunctionsCode(Heap* heap,
610 Code* code) {
611 // For optimized functions we should retain both non-optimized version
612 // of its code and non-optimized version of all inlined functions.
613 // This is required to support bailing out from inlined code.
614 if (code->deoptimization_data() != heap->empty_fixed_array()) {
615 DeoptimizationInputData* const data =
616 DeoptimizationInputData::cast(code->deoptimization_data());
617 FixedArray* const literals = data->LiteralArray();
618 int const inlined_count = data->InlinedFunctionCount()->value();
619 for (int i = 0; i < inlined_count; ++i) {
620 StaticVisitor::MarkObject(
621 heap, SharedFunctionInfo::cast(literals->get(i))->code());
622 }
623 }
624 }
625
626
627 inline static bool HasSourceCode(Heap* heap, SharedFunctionInfo* info) { 601 inline static bool HasSourceCode(Heap* heap, SharedFunctionInfo* info) {
628 Object* undefined = heap->undefined_value(); 602 Object* undefined = heap->undefined_value();
629 return (info->script() != undefined) && 603 return (info->script() != undefined) &&
630 (reinterpret_cast<Script*>(info->script())->source() != undefined); 604 (reinterpret_cast<Script*>(info->script())->source() != undefined);
631 } 605 }
632 606
633 607
634 template <typename StaticVisitor> 608 template <typename StaticVisitor>
635 bool StaticMarkingVisitor<StaticVisitor>::IsFlushable(Heap* heap, 609 bool StaticMarkingVisitor<StaticVisitor>::IsFlushable(Heap* heap,
636 JSFunction* function) { 610 JSFunction* function) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 typedef FlexibleBodyVisitor<StaticVisitor, JSFunction::BodyDescriptorWeakCode, 747 typedef FlexibleBodyVisitor<StaticVisitor, JSFunction::BodyDescriptorWeakCode,
774 void> JSFunctionWeakCodeBodyVisitor; 748 void> JSFunctionWeakCodeBodyVisitor;
775 JSFunctionWeakCodeBodyVisitor::Visit(map, object); 749 JSFunctionWeakCodeBodyVisitor::Visit(map, object);
776 } 750 }
777 751
778 752
779 } // namespace internal 753 } // namespace internal
780 } // namespace v8 754 } // namespace v8
781 755
782 #endif // V8_OBJECTS_VISITING_INL_H_ 756 #endif // V8_OBJECTS_VISITING_INL_H_
OLDNEW
« no previous file with comments | « src/heap/objects-visiting.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698