| 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/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/base/platform/platform.h" | 7 #include "src/base/platform/platform.h" |
| 8 #include "src/full-codegen.h" | 8 #include "src/full-codegen.h" |
| 9 #include "src/macro-assembler.h" | 9 #include "src/macro-assembler.h" |
| 10 #include "src/mark-compact.h" | 10 #include "src/mark-compact.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 size_func); | 60 size_func); |
| 61 ASSERT(page->WasSweptPrecisely()); | 61 ASSERT(page->WasSweptPrecisely()); |
| 62 } | 62 } |
| 63 | 63 |
| 64 | 64 |
| 65 void HeapObjectIterator::Initialize(PagedSpace* space, | 65 void HeapObjectIterator::Initialize(PagedSpace* space, |
| 66 Address cur, Address end, | 66 Address cur, Address end, |
| 67 HeapObjectIterator::PageMode mode, | 67 HeapObjectIterator::PageMode mode, |
| 68 HeapObjectCallback size_f) { | 68 HeapObjectCallback size_f) { |
| 69 // Check that we actually can iterate this space. | 69 // Check that we actually can iterate this space. |
| 70 ASSERT(space->is_iterable()); | 70 ASSERT(space->swept_precisely()); |
| 71 | 71 |
| 72 space_ = space; | 72 space_ = space; |
| 73 cur_addr_ = cur; | 73 cur_addr_ = cur; |
| 74 cur_end_ = end; | 74 cur_end_ = end; |
| 75 page_mode_ = mode; | 75 page_mode_ = mode; |
| 76 size_func_ = size_f; | 76 size_func_ = size_f; |
| 77 } | 77 } |
| 78 | 78 |
| 79 | 79 |
| 80 // We have hit the end of the page and should advance to the next block of | 80 // We have hit the end of the page and should advance to the next block of |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 chunk->area_start_ = area_start; | 472 chunk->area_start_ = area_start; |
| 473 chunk->area_end_ = area_end; | 473 chunk->area_end_ = area_end; |
| 474 chunk->flags_ = 0; | 474 chunk->flags_ = 0; |
| 475 chunk->set_owner(owner); | 475 chunk->set_owner(owner); |
| 476 chunk->InitializeReservedMemory(); | 476 chunk->InitializeReservedMemory(); |
| 477 chunk->slots_buffer_ = NULL; | 477 chunk->slots_buffer_ = NULL; |
| 478 chunk->skip_list_ = NULL; | 478 chunk->skip_list_ = NULL; |
| 479 chunk->write_barrier_counter_ = kWriteBarrierCounterGranularity; | 479 chunk->write_barrier_counter_ = kWriteBarrierCounterGranularity; |
| 480 chunk->progress_bar_ = 0; | 480 chunk->progress_bar_ = 0; |
| 481 chunk->high_water_mark_ = static_cast<int>(area_start - base); | 481 chunk->high_water_mark_ = static_cast<int>(area_start - base); |
| 482 chunk->set_parallel_sweeping(PARALLEL_SWEEPING_DONE); | 482 chunk->set_parallel_sweeping(SWEEPING_DONE); |
| 483 chunk->available_in_small_free_list_ = 0; | 483 chunk->available_in_small_free_list_ = 0; |
| 484 chunk->available_in_medium_free_list_ = 0; | 484 chunk->available_in_medium_free_list_ = 0; |
| 485 chunk->available_in_large_free_list_ = 0; | 485 chunk->available_in_large_free_list_ = 0; |
| 486 chunk->available_in_huge_free_list_ = 0; | 486 chunk->available_in_huge_free_list_ = 0; |
| 487 chunk->non_available_small_blocks_ = 0; | 487 chunk->non_available_small_blocks_ = 0; |
| 488 chunk->ResetLiveBytes(); | 488 chunk->ResetLiveBytes(); |
| 489 Bitmap::Clear(chunk); | 489 Bitmap::Clear(chunk); |
| 490 chunk->initialize_scan_on_scavenge(false); | 490 chunk->initialize_scan_on_scavenge(false); |
| 491 chunk->SetFlag(WAS_SWEPT_PRECISELY); | 491 chunk->SetFlag(WAS_SWEPT_PRECISELY); |
| 492 | 492 |
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 928 | 928 |
| 929 // ----------------------------------------------------------------------------- | 929 // ----------------------------------------------------------------------------- |
| 930 // PagedSpace implementation | 930 // PagedSpace implementation |
| 931 | 931 |
| 932 PagedSpace::PagedSpace(Heap* heap, | 932 PagedSpace::PagedSpace(Heap* heap, |
| 933 intptr_t max_capacity, | 933 intptr_t max_capacity, |
| 934 AllocationSpace id, | 934 AllocationSpace id, |
| 935 Executability executable) | 935 Executability executable) |
| 936 : Space(heap, id, executable), | 936 : Space(heap, id, executable), |
| 937 free_list_(this), | 937 free_list_(this), |
| 938 is_iterable_(true), | 938 swept_precisely_(true), |
| 939 unswept_free_bytes_(0), | 939 unswept_free_bytes_(0), |
| 940 end_of_unswept_pages_(NULL) { | 940 end_of_unswept_pages_(NULL) { |
| 941 if (id == CODE_SPACE) { | 941 if (id == CODE_SPACE) { |
| 942 area_size_ = heap->isolate()->memory_allocator()-> | 942 area_size_ = heap->isolate()->memory_allocator()-> |
| 943 CodePageAreaSize(); | 943 CodePageAreaSize(); |
| 944 } else { | 944 } else { |
| 945 area_size_ = Page::kPageSize - Page::kObjectStartOffset; | 945 area_size_ = Page::kPageSize - Page::kObjectStartOffset; |
| 946 } | 946 } |
| 947 max_capacity_ = (RoundDown(max_capacity, Page::kPageSize) / Page::kPageSize) | 947 max_capacity_ = (RoundDown(max_capacity, Page::kPageSize) / Page::kPageSize) |
| 948 * AreaSize(); | 948 * AreaSize(); |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1150 } | 1150 } |
| 1151 | 1151 |
| 1152 | 1152 |
| 1153 #ifdef DEBUG | 1153 #ifdef DEBUG |
| 1154 void PagedSpace::Print() { } | 1154 void PagedSpace::Print() { } |
| 1155 #endif | 1155 #endif |
| 1156 | 1156 |
| 1157 #ifdef VERIFY_HEAP | 1157 #ifdef VERIFY_HEAP |
| 1158 void PagedSpace::Verify(ObjectVisitor* visitor) { | 1158 void PagedSpace::Verify(ObjectVisitor* visitor) { |
| 1159 // We can only iterate over the pages if they were swept precisely. | 1159 // We can only iterate over the pages if they were swept precisely. |
| 1160 if (!is_iterable_) return; | 1160 if (!swept_precisely_) return; |
| 1161 | 1161 |
| 1162 bool allocation_pointer_found_in_space = | 1162 bool allocation_pointer_found_in_space = |
| 1163 (allocation_info_.top() == allocation_info_.limit()); | 1163 (allocation_info_.top() == allocation_info_.limit()); |
| 1164 PageIterator page_iterator(this); | 1164 PageIterator page_iterator(this); |
| 1165 while (page_iterator.has_next()) { | 1165 while (page_iterator.has_next()) { |
| 1166 Page* page = page_iterator.next(); | 1166 Page* page = page_iterator.next(); |
| 1167 CHECK(page->owner() == this); | 1167 CHECK(page->owner() == this); |
| 1168 if (page == Page::FromAllocationTop(allocation_info_.top())) { | 1168 if (page == Page::FromAllocationTop(allocation_info_.top())) { |
| 1169 allocation_pointer_found_in_space = true; | 1169 allocation_pointer_found_in_space = true; |
| 1170 } | 1170 } |
| (...skipping 1597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2768 } | 2768 } |
| 2769 | 2769 |
| 2770 | 2770 |
| 2771 void PagedSpace::ReportStatistics() { | 2771 void PagedSpace::ReportStatistics() { |
| 2772 int pct = static_cast<int>(Available() * 100 / Capacity()); | 2772 int pct = static_cast<int>(Available() * 100 / Capacity()); |
| 2773 PrintF(" capacity: %" V8_PTR_PREFIX "d" | 2773 PrintF(" capacity: %" V8_PTR_PREFIX "d" |
| 2774 ", waste: %" V8_PTR_PREFIX "d" | 2774 ", waste: %" V8_PTR_PREFIX "d" |
| 2775 ", available: %" V8_PTR_PREFIX "d, %%%d\n", | 2775 ", available: %" V8_PTR_PREFIX "d, %%%d\n", |
| 2776 Capacity(), Waste(), Available(), pct); | 2776 Capacity(), Waste(), Available(), pct); |
| 2777 | 2777 |
| 2778 if (!is_iterable_) return; | 2778 if (!swept_precisely_) return; |
| 2779 ClearHistograms(heap()->isolate()); | 2779 ClearHistograms(heap()->isolate()); |
| 2780 HeapObjectIterator obj_it(this); | 2780 HeapObjectIterator obj_it(this); |
| 2781 for (HeapObject* obj = obj_it.Next(); obj != NULL; obj = obj_it.Next()) | 2781 for (HeapObject* obj = obj_it.Next(); obj != NULL; obj = obj_it.Next()) |
| 2782 CollectHistogramInfo(obj); | 2782 CollectHistogramInfo(obj); |
| 2783 ReportHistogram(heap()->isolate(), true); | 2783 ReportHistogram(heap()->isolate(), true); |
| 2784 } | 2784 } |
| 2785 #endif | 2785 #endif |
| 2786 | 2786 |
| 2787 | 2787 |
| 2788 // ----------------------------------------------------------------------------- | 2788 // ----------------------------------------------------------------------------- |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3150 object->ShortPrint(); | 3150 object->ShortPrint(); |
| 3151 PrintF("\n"); | 3151 PrintF("\n"); |
| 3152 } | 3152 } |
| 3153 printf(" --------------------------------------\n"); | 3153 printf(" --------------------------------------\n"); |
| 3154 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); | 3154 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); |
| 3155 } | 3155 } |
| 3156 | 3156 |
| 3157 #endif // DEBUG | 3157 #endif // DEBUG |
| 3158 | 3158 |
| 3159 } } // namespace v8::internal | 3159 } } // namespace v8::internal |
| OLD | NEW |