Chromium Code Reviews| 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/bits.h" | 7 #include "src/base/bits.h" |
| 8 #include "src/base/platform/platform.h" | 8 #include "src/base/platform/platform.h" |
| 9 #include "src/full-codegen.h" | 9 #include "src/full-codegen.h" |
| 10 #include "src/heap/mark-compact.h" | 10 #include "src/heap/mark-compact.h" |
| (...skipping 2822 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2833 | 2833 |
| 2834 AllocationResult LargeObjectSpace::AllocateRaw(int object_size, | 2834 AllocationResult LargeObjectSpace::AllocateRaw(int object_size, |
| 2835 Executability executable) { | 2835 Executability executable) { |
| 2836 // Check if we want to force a GC before growing the old space further. | 2836 // Check if we want to force a GC before growing the old space further. |
| 2837 // If so, fail the allocation. | 2837 // If so, fail the allocation. |
| 2838 if (!heap()->always_allocate() && | 2838 if (!heap()->always_allocate() && |
| 2839 heap()->OldGenerationAllocationLimitReached()) { | 2839 heap()->OldGenerationAllocationLimitReached()) { |
| 2840 return AllocationResult::Retry(identity()); | 2840 return AllocationResult::Retry(identity()); |
| 2841 } | 2841 } |
| 2842 | 2842 |
| 2843 if (Size() + object_size > max_capacity_) { | 2843 if (!CanAllocateSize(object_size)) return AllocationResult::Retry(identity()); |
| 2844 return AllocationResult::Retry(identity()); | |
| 2845 } | |
| 2846 | 2844 |
| 2847 LargePage* page = heap()->isolate()->memory_allocator()->AllocateLargePage( | 2845 LargePage* page = heap()->isolate()->memory_allocator()->AllocateLargePage( |
| 2848 object_size, this, executable); | 2846 object_size, this, executable); |
| 2849 if (page == NULL) return AllocationResult::Retry(identity()); | 2847 if (page == NULL) return AllocationResult::Retry(identity()); |
| 2850 DCHECK(page->area_size() >= object_size); | 2848 DCHECK(page->area_size() >= object_size); |
| 2851 | 2849 |
| 2852 size_ += static_cast<int>(page->size()); | 2850 size_ += static_cast<int>(page->size()); |
| 2853 objects_size_ += object_size; | 2851 objects_size_ += object_size; |
| 2854 page_count_++; | 2852 page_count_++; |
| 2855 page->set_next_page(first_page_); | 2853 page->set_next_page(first_page_); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 2880 reinterpret_cast<Object**>(object->address())[0] = | 2878 reinterpret_cast<Object**>(object->address())[0] = |
| 2881 heap()->fixed_array_map(); | 2879 heap()->fixed_array_map(); |
| 2882 reinterpret_cast<Object**>(object->address())[1] = Smi::FromInt(0); | 2880 reinterpret_cast<Object**>(object->address())[1] = Smi::FromInt(0); |
| 2883 } | 2881 } |
| 2884 | 2882 |
| 2885 heap()->incremental_marking()->OldSpaceStep(object_size); | 2883 heap()->incremental_marking()->OldSpaceStep(object_size); |
| 2886 return object; | 2884 return object; |
| 2887 } | 2885 } |
| 2888 | 2886 |
| 2889 | 2887 |
| 2888 void LargeObjectSpace::PrepareForDeserialization(int large_objects_total_size) { | |
|
Hannes Payer (out of office)
2014/09/22 18:21:52
This method should not be part of large object spa
| |
| 2889 if (CanAllocateSize(large_objects_total_size)) return; | |
| 2890 heap()->CollectAllAvailableGarbage("prepare for deserialization"); | |
| 2891 if (!CanAllocateSize(large_objects_total_size)) FatalProcessOutOfMemory(); | |
| 2892 } | |
| 2893 | |
| 2894 | |
| 2890 size_t LargeObjectSpace::CommittedPhysicalMemory() { | 2895 size_t LargeObjectSpace::CommittedPhysicalMemory() { |
| 2891 if (!base::VirtualMemory::HasLazyCommits()) return CommittedMemory(); | 2896 if (!base::VirtualMemory::HasLazyCommits()) return CommittedMemory(); |
| 2892 size_t size = 0; | 2897 size_t size = 0; |
| 2893 LargePage* current = first_page_; | 2898 LargePage* current = first_page_; |
| 2894 while (current != NULL) { | 2899 while (current != NULL) { |
| 2895 size += current->CommittedPhysicalMemory(); | 2900 size += current->CommittedPhysicalMemory(); |
| 2896 current = current->next_page(); | 2901 current = current->next_page(); |
| 2897 } | 2902 } |
| 2898 return size; | 2903 return size; |
| 2899 } | 2904 } |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3098 object->ShortPrint(); | 3103 object->ShortPrint(); |
| 3099 PrintF("\n"); | 3104 PrintF("\n"); |
| 3100 } | 3105 } |
| 3101 printf(" --------------------------------------\n"); | 3106 printf(" --------------------------------------\n"); |
| 3102 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); | 3107 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); |
| 3103 } | 3108 } |
| 3104 | 3109 |
| 3105 #endif // DEBUG | 3110 #endif // DEBUG |
| 3106 } | 3111 } |
| 3107 } // namespace v8::internal | 3112 } // namespace v8::internal |
| OLD | NEW |