OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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 #include "src/snapshot/startup-serializer.h" | 5 #include "src/snapshot/startup-serializer.h" |
6 | 6 |
7 #include "src/objects-inl.h" | 7 #include "src/objects-inl.h" |
8 #include "src/v8threads.h" | 8 #include "src/v8threads.h" |
9 | 9 |
10 namespace v8 { | 10 namespace v8 { |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 CHECK_EQ(0, isolate->eternal_handles()->NumberOfHandles()); | 106 CHECK_EQ(0, isolate->eternal_handles()->NumberOfHandles()); |
107 // We don't support serializing installed extensions. | 107 // We don't support serializing installed extensions. |
108 CHECK(!isolate->has_installed_extensions()); | 108 CHECK(!isolate->has_installed_extensions()); |
109 // First visit immortal immovables to make sure they end up in the first page. | 109 // First visit immortal immovables to make sure they end up in the first page. |
110 serializing_immortal_immovables_roots_ = true; | 110 serializing_immortal_immovables_roots_ = true; |
111 isolate->heap()->IterateStrongRoots(this, VISIT_ONLY_STRONG_ROOT_LIST); | 111 isolate->heap()->IterateStrongRoots(this, VISIT_ONLY_STRONG_ROOT_LIST); |
112 // Check that immortal immovable roots are allocated on the first page. | 112 // Check that immortal immovable roots are allocated on the first page. |
113 CHECK(HasNotExceededFirstPageOfEachSpace()); | 113 CHECK(HasNotExceededFirstPageOfEachSpace()); |
114 serializing_immortal_immovables_roots_ = false; | 114 serializing_immortal_immovables_roots_ = false; |
115 // Visit the rest of the strong roots. | 115 // Visit the rest of the strong roots. |
| 116 // Clear the stack limits to make the snapshot reproducible. |
| 117 // Reset it again afterwards. |
| 118 isolate->heap()->ClearStackLimits(); |
116 isolate->heap()->IterateSmiRoots(this); | 119 isolate->heap()->IterateSmiRoots(this); |
| 120 isolate->heap()->SetStackLimits(); |
| 121 |
117 isolate->heap()->IterateStrongRoots(this, | 122 isolate->heap()->IterateStrongRoots(this, |
118 VISIT_ONLY_STRONG_FOR_SERIALIZATION); | 123 VISIT_ONLY_STRONG_FOR_SERIALIZATION); |
119 } | 124 } |
120 | 125 |
121 void StartupSerializer::VisitPointers(Object** start, Object** end) { | 126 void StartupSerializer::VisitPointers(Object** start, Object** end) { |
122 if (start == isolate()->heap()->roots_array_start()) { | 127 if (start == isolate()->heap()->roots_array_start()) { |
123 // Serializing the root list needs special handling: | 128 // Serializing the root list needs special handling: |
124 // - The first pass over the root list only serializes immortal immovables. | 129 // - The first pass over the root list only serializes immortal immovables. |
125 // - The second pass over the root list serializes the rest. | 130 // - The second pass over the root list serializes the rest. |
126 // - Only root list elements that have been fully serialized can be | 131 // - Only root list elements that have been fully serialized can be |
(...skipping 26 matching lines...) Expand all Loading... |
153 if (root_index == Heap::kStackLimitRootIndex || | 158 if (root_index == Heap::kStackLimitRootIndex || |
154 root_index == Heap::kRealStackLimitRootIndex) { | 159 root_index == Heap::kRealStackLimitRootIndex) { |
155 return true; | 160 return true; |
156 } | 161 } |
157 return Heap::RootIsImmortalImmovable(root_index) != | 162 return Heap::RootIsImmortalImmovable(root_index) != |
158 serializing_immortal_immovables_roots_; | 163 serializing_immortal_immovables_roots_; |
159 } | 164 } |
160 | 165 |
161 } // namespace internal | 166 } // namespace internal |
162 } // namespace v8 | 167 } // namespace v8 |
OLD | NEW |