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

Side by Side Diff: src/heap/mark-compact.h

Issue 2371733002: Introduce EmbedderReachableReferenceReporter (Closed)
Patch Set: Fix UsingEmbedderHeapTracer 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/incremental-marking.cc ('k') | src/heap/mark-compact.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 // 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_HEAP_MARK_COMPACT_H_ 5 #ifndef V8_HEAP_MARK_COMPACT_H_
6 #define V8_HEAP_MARK_COMPACT_H_ 6 #define V8_HEAP_MARK_COMPACT_H_
7 7
8 #include <deque> 8 #include <deque>
9 9
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 // when mark bits are still intact. 483 // when mark bits are still intact.
484 bool IsSlotInBlackObject(MemoryChunk* p, Address slot); 484 bool IsSlotInBlackObject(MemoryChunk* p, Address slot);
485 HeapObject* FindBlackObjectBySlotSlow(Address slot); 485 HeapObject* FindBlackObjectBySlotSlow(Address slot);
486 486
487 // Removes all the slots in the slot buffers that are within the given 487 // Removes all the slots in the slot buffers that are within the given
488 // address range. 488 // address range.
489 void RemoveObjectSlots(Address start_slot, Address end_slot); 489 void RemoveObjectSlots(Address start_slot, Address end_slot);
490 490
491 Sweeper& sweeper() { return sweeper_; } 491 Sweeper& sweeper() { return sweeper_; }
492 492
493 // ===========================================================================
494 // Embedder heap tracer support. =============================================
495 // ===========================================================================
496
497 void SetEmbedderHeapTracer(EmbedderHeapTracer* tracer);
498 EmbedderHeapTracer* embedder_heap_tracer() { return embedder_heap_tracer_; }
499 bool UsingEmbedderHeapTracer() { return embedder_heap_tracer(); }
500
501 // In order to avoid running out of memory we force tracing wrappers if there
502 // are too many of them.
503 bool RequiresImmediateWrapperProcessing();
504
505 void RegisterWrappersWithEmbedderHeapTracer();
506
507 void TracePossibleWrapper(JSObject* js_object);
508
509 size_t wrappers_to_trace() { return wrappers_to_trace_.size(); }
510
511 private: 493 private:
512 class EvacuateNewSpacePageVisitor; 494 class EvacuateNewSpacePageVisitor;
513 class EvacuateNewSpaceVisitor; 495 class EvacuateNewSpaceVisitor;
514 class EvacuateOldSpaceVisitor; 496 class EvacuateOldSpaceVisitor;
515 class EvacuateRecordOnlyVisitor; 497 class EvacuateRecordOnlyVisitor;
516 class EvacuateVisitorBase; 498 class EvacuateVisitorBase;
517 class HeapObjectVisitor; 499 class HeapObjectVisitor;
518 class ObjectStatsVisitor; 500 class ObjectStatsVisitor;
519 501
520 explicit MarkCompactCollector(Heap* heap); 502 explicit MarkCompactCollector(Heap* heap);
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 // candidates. 722 // candidates.
741 bool compacting_; 723 bool compacting_;
742 724
743 bool black_allocation_; 725 bool black_allocation_;
744 726
745 bool have_code_to_deoptimize_; 727 bool have_code_to_deoptimize_;
746 728
747 base::VirtualMemory* marking_deque_memory_; 729 base::VirtualMemory* marking_deque_memory_;
748 size_t marking_deque_memory_committed_; 730 size_t marking_deque_memory_committed_;
749 MarkingDeque marking_deque_; 731 MarkingDeque marking_deque_;
750 std::vector<std::pair<void*, void*>> wrappers_to_trace_;
751 732
752 CodeFlusher* code_flusher_; 733 CodeFlusher* code_flusher_;
753 734
754 EmbedderHeapTracer* embedder_heap_tracer_;
755
756 List<Page*> evacuation_candidates_; 735 List<Page*> evacuation_candidates_;
757 List<Page*> newspace_evacuation_candidates_; 736 List<Page*> newspace_evacuation_candidates_;
758 737
759 Sweeper sweeper_; 738 Sweeper sweeper_;
760 739
761 friend class Heap; 740 friend class Heap;
762 friend class StoreBuffer; 741 friend class StoreBuffer;
763 }; 742 };
764 743
765 744
766 class EvacuationScope BASE_EMBEDDED { 745 class EvacuationScope BASE_EMBEDDED {
767 public: 746 public:
768 explicit EvacuationScope(MarkCompactCollector* collector) 747 explicit EvacuationScope(MarkCompactCollector* collector)
769 : collector_(collector) { 748 : collector_(collector) {
770 collector_->set_evacuation(true); 749 collector_->set_evacuation(true);
771 } 750 }
772 751
773 ~EvacuationScope() { collector_->set_evacuation(false); } 752 ~EvacuationScope() { collector_->set_evacuation(false); }
774 753
775 private: 754 private:
776 MarkCompactCollector* collector_; 755 MarkCompactCollector* collector_;
777 }; 756 };
778 757
779 V8_EXPORT_PRIVATE const char* AllocationSpaceName(AllocationSpace space); 758 V8_EXPORT_PRIVATE const char* AllocationSpaceName(AllocationSpace space);
780 } // namespace internal 759 } // namespace internal
781 } // namespace v8 760 } // namespace v8
782 761
783 #endif // V8_HEAP_MARK_COMPACT_H_ 762 #endif // V8_HEAP_MARK_COMPACT_H_
OLDNEW
« no previous file with comments | « src/heap/incremental-marking.cc ('k') | src/heap/mark-compact.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698