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 869 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
880 bool HasBeenSetUp(); | 880 bool HasBeenSetUp(); |
881 | 881 |
882 // =========================================================================== | 882 // =========================================================================== |
883 // Getters for spaces. ======================================================= | 883 // Getters for spaces. ======================================================= |
884 // =========================================================================== | 884 // =========================================================================== |
885 | 885 |
886 // Return the starting address and a mask for the new space. And-masking an | 886 // Return the starting address and a mask for the new space. And-masking an |
887 // address with the mask will result in the start address of the new space | 887 // address with the mask will result in the start address of the new space |
888 // for all addresses in either semispace. | 888 // for all addresses in either semispace. |
889 Address NewSpaceStart() { return new_space_.start(); } | 889 Address NewSpaceStart() { return new_space_.start(); } |
890 uintptr_t NewSpaceMask() { return new_space_.mask(); } | |
891 Address NewSpaceTop() { return new_space_.top(); } | 890 Address NewSpaceTop() { return new_space_.top(); } |
892 | 891 |
893 NewSpace* new_space() { return &new_space_; } | 892 NewSpace* new_space() { return &new_space_; } |
894 OldSpace* old_space() { return old_space_; } | 893 OldSpace* old_space() { return old_space_; } |
895 OldSpace* code_space() { return code_space_; } | 894 OldSpace* code_space() { return code_space_; } |
896 MapSpace* map_space() { return map_space_; } | 895 MapSpace* map_space() { return map_space_; } |
897 LargeObjectSpace* lo_space() { return lo_space_; } | 896 LargeObjectSpace* lo_space() { return lo_space_; } |
898 | 897 |
899 PagedSpace* paged_space(int idx) { | 898 PagedSpace* paged_space(int idx) { |
900 switch (idx) { | 899 switch (idx) { |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1077 | 1076 |
1078 void IterateAndMarkPointersToFromSpace(HeapObject* object, Address start, | 1077 void IterateAndMarkPointersToFromSpace(HeapObject* object, Address start, |
1079 Address end, bool record_slots, | 1078 Address end, bool record_slots, |
1080 ObjectSlotCallback callback); | 1079 ObjectSlotCallback callback); |
1081 | 1080 |
1082 // =========================================================================== | 1081 // =========================================================================== |
1083 // Store buffer API. ========================================================= | 1082 // Store buffer API. ========================================================= |
1084 // =========================================================================== | 1083 // =========================================================================== |
1085 | 1084 |
1086 // Write barrier support for address[offset] = o. | 1085 // Write barrier support for address[offset] = o. |
1087 INLINE(void RecordWrite(Address address, int offset)); | 1086 inline void RecordWriteSlow(Address address, int offset); |
Hannes Payer (out of office)
2016/02/08 16:05:40
As discussed offline, this one should become Objec
Michael Lippautz
2016/02/08 18:00:38
The only remaining interface now is
// Write bar
| |
1088 | 1087 |
1089 // Write barrier support for address[start : start + len[ = o. | 1088 // Write barrier support for object[offset] = o; |
1090 INLINE(void RecordWrites(Address address, int start, int len)); | 1089 inline void RecordWrite(Object* object, int offset); |
1091 | 1090 |
1092 Address* store_buffer_top_address() { | 1091 Address* store_buffer_top_address() { |
1093 return reinterpret_cast<Address*>(&roots_[kStoreBufferTopRootIndex]); | 1092 return reinterpret_cast<Address*>(&roots_[kStoreBufferTopRootIndex]); |
1094 } | 1093 } |
1095 | 1094 |
1096 // =========================================================================== | 1095 // =========================================================================== |
1097 // Incremental marking API. ================================================== | 1096 // Incremental marking API. ================================================== |
1098 // =========================================================================== | 1097 // =========================================================================== |
1099 | 1098 |
1100 // Start incremental marking and ensure that idle time handler can perform | 1099 // Start incremental marking and ensure that idle time handler can perform |
(...skipping 23 matching lines...) Expand all Loading... | |
1124 // Finalizes an external string by deleting the associated external | 1123 // Finalizes an external string by deleting the associated external |
1125 // data and clearing the resource pointer. | 1124 // data and clearing the resource pointer. |
1126 inline void FinalizeExternalString(String* string); | 1125 inline void FinalizeExternalString(String* string); |
1127 | 1126 |
1128 // =========================================================================== | 1127 // =========================================================================== |
1129 // Methods checking/returning the space of a given object/address. =========== | 1128 // Methods checking/returning the space of a given object/address. =========== |
1130 // =========================================================================== | 1129 // =========================================================================== |
1131 | 1130 |
1132 // Returns whether the object resides in new space. | 1131 // Returns whether the object resides in new space. |
1133 inline bool InNewSpace(Object* object); | 1132 inline bool InNewSpace(Object* object); |
1134 inline bool InNewSpace(Address address); | |
1135 inline bool InNewSpacePage(Address address); | |
1136 inline bool InFromSpace(Object* object); | 1133 inline bool InFromSpace(Object* object); |
1137 inline bool InToSpace(Object* object); | 1134 inline bool InToSpace(Object* object); |
1135 inline bool InNewSpaceSlow(Address address); | |
Hannes Payer (out of office)
2016/02/08 16:05:40
InNewSpaceSlow seems to be not necessary anymore.
Michael Lippautz
2016/02/08 18:00:38
Unfortunately I think this one needs to stay right
Hannes Payer (out of office)
2016/02/08 21:33:51
I think you mentioned this already last week: if y
Michael Lippautz
2016/02/09 08:03:06
Done. The live object check is quite expensive (al
| |
1138 | 1136 |
1139 // Returns whether the object resides in old space. | 1137 // Returns whether the object resides in old space. |
1140 inline bool InOldSpace(Address address); | 1138 inline bool InOldSpace(Address address); |
1141 inline bool InOldSpace(Object* object); | 1139 inline bool InOldSpace(Object* object); |
1142 | 1140 |
1143 // Checks whether an address/object in the heap (including auxiliary | 1141 // Checks whether an address/object in the heap (including auxiliary |
1144 // area and unused area). | 1142 // area and unused area). |
1145 bool Contains(Address addr); | 1143 bool Contains(Address addr); |
Hannes Payer (out of office)
2016/02/08 16:05:40
Can we delete Contains(Address addr)? It seems lik
Michael Lippautz
2016/02/08 18:00:38
"Done." See general description above.
| |
1146 bool Contains(HeapObject* value); | 1144 bool Contains(HeapObject* value); |
1147 | 1145 |
1148 // Checks whether an address/object in a space. | 1146 // Checks whether an address/object in a space. |
1149 // Currently used by tests, serialization and heap verification only. | 1147 // Currently used by tests, serialization and heap verification only. |
1150 bool InSpace(Address addr, AllocationSpace space); | 1148 bool InSpace(Address addr, AllocationSpace space); |
1151 bool InSpace(HeapObject* value, AllocationSpace space); | 1149 bool InSpace(HeapObject* value, AllocationSpace space); |
1152 | 1150 |
1153 // =========================================================================== | 1151 // =========================================================================== |
1154 // Object statistics tracking. =============================================== | 1152 // Object statistics tracking. =============================================== |
1155 // =========================================================================== | 1153 // =========================================================================== |
(...skipping 1498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2654 | 2652 |
2655 private: | 2653 private: |
2656 friend class NewSpace; | 2654 friend class NewSpace; |
2657 DISALLOW_COPY_AND_ASSIGN(InlineAllocationObserver); | 2655 DISALLOW_COPY_AND_ASSIGN(InlineAllocationObserver); |
2658 }; | 2656 }; |
2659 | 2657 |
2660 } // namespace internal | 2658 } // namespace internal |
2661 } // namespace v8 | 2659 } // namespace v8 |
2662 | 2660 |
2663 #endif // V8_HEAP_HEAP_H_ | 2661 #endif // V8_HEAP_HEAP_H_ |
OLD | NEW |