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_INL_H_ | 5 #ifndef V8_HEAP_HEAP_INL_H_ |
6 #define V8_HEAP_HEAP_INL_H_ | 6 #define V8_HEAP_HEAP_INL_H_ |
7 | 7 |
8 #include <cmath> | 8 #include <cmath> |
9 | 9 |
10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 AllocationSpace AllocationResult::RetrySpace() { | 31 AllocationSpace AllocationResult::RetrySpace() { |
32 DCHECK(IsRetry()); | 32 DCHECK(IsRetry()); |
33 return static_cast<AllocationSpace>(Smi::cast(object_)->value()); | 33 return static_cast<AllocationSpace>(Smi::cast(object_)->value()); |
34 } | 34 } |
35 | 35 |
36 HeapObject* AllocationResult::ToObjectChecked() { | 36 HeapObject* AllocationResult::ToObjectChecked() { |
37 CHECK(!IsRetry()); | 37 CHECK(!IsRetry()); |
38 return HeapObject::cast(object_); | 38 return HeapObject::cast(object_); |
39 } | 39 } |
40 | 40 |
41 void PromotionQueue::insert(HeapObject* target, int32_t size, | 41 void PromotionQueue::insert(HeapObject* target, int32_t size) { |
42 bool was_marked_black) { | |
43 if (emergency_stack_ != NULL) { | 42 if (emergency_stack_ != NULL) { |
44 emergency_stack_->Add(Entry(target, size, was_marked_black)); | 43 emergency_stack_->Add(Entry(target, size)); |
45 return; | 44 return; |
46 } | 45 } |
47 | 46 |
48 if ((rear_ - 1) < limit_) { | 47 if ((rear_ - 1) < limit_) { |
49 RelocateQueueHead(); | 48 RelocateQueueHead(); |
50 emergency_stack_->Add(Entry(target, size, was_marked_black)); | 49 emergency_stack_->Add(Entry(target, size)); |
51 return; | 50 return; |
52 } | 51 } |
53 | 52 |
54 struct Entry* entry = reinterpret_cast<struct Entry*>(--rear_); | 53 struct Entry* entry = reinterpret_cast<struct Entry*>(--rear_); |
55 entry->obj_ = target; | 54 entry->obj_ = target; |
56 entry->size_ = size; | 55 entry->size_ = size; |
57 entry->was_marked_black_ = was_marked_black; | |
58 | 56 |
59 // Assert no overflow into live objects. | 57 // Assert no overflow into live objects. |
60 #ifdef DEBUG | 58 #ifdef DEBUG |
61 SemiSpace::AssertValidRange(target->GetIsolate()->heap()->new_space()->top(), | 59 SemiSpace::AssertValidRange(target->GetIsolate()->heap()->new_space()->top(), |
62 reinterpret_cast<Address>(rear_)); | 60 reinterpret_cast<Address>(rear_)); |
63 #endif | 61 #endif |
64 } | 62 } |
65 | 63 |
66 void PromotionQueue::remove(HeapObject** target, int32_t* size, | 64 void PromotionQueue::remove(HeapObject** target, int32_t* size) { |
67 bool* was_marked_black) { | |
68 DCHECK(!is_empty()); | 65 DCHECK(!is_empty()); |
69 if (front_ == rear_) { | 66 if (front_ == rear_) { |
70 Entry e = emergency_stack_->RemoveLast(); | 67 Entry e = emergency_stack_->RemoveLast(); |
71 *target = e.obj_; | 68 *target = e.obj_; |
72 *size = e.size_; | 69 *size = e.size_; |
73 *was_marked_black = e.was_marked_black_; | |
74 return; | 70 return; |
75 } | 71 } |
76 | 72 |
77 struct Entry* entry = reinterpret_cast<struct Entry*>(--front_); | 73 struct Entry* entry = reinterpret_cast<struct Entry*>(--front_); |
78 *target = entry->obj_; | 74 *target = entry->obj_; |
79 *size = entry->size_; | 75 *size = entry->size_; |
80 *was_marked_black = entry->was_marked_black_; | |
81 | 76 |
82 // Assert no underflow. | 77 // Assert no underflow. |
83 SemiSpace::AssertValidRange(reinterpret_cast<Address>(rear_), | 78 SemiSpace::AssertValidRange(reinterpret_cast<Address>(rear_), |
84 reinterpret_cast<Address>(front_)); | 79 reinterpret_cast<Address>(front_)); |
85 } | 80 } |
86 | 81 |
87 Page* PromotionQueue::GetHeadPage() { | 82 Page* PromotionQueue::GetHeadPage() { |
88 return Page::FromAllocationAreaAddress(reinterpret_cast<Address>(rear_)); | 83 return Page::FromAllocationAreaAddress(reinterpret_cast<Address>(rear_)); |
89 } | 84 } |
90 | 85 |
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
882 void VerifySmisVisitor::VisitRootPointers(Root root, Object** start, | 877 void VerifySmisVisitor::VisitRootPointers(Root root, Object** start, |
883 Object** end) { | 878 Object** end) { |
884 for (Object** current = start; current < end; current++) { | 879 for (Object** current = start; current < end; current++) { |
885 CHECK((*current)->IsSmi()); | 880 CHECK((*current)->IsSmi()); |
886 } | 881 } |
887 } | 882 } |
888 } // namespace internal | 883 } // namespace internal |
889 } // namespace v8 | 884 } // namespace v8 |
890 | 885 |
891 #endif // V8_HEAP_HEAP_INL_H_ | 886 #endif // V8_HEAP_HEAP_INL_H_ |
OLD | NEW |