OLD | NEW |
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_HEAP_H_ | 5 #ifndef V8_HEAP_HEAP_H_ |
6 #define V8_HEAP_HEAP_H_ | 6 #define V8_HEAP_HEAP_H_ |
7 | 7 |
8 #include <cmath> | 8 #include <cmath> |
9 #include <map> | 9 #include <map> |
10 | 10 |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 ExperimentalExtraNativesSourceCache) \ | 169 ExperimentalExtraNativesSourceCache) \ |
170 V(Script, empty_script, EmptyScript) \ | 170 V(Script, empty_script, EmptyScript) \ |
171 V(NameDictionary, intrinsic_function_names, IntrinsicFunctionNames) \ | 171 V(NameDictionary, intrinsic_function_names, IntrinsicFunctionNames) \ |
172 V(Cell, undefined_cell, UndefinedCell) \ | 172 V(Cell, undefined_cell, UndefinedCell) \ |
173 V(JSObject, observation_state, ObservationState) \ | 173 V(JSObject, observation_state, ObservationState) \ |
174 V(Object, symbol_registry, SymbolRegistry) \ | 174 V(Object, symbol_registry, SymbolRegistry) \ |
175 V(Object, script_list, ScriptList) \ | 175 V(Object, script_list, ScriptList) \ |
176 V(SeededNumberDictionary, empty_slow_element_dictionary, \ | 176 V(SeededNumberDictionary, empty_slow_element_dictionary, \ |
177 EmptySlowElementDictionary) \ | 177 EmptySlowElementDictionary) \ |
178 V(FixedArray, materialized_objects, MaterializedObjects) \ | 178 V(FixedArray, materialized_objects, MaterializedObjects) \ |
179 V(FixedArray, allocation_sites_scratchpad, AllocationSitesScratchpad) \ | |
180 V(FixedArray, microtask_queue, MicrotaskQueue) \ | 179 V(FixedArray, microtask_queue, MicrotaskQueue) \ |
181 V(TypeFeedbackVector, dummy_vector, DummyVector) \ | 180 V(TypeFeedbackVector, dummy_vector, DummyVector) \ |
182 V(FixedArray, cleared_optimized_code_map, ClearedOptimizedCodeMap) \ | 181 V(FixedArray, cleared_optimized_code_map, ClearedOptimizedCodeMap) \ |
183 V(FixedArray, detached_contexts, DetachedContexts) \ | 182 V(FixedArray, detached_contexts, DetachedContexts) \ |
184 V(ArrayList, retained_maps, RetainedMaps) \ | 183 V(ArrayList, retained_maps, RetainedMaps) \ |
185 V(WeakHashTable, weak_object_to_code_table, WeakObjectToCodeTable) \ | 184 V(WeakHashTable, weak_object_to_code_table, WeakObjectToCodeTable) \ |
186 V(PropertyCell, array_protector, ArrayProtector) \ | 185 V(PropertyCell, array_protector, ArrayProtector) \ |
187 V(PropertyCell, empty_property_cell, EmptyPropertyCell) \ | 186 V(PropertyCell, empty_property_cell, EmptyPropertyCell) \ |
188 V(Object, weak_stack_trace_list, WeakStackTraceList) \ | 187 V(Object, weak_stack_trace_list, WeakStackTraceList) \ |
189 V(Object, noscript_shared_function_infos, NoScriptSharedFunctionInfos) \ | 188 V(Object, noscript_shared_function_infos, NoScriptSharedFunctionInfos) \ |
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 kStrongRootListLength = kStringTableRootIndex, | 628 kStrongRootListLength = kStringTableRootIndex, |
630 kSmiRootsStart = kStringTableRootIndex + 1 | 629 kSmiRootsStart = kStringTableRootIndex + 1 |
631 }; | 630 }; |
632 | 631 |
633 // Indicates whether live bytes adjustment is triggered | 632 // Indicates whether live bytes adjustment is triggered |
634 // - from within the GC code before sweeping started (SEQUENTIAL_TO_SWEEPER), | 633 // - from within the GC code before sweeping started (SEQUENTIAL_TO_SWEEPER), |
635 // - or from within GC (CONCURRENT_TO_SWEEPER), | 634 // - or from within GC (CONCURRENT_TO_SWEEPER), |
636 // - or mutator code (CONCURRENT_TO_SWEEPER). | 635 // - or mutator code (CONCURRENT_TO_SWEEPER). |
637 enum InvocationMode { SEQUENTIAL_TO_SWEEPER, CONCURRENT_TO_SWEEPER }; | 636 enum InvocationMode { SEQUENTIAL_TO_SWEEPER, CONCURRENT_TO_SWEEPER }; |
638 | 637 |
639 enum ScratchpadSlotMode { IGNORE_SCRATCHPAD_SLOT, RECORD_SCRATCHPAD_SLOT }; | 638 enum PretenuringFeedbackInsertionMode { kCached, kGlobal }; |
640 | 639 |
641 enum HeapState { NOT_IN_GC, SCAVENGE, MARK_COMPACT }; | 640 enum HeapState { NOT_IN_GC, SCAVENGE, MARK_COMPACT }; |
642 | 641 |
643 // Taking this lock prevents the GC from entering a phase that relocates | 642 // Taking this lock prevents the GC from entering a phase that relocates |
644 // object references. | 643 // object references. |
645 class RelocationLock { | 644 class RelocationLock { |
646 public: | 645 public: |
647 explicit RelocationLock(Heap* heap) : heap_(heap) { | 646 explicit RelocationLock(Heap* heap) : heap_(heap) { |
648 heap_->relocation_mutex_.Lock(); | 647 heap_->relocation_mutex_.Lock(); |
649 } | 648 } |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
755 static inline bool IsOneByte(T t, int chars); | 754 static inline bool IsOneByte(T t, int chars); |
756 | 755 |
757 static void FatalProcessOutOfMemory(const char* location, | 756 static void FatalProcessOutOfMemory(const char* location, |
758 bool take_snapshot = false); | 757 bool take_snapshot = false); |
759 | 758 |
760 static bool RootIsImmortalImmovable(int root_index); | 759 static bool RootIsImmortalImmovable(int root_index); |
761 | 760 |
762 // Checks whether the space is valid. | 761 // Checks whether the space is valid. |
763 static bool IsValidAllocationSpace(AllocationSpace space); | 762 static bool IsValidAllocationSpace(AllocationSpace space); |
764 | 763 |
765 // An object may have an AllocationSite associated with it through a trailing | |
766 // AllocationMemento. Its feedback should be updated when objects are found | |
767 // in the heap. | |
768 static inline void UpdateAllocationSiteFeedback(HeapObject* object, | |
769 ScratchpadSlotMode mode); | |
770 | |
771 // Generated code can embed direct references to non-writable roots if | 764 // Generated code can embed direct references to non-writable roots if |
772 // they are in new space. | 765 // they are in new space. |
773 static bool RootCanBeWrittenAfterInitialization(RootListIndex root_index); | 766 static bool RootCanBeWrittenAfterInitialization(RootListIndex root_index); |
774 | 767 |
775 // Zapping is needed for verify heap, and always done in debug builds. | 768 // Zapping is needed for verify heap, and always done in debug builds. |
776 static inline bool ShouldZapGarbage() { | 769 static inline bool ShouldZapGarbage() { |
777 #ifdef DEBUG | 770 #ifdef DEBUG |
778 return true; | 771 return true; |
779 #else | 772 #else |
780 #ifdef VERIFY_HEAP | 773 #ifdef VERIFY_HEAP |
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1537 // ArrayBuffer tracking. ===================================================== | 1530 // ArrayBuffer tracking. ===================================================== |
1538 // =========================================================================== | 1531 // =========================================================================== |
1539 | 1532 |
1540 void RegisterNewArrayBuffer(JSArrayBuffer* buffer); | 1533 void RegisterNewArrayBuffer(JSArrayBuffer* buffer); |
1541 void UnregisterArrayBuffer(JSArrayBuffer* buffer); | 1534 void UnregisterArrayBuffer(JSArrayBuffer* buffer); |
1542 | 1535 |
1543 inline ArrayBufferTracker* array_buffer_tracker() { | 1536 inline ArrayBufferTracker* array_buffer_tracker() { |
1544 return array_buffer_tracker_; | 1537 return array_buffer_tracker_; |
1545 } | 1538 } |
1546 | 1539 |
| 1540 // =========================================================================== |
| 1541 // Allocation site tracking. ================================================= |
| 1542 // =========================================================================== |
| 1543 |
| 1544 // Updates the AllocationSite of a given {object}. If the global prenuring |
| 1545 // storage is passed as {pretenuring_feedback} the memento found count on |
| 1546 // the corresponding allocation site is immediately updated and an entry |
| 1547 // in the hash map is created. Otherwise the entry (including a the count |
| 1548 // value) is cached on the local pretenuring feedback. |
| 1549 inline void UpdateAllocationSite(HeapObject* object, |
| 1550 HashMap* pretenuring_feedback); |
| 1551 |
| 1552 // Removes an entry from the global pretenuring storage. |
| 1553 inline void RemoveAllocationSitePretenuringFeedback(AllocationSite* site); |
| 1554 |
| 1555 // Merges local pretenuring feedback into the global one. Note that this |
| 1556 // method needs to be called after evacuation, as allocation sites may be |
| 1557 // evacuated and this method resolves forward pointers accordingly. |
| 1558 void MergeAllocationSitePretenuringFeedback( |
| 1559 const HashMap& local_pretenuring_feedback); |
| 1560 |
1547 // ============================================================================= | 1561 // ============================================================================= |
1548 | 1562 |
1549 #ifdef VERIFY_HEAP | 1563 #ifdef VERIFY_HEAP |
1550 // Verify the heap is in its normal state before or after a GC. | 1564 // Verify the heap is in its normal state before or after a GC. |
1551 void Verify(); | 1565 void Verify(); |
1552 #endif | 1566 #endif |
1553 | 1567 |
1554 #ifdef DEBUG | 1568 #ifdef DEBUG |
1555 void set_allocation_timeout(int timeout) { allocation_timeout_ = timeout; } | 1569 void set_allocation_timeout(int timeout) { allocation_timeout_ = timeout; } |
1556 | 1570 |
1557 void TracePathToObjectFrom(Object* target, Object* root); | 1571 void TracePathToObjectFrom(Object* target, Object* root); |
1558 void TracePathToObject(Object* target); | 1572 void TracePathToObject(Object* target); |
1559 void TracePathToGlobal(); | 1573 void TracePathToGlobal(); |
1560 | 1574 |
1561 void Print(); | 1575 void Print(); |
1562 void PrintHandles(); | 1576 void PrintHandles(); |
1563 | 1577 |
1564 // Report heap statistics. | 1578 // Report heap statistics. |
1565 void ReportHeapStatistics(const char* title); | 1579 void ReportHeapStatistics(const char* title); |
1566 void ReportCodeStatistics(const char* title); | 1580 void ReportCodeStatistics(const char* title); |
1567 #endif | 1581 #endif |
1568 | 1582 |
1569 private: | 1583 private: |
| 1584 class PretenuringScope; |
1570 class UnmapFreeMemoryTask; | 1585 class UnmapFreeMemoryTask; |
1571 | 1586 |
1572 // External strings table is a place where all external strings are | 1587 // External strings table is a place where all external strings are |
1573 // registered. We need to keep track of such strings to properly | 1588 // registered. We need to keep track of such strings to properly |
1574 // finalize them. | 1589 // finalize them. |
1575 class ExternalStringTable { | 1590 class ExternalStringTable { |
1576 public: | 1591 public: |
1577 // Registers an external string. | 1592 // Registers an external string. |
1578 inline void AddString(String* string); | 1593 inline void AddString(String* string); |
1579 | 1594 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1654 static const ConstantStringTable constant_string_table[]; | 1669 static const ConstantStringTable constant_string_table[]; |
1655 static const StructTable struct_table[]; | 1670 static const StructTable struct_table[]; |
1656 | 1671 |
1657 static const int kYoungSurvivalRateHighThreshold = 90; | 1672 static const int kYoungSurvivalRateHighThreshold = 90; |
1658 static const int kYoungSurvivalRateAllowedDeviation = 15; | 1673 static const int kYoungSurvivalRateAllowedDeviation = 15; |
1659 static const int kOldSurvivalRateLowThreshold = 10; | 1674 static const int kOldSurvivalRateLowThreshold = 10; |
1660 | 1675 |
1661 static const int kMaxMarkCompactsInIdleRound = 7; | 1676 static const int kMaxMarkCompactsInIdleRound = 7; |
1662 static const int kIdleScavengeThreshold = 5; | 1677 static const int kIdleScavengeThreshold = 5; |
1663 | 1678 |
1664 static const int kAllocationSiteScratchpadSize = 256; | 1679 static const int kInitialFeedbackCapacity = 256; |
1665 | 1680 |
1666 Heap(); | 1681 Heap(); |
1667 | 1682 |
1668 static String* UpdateNewSpaceReferenceInExternalStringTableEntry( | 1683 static String* UpdateNewSpaceReferenceInExternalStringTableEntry( |
1669 Heap* heap, Object** pointer); | 1684 Heap* heap, Object** pointer); |
1670 | 1685 |
1671 static void ScavengeStoreBufferCallback(Heap* heap, MemoryChunk* page, | 1686 static void ScavengeStoreBufferCallback(Heap* heap, MemoryChunk* page, |
1672 StoreBufferEvent event); | 1687 StoreBufferEvent event); |
1673 | 1688 |
1674 // Selects the proper allocation space based on the pretenuring decision. | 1689 // Selects the proper allocation space based on the pretenuring decision. |
(...skipping 21 matching lines...) Expand all Loading... |
1696 inline bool ShouldAbortIncrementalMarking() const { | 1711 inline bool ShouldAbortIncrementalMarking() const { |
1697 return current_gc_flags_ & kAbortIncrementalMarkingMask; | 1712 return current_gc_flags_ & kAbortIncrementalMarkingMask; |
1698 } | 1713 } |
1699 | 1714 |
1700 inline bool ShouldFinalizeIncrementalMarking() const { | 1715 inline bool ShouldFinalizeIncrementalMarking() const { |
1701 return current_gc_flags_ & kFinalizeIncrementalMarkingMask; | 1716 return current_gc_flags_ & kFinalizeIncrementalMarkingMask; |
1702 } | 1717 } |
1703 | 1718 |
1704 void PreprocessStackTraces(); | 1719 void PreprocessStackTraces(); |
1705 | 1720 |
1706 // Pretenuring decisions are made based on feedback collected during new | |
1707 // space evacuation. Note that between feedback collection and calling this | |
1708 // method object in old space must not move. | |
1709 // Right now we only process pretenuring feedback in high promotion mode. | |
1710 bool ProcessPretenuringFeedback(); | |
1711 | |
1712 // Checks whether a global GC is necessary | 1721 // Checks whether a global GC is necessary |
1713 GarbageCollector SelectGarbageCollector(AllocationSpace space, | 1722 GarbageCollector SelectGarbageCollector(AllocationSpace space, |
1714 const char** reason); | 1723 const char** reason); |
1715 | 1724 |
1716 // Make sure there is a filler value behind the top of the new space | 1725 // Make sure there is a filler value behind the top of the new space |
1717 // so that the GC does not confuse some unintialized/stale memory | 1726 // so that the GC does not confuse some unintialized/stale memory |
1718 // with the allocation memento of the object at the top | 1727 // with the allocation memento of the object at the top |
1719 void EnsureFillerObjectAtTop(); | 1728 void EnsureFillerObjectAtTop(); |
1720 | 1729 |
1721 // Ensure that we have swept all spaces in such a way that we can iterate | 1730 // Ensure that we have swept all spaces in such a way that we can iterate |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1781 | 1790 |
1782 // Record statistics before and after garbage collection. | 1791 // Record statistics before and after garbage collection. |
1783 void ReportStatisticsBeforeGC(); | 1792 void ReportStatisticsBeforeGC(); |
1784 void ReportStatisticsAfterGC(); | 1793 void ReportStatisticsAfterGC(); |
1785 | 1794 |
1786 // Creates and installs the full-sized number string cache. | 1795 // Creates and installs the full-sized number string cache. |
1787 int FullSizeNumberStringCacheLength(); | 1796 int FullSizeNumberStringCacheLength(); |
1788 // Flush the number to string cache. | 1797 // Flush the number to string cache. |
1789 void FlushNumberStringCache(); | 1798 void FlushNumberStringCache(); |
1790 | 1799 |
1791 // Sets used allocation sites entries to undefined. | |
1792 void FlushAllocationSitesScratchpad(); | |
1793 | |
1794 // Initializes the allocation sites scratchpad with undefined values. | |
1795 void InitializeAllocationSitesScratchpad(); | |
1796 | |
1797 // Adds an allocation site to the scratchpad if there is space left. | |
1798 void AddAllocationSiteToScratchpad(AllocationSite* site, | |
1799 ScratchpadSlotMode mode); | |
1800 | |
1801 // TODO(hpayer): Allocation site pretenuring may make this method obsolete. | 1800 // TODO(hpayer): Allocation site pretenuring may make this method obsolete. |
1802 // Re-visit incremental marking heuristics. | 1801 // Re-visit incremental marking heuristics. |
1803 bool IsHighSurvivalRate() { return high_survival_rate_period_length_ > 0; } | 1802 bool IsHighSurvivalRate() { return high_survival_rate_period_length_ > 0; } |
1804 | 1803 |
1805 void ConfigureInitialOldGenerationSize(); | 1804 void ConfigureInitialOldGenerationSize(); |
1806 | 1805 |
1807 bool HasLowYoungGenerationAllocationRate(); | 1806 bool HasLowYoungGenerationAllocationRate(); |
1808 bool HasLowOldGenerationAllocationRate(); | 1807 bool HasLowOldGenerationAllocationRate(); |
1809 double YoungGenerationMutatorUtilization(); | 1808 double YoungGenerationMutatorUtilization(); |
1810 double OldGenerationMutatorUtilization(); | 1809 double OldGenerationMutatorUtilization(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1842 | 1841 |
1843 // Returns the timer used for a given GC type. | 1842 // Returns the timer used for a given GC type. |
1844 // - GCScavenger: young generation GC | 1843 // - GCScavenger: young generation GC |
1845 // - GCCompactor: full GC | 1844 // - GCCompactor: full GC |
1846 // - GCFinalzeMC: finalization of incremental full GC | 1845 // - GCFinalzeMC: finalization of incremental full GC |
1847 // - GCFinalizeMCReduceMemory: finalization of incremental full GC with | 1846 // - GCFinalizeMCReduceMemory: finalization of incremental full GC with |
1848 // memory reduction | 1847 // memory reduction |
1849 HistogramTimer* GCTypeTimer(GarbageCollector collector); | 1848 HistogramTimer* GCTypeTimer(GarbageCollector collector); |
1850 | 1849 |
1851 // =========================================================================== | 1850 // =========================================================================== |
| 1851 // Pretenuring. ============================================================== |
| 1852 // =========================================================================== |
| 1853 |
| 1854 // Pretenuring decisions are made based on feedback collected during new space |
| 1855 // evacuation. Note that between feedback collection and calling this method |
| 1856 // object in old space must not move. |
| 1857 void ProcessPretenuringFeedback(); |
| 1858 |
| 1859 // =========================================================================== |
1852 // Actual GC. ================================================================ | 1860 // Actual GC. ================================================================ |
1853 // =========================================================================== | 1861 // =========================================================================== |
1854 | 1862 |
1855 // Code that should be run before and after each GC. Includes some | 1863 // Code that should be run before and after each GC. Includes some |
1856 // reporting/verification activities when compiled with DEBUG set. | 1864 // reporting/verification activities when compiled with DEBUG set. |
1857 void GarbageCollectionPrologue(); | 1865 void GarbageCollectionPrologue(); |
1858 void GarbageCollectionEpilogue(); | 1866 void GarbageCollectionEpilogue(); |
1859 | 1867 |
1860 // Performs a major collection in the whole heap. | 1868 // Performs a major collection in the whole heap. |
1861 void MarkCompact(); | 1869 void MarkCompact(); |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2136 MUST_USE_RESULT AllocationResult | 2144 MUST_USE_RESULT AllocationResult |
2137 AllocateForeign(Address address, PretenureFlag pretenure = NOT_TENURED); | 2145 AllocateForeign(Address address, PretenureFlag pretenure = NOT_TENURED); |
2138 | 2146 |
2139 MUST_USE_RESULT AllocationResult | 2147 MUST_USE_RESULT AllocationResult |
2140 AllocateCode(int object_size, bool immovable); | 2148 AllocateCode(int object_size, bool immovable); |
2141 | 2149 |
2142 MUST_USE_RESULT AllocationResult InternalizeStringWithKey(HashTableKey* key); | 2150 MUST_USE_RESULT AllocationResult InternalizeStringWithKey(HashTableKey* key); |
2143 | 2151 |
2144 MUST_USE_RESULT AllocationResult InternalizeString(String* str); | 2152 MUST_USE_RESULT AllocationResult InternalizeString(String* str); |
2145 | 2153 |
| 2154 // =========================================================================== |
| 2155 |
2146 void set_force_oom(bool value) { force_oom_ = value; } | 2156 void set_force_oom(bool value) { force_oom_ = value; } |
2147 | 2157 |
2148 // The amount of external memory registered through the API kept alive | 2158 // The amount of external memory registered through the API kept alive |
2149 // by global handles | 2159 // by global handles |
2150 int64_t amount_of_external_allocated_memory_; | 2160 int64_t amount_of_external_allocated_memory_; |
2151 | 2161 |
2152 // Caches the amount of external memory registered at the last global gc. | 2162 // Caches the amount of external memory registered at the last global gc. |
2153 int64_t amount_of_external_allocated_memory_at_last_global_gc_; | 2163 int64_t amount_of_external_allocated_memory_at_last_global_gc_; |
2154 | 2164 |
2155 // This can be calculated directly from a pointer to the heap; however, it is | 2165 // This can be calculated directly from a pointer to the heap; however, it is |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2345 size_t old_generation_allocation_counter_; | 2355 size_t old_generation_allocation_counter_; |
2346 | 2356 |
2347 // The size of objects in old generation after the last MarkCompact GC. | 2357 // The size of objects in old generation after the last MarkCompact GC. |
2348 size_t old_generation_size_at_last_gc_; | 2358 size_t old_generation_size_at_last_gc_; |
2349 | 2359 |
2350 // If the --deopt_every_n_garbage_collections flag is set to a positive value, | 2360 // If the --deopt_every_n_garbage_collections flag is set to a positive value, |
2351 // this variable holds the number of garbage collections since the last | 2361 // this variable holds the number of garbage collections since the last |
2352 // deoptimization triggered by garbage collection. | 2362 // deoptimization triggered by garbage collection. |
2353 int gcs_since_last_deopt_; | 2363 int gcs_since_last_deopt_; |
2354 | 2364 |
2355 int allocation_sites_scratchpad_length_; | 2365 // The feedback storage is used to store allocation sites (keys) and how often |
| 2366 // they have been visited (values) by finding a memento behind an object. The |
| 2367 // storage is only alive temporary during a GC. The invariant is that all |
| 2368 // pointers in this map are already fixed, i.e., they do not point to |
| 2369 // forwarding pointers. |
| 2370 HashMap* global_pretenuring_feedback_; |
2356 | 2371 |
2357 char trace_ring_buffer_[kTraceRingBufferSize]; | 2372 char trace_ring_buffer_[kTraceRingBufferSize]; |
2358 // If it's not full then the data is from 0 to ring_buffer_end_. If it's | 2373 // If it's not full then the data is from 0 to ring_buffer_end_. If it's |
2359 // full then the data is from ring_buffer_end_ to the end of the buffer and | 2374 // full then the data is from ring_buffer_end_ to the end of the buffer and |
2360 // from 0 to ring_buffer_end_. | 2375 // from 0 to ring_buffer_end_. |
2361 bool ring_buffer_full_; | 2376 bool ring_buffer_full_; |
2362 size_t ring_buffer_end_; | 2377 size_t ring_buffer_end_; |
2363 | 2378 |
2364 // Shared state read by the scavenge collector and set by ScavengeObject. | 2379 // Shared state read by the scavenge collector and set by ScavengeObject. |
2365 PromotionQueue promotion_queue_; | 2380 PromotionQueue promotion_queue_; |
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2771 DisallowHeapAllocation no_allocation; // i.e. no gc allowed. | 2786 DisallowHeapAllocation no_allocation; // i.e. no gc allowed. |
2772 | 2787 |
2773 private: | 2788 private: |
2774 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); | 2789 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); |
2775 }; | 2790 }; |
2776 #endif // DEBUG | 2791 #endif // DEBUG |
2777 } // namespace internal | 2792 } // namespace internal |
2778 } // namespace v8 | 2793 } // namespace v8 |
2779 | 2794 |
2780 #endif // V8_HEAP_HEAP_H_ | 2795 #endif // V8_HEAP_HEAP_H_ |
OLD | NEW |