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 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
556 static const int kMaxExecutableSizeHugeMemoryDevice = | 556 static const int kMaxExecutableSizeHugeMemoryDevice = |
557 256 * kPointerMultiplier; | 557 256 * kPointerMultiplier; |
558 | 558 |
559 static const int kTraceRingBufferSize = 512; | 559 static const int kTraceRingBufferSize = 512; |
560 static const int kStacktraceBufferSize = 512; | 560 static const int kStacktraceBufferSize = 512; |
561 | 561 |
562 static const double kMinHeapGrowingFactor; | 562 static const double kMinHeapGrowingFactor; |
563 static const double kMaxHeapGrowingFactor; | 563 static const double kMaxHeapGrowingFactor; |
564 static const double kMaxHeapGrowingFactorMemoryConstrained; | 564 static const double kMaxHeapGrowingFactorMemoryConstrained; |
565 static const double kMaxHeapGrowingFactorIdle; | 565 static const double kMaxHeapGrowingFactorIdle; |
| 566 static const double kConservativeHeapGrowingFactor; |
566 static const double kTargetMutatorUtilization; | 567 static const double kTargetMutatorUtilization; |
567 | 568 |
568 static const int kNoGCFlags = 0; | 569 static const int kNoGCFlags = 0; |
569 static const int kReduceMemoryFootprintMask = 1; | 570 static const int kReduceMemoryFootprintMask = 1; |
570 static const int kAbortIncrementalMarkingMask = 2; | 571 static const int kAbortIncrementalMarkingMask = 2; |
571 static const int kFinalizeIncrementalMarkingMask = 4; | 572 static const int kFinalizeIncrementalMarkingMask = 4; |
572 | 573 |
573 // Making the heap iterable requires us to abort incremental marking. | 574 // Making the heap iterable requires us to abort incremental marking. |
574 static const int kMakeHeapIterableMask = kAbortIncrementalMarkingMask; | 575 static const int kMakeHeapIterableMask = kAbortIncrementalMarkingMask; |
575 | 576 |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
881 // This event is triggered after object is moved to a new place. | 882 // This event is triggered after object is moved to a new place. |
882 inline void OnMoveEvent(HeapObject* target, HeapObject* source, | 883 inline void OnMoveEvent(HeapObject* target, HeapObject* source, |
883 int size_in_bytes); | 884 int size_in_bytes); |
884 | 885 |
885 bool deserialization_complete() const { return deserialization_complete_; } | 886 bool deserialization_complete() const { return deserialization_complete_; } |
886 | 887 |
887 bool HasLowAllocationRate(); | 888 bool HasLowAllocationRate(); |
888 bool HasHighFragmentation(); | 889 bool HasHighFragmentation(); |
889 bool HasHighFragmentation(intptr_t used, intptr_t committed); | 890 bool HasHighFragmentation(intptr_t used, intptr_t committed); |
890 | 891 |
891 void SetOptimizeForLatency() { optimize_for_memory_usage_ = false; } | 892 void ActivateMemoryReducerIfNeeded(); |
892 void SetOptimizeForMemoryUsage(); | 893 |
893 bool ShouldOptimizeForMemoryUsage() { | 894 bool ShouldOptimizeForMemoryUsage(); |
894 return optimize_for_memory_usage_ || HighMemoryPressure(); | 895 |
| 896 bool IsLowMemoryDevice() { |
| 897 return max_old_generation_size_ <= kMaxOldSpaceSizeLowMemoryDevice; |
895 } | 898 } |
| 899 |
| 900 bool IsMemoryConstrainedDevice() { |
| 901 return max_old_generation_size_ <= kMaxOldSpaceSizeMediumMemoryDevice; |
| 902 } |
| 903 |
896 bool HighMemoryPressure() { | 904 bool HighMemoryPressure() { |
897 return memory_pressure_level_.Value() != MemoryPressureLevel::kNone; | 905 return memory_pressure_level_.Value() != MemoryPressureLevel::kNone; |
898 } | 906 } |
899 | 907 |
900 // =========================================================================== | 908 // =========================================================================== |
901 // Initialization. =========================================================== | 909 // Initialization. =========================================================== |
902 // =========================================================================== | 910 // =========================================================================== |
903 | 911 |
904 // Configure heap size in MB before setup. Return false if the heap has been | 912 // Configure heap size in MB before setup. Return false if the heap has been |
905 // set up already. | 913 // set up already. |
(...skipping 1206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2112 // Limit that triggers a global GC on the next (normally caused) GC. This | 2120 // Limit that triggers a global GC on the next (normally caused) GC. This |
2113 // is checked when we have already decided to do a GC to help determine | 2121 // is checked when we have already decided to do a GC to help determine |
2114 // which collector to invoke, before expanding a paged space in the old | 2122 // which collector to invoke, before expanding a paged space in the old |
2115 // generation and on every allocation in large object space. | 2123 // generation and on every allocation in large object space. |
2116 intptr_t old_generation_allocation_limit_; | 2124 intptr_t old_generation_allocation_limit_; |
2117 | 2125 |
2118 // Indicates that an allocation has failed in the old generation since the | 2126 // Indicates that an allocation has failed in the old generation since the |
2119 // last GC. | 2127 // last GC. |
2120 bool old_gen_exhausted_; | 2128 bool old_gen_exhausted_; |
2121 | 2129 |
2122 // Indicates that memory usage is more important than latency. | |
2123 // TODO(ulan): Merge it with memory reducer once chromium:490559 is fixed. | |
2124 bool optimize_for_memory_usage_; | |
2125 | |
2126 // Indicates that inline bump-pointer allocation has been globally disabled | 2130 // Indicates that inline bump-pointer allocation has been globally disabled |
2127 // for all spaces. This is used to disable allocations in generated code. | 2131 // for all spaces. This is used to disable allocations in generated code. |
2128 bool inline_allocation_disabled_; | 2132 bool inline_allocation_disabled_; |
2129 | 2133 |
2130 // Weak list heads, threaded through the objects. | 2134 // Weak list heads, threaded through the objects. |
2131 // List heads are initialized lazily and contain the undefined_value at start. | 2135 // List heads are initialized lazily and contain the undefined_value at start. |
2132 Object* native_contexts_list_; | 2136 Object* native_contexts_list_; |
2133 Object* allocation_sites_list_; | 2137 Object* allocation_sites_list_; |
2134 | 2138 |
2135 // List of encountered weak collections (JSWeakMap and JSWeakSet) during | 2139 // List of encountered weak collections (JSWeakMap and JSWeakSet) during |
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2698 friend class LargeObjectSpace; | 2702 friend class LargeObjectSpace; |
2699 friend class NewSpace; | 2703 friend class NewSpace; |
2700 friend class PagedSpace; | 2704 friend class PagedSpace; |
2701 DISALLOW_COPY_AND_ASSIGN(AllocationObserver); | 2705 DISALLOW_COPY_AND_ASSIGN(AllocationObserver); |
2702 }; | 2706 }; |
2703 | 2707 |
2704 } // namespace internal | 2708 } // namespace internal |
2705 } // namespace v8 | 2709 } // namespace v8 |
2706 | 2710 |
2707 #endif // V8_HEAP_HEAP_H_ | 2711 #endif // V8_HEAP_HEAP_H_ |
OLD | NEW |