OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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/heap/spaces.h" | 5 #include "src/heap/spaces.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
(...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
788 | 788 |
789 #ifdef DEBUG | 789 #ifdef DEBUG |
790 // Check the the filler is indeed the last filler on the page. | 790 // Check the the filler is indeed the last filler on the page. |
791 HeapObjectIterator it(this); | 791 HeapObjectIterator it(this); |
792 HeapObject* filler2 = nullptr; | 792 HeapObject* filler2 = nullptr; |
793 for (HeapObject* obj = it.Next(); obj != nullptr; obj = it.Next()) { | 793 for (HeapObject* obj = it.Next(); obj != nullptr; obj = it.Next()) { |
794 filler2 = HeapObject::FromAddress(obj->address() + obj->Size()); | 794 filler2 = HeapObject::FromAddress(obj->address() + obj->Size()); |
795 } | 795 } |
796 if (filler2 == nullptr || filler2->address() == area_end()) return 0; | 796 if (filler2 == nullptr || filler2->address() == area_end()) return 0; |
797 DCHECK(filler2->IsFiller()); | 797 DCHECK(filler2->IsFiller()); |
| 798 // The deserializer might leave behind fillers. In this case we need to |
| 799 // iterate even further. |
| 800 while ((filler2->address() + filler2->Size()) != area_end()) { |
| 801 filler2 = HeapObject::FromAddress(filler2->address() + filler2->Size()); |
| 802 DCHECK(filler2->IsFiller()); |
| 803 } |
798 DCHECK_EQ(filler->address(), filler2->address()); | 804 DCHECK_EQ(filler->address(), filler2->address()); |
799 #endif // DEBUG | 805 #endif // DEBUG |
800 | 806 |
801 size_t unused = RoundDown( | 807 size_t unused = RoundDown( |
802 static_cast<size_t>(area_end() - filler->address() - FreeSpace::kSize), | 808 static_cast<size_t>(area_end() - filler->address() - FreeSpace::kSize), |
803 base::OS::CommitPageSize()); | 809 base::OS::CommitPageSize()); |
804 if (unused > 0) { | 810 if (unused > 0) { |
805 if (FLAG_trace_gc_verbose) { | 811 if (FLAG_trace_gc_verbose) { |
806 PrintIsolate(heap()->isolate(), "Shrinking page %p: end %p -> %p\n", | 812 PrintIsolate(heap()->isolate(), "Shrinking page %p: end %p -> %p\n", |
807 reinterpret_cast<void*>(this), | 813 reinterpret_cast<void*>(this), |
(...skipping 2421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3229 object->ShortPrint(); | 3235 object->ShortPrint(); |
3230 PrintF("\n"); | 3236 PrintF("\n"); |
3231 } | 3237 } |
3232 printf(" --------------------------------------\n"); | 3238 printf(" --------------------------------------\n"); |
3233 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); | 3239 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); |
3234 } | 3240 } |
3235 | 3241 |
3236 #endif // DEBUG | 3242 #endif // DEBUG |
3237 } // namespace internal | 3243 } // namespace internal |
3238 } // namespace v8 | 3244 } // namespace v8 |
OLD | NEW |