| 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/heap/mark-compact.h" | 9 #include "src/heap/mark-compact.h" |
| 10 #include "src/macro-assembler.h" | 10 #include "src/macro-assembler.h" |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 current_allocation_block_index_ = 0; | 179 current_allocation_block_index_ = 0; |
| 180 // Code range is full or too fragmented. | 180 // Code range is full or too fragmented. |
| 181 return false; | 181 return false; |
| 182 } | 182 } |
| 183 | 183 |
| 184 | 184 |
| 185 Address CodeRange::AllocateRawMemory(const size_t requested_size, | 185 Address CodeRange::AllocateRawMemory(const size_t requested_size, |
| 186 const size_t commit_size, | 186 const size_t commit_size, |
| 187 size_t* allocated) { | 187 size_t* allocated) { |
| 188 DCHECK(commit_size <= requested_size); | 188 DCHECK(commit_size <= requested_size); |
| 189 DCHECK(current_allocation_block_index_ < allocation_list_.length()); | 189 DCHECK(allocation_list_.length() == 0 || |
| 190 if (requested_size > allocation_list_[current_allocation_block_index_].size) { | 190 current_allocation_block_index_ < allocation_list_.length()); |
| 191 if (allocation_list_.length() == 0 || |
| 192 requested_size > allocation_list_[current_allocation_block_index_].size) { |
| 191 // Find an allocation block large enough. | 193 // Find an allocation block large enough. |
| 192 if (!GetNextAllocationBlock(requested_size)) return NULL; | 194 if (!GetNextAllocationBlock(requested_size)) return NULL; |
| 193 } | 195 } |
| 194 // Commit the requested memory at the start of the current allocation block. | 196 // Commit the requested memory at the start of the current allocation block. |
| 195 size_t aligned_requested = RoundUp(requested_size, MemoryChunk::kAlignment); | 197 size_t aligned_requested = RoundUp(requested_size, MemoryChunk::kAlignment); |
| 196 FreeBlock current = allocation_list_[current_allocation_block_index_]; | 198 FreeBlock current = allocation_list_[current_allocation_block_index_]; |
| 197 if (aligned_requested >= (current.size - Page::kPageSize)) { | 199 if (aligned_requested >= (current.size - Page::kPageSize)) { |
| 198 // Don't leave a small free block, useless for a large object or chunk. | 200 // Don't leave a small free block, useless for a large object or chunk. |
| 199 *allocated = current.size; | 201 *allocated = current.size; |
| 200 } else { | 202 } else { |
| 201 *allocated = aligned_requested; | 203 *allocated = aligned_requested; |
| 202 } | 204 } |
| 203 DCHECK(*allocated <= current.size); | 205 DCHECK(*allocated <= current.size); |
| 204 DCHECK(IsAddressAligned(current.start, MemoryChunk::kAlignment)); | 206 DCHECK(IsAddressAligned(current.start, MemoryChunk::kAlignment)); |
| 205 if (!isolate_->memory_allocator()->CommitExecutableMemory( | 207 if (!isolate_->memory_allocator()->CommitExecutableMemory( |
| 206 code_range_, current.start, commit_size, *allocated)) { | 208 code_range_, current.start, commit_size, *allocated)) { |
| 207 *allocated = 0; | 209 *allocated = 0; |
| 208 return NULL; | 210 return NULL; |
| 209 } | 211 } |
| 210 allocation_list_[current_allocation_block_index_].start += *allocated; | 212 allocation_list_[current_allocation_block_index_].start += *allocated; |
| 211 allocation_list_[current_allocation_block_index_].size -= *allocated; | 213 allocation_list_[current_allocation_block_index_].size -= *allocated; |
| 212 if (*allocated == current.size) { | 214 if (*allocated == current.size) { |
| 213 // This block is used up, get the next one. | 215 // This block is used up, get the next one. |
| 214 if (!GetNextAllocationBlock(0)) return NULL; | 216 GetNextAllocationBlock(0); |
| 215 } | 217 } |
| 216 return current.start; | 218 return current.start; |
| 217 } | 219 } |
| 218 | 220 |
| 219 | 221 |
| 220 bool CodeRange::CommitRawMemory(Address start, size_t length) { | 222 bool CodeRange::CommitRawMemory(Address start, size_t length) { |
| 221 return isolate_->memory_allocator()->CommitMemory(start, length, EXECUTABLE); | 223 return isolate_->memory_allocator()->CommitMemory(start, length, EXECUTABLE); |
| 222 } | 224 } |
| 223 | 225 |
| 224 | 226 |
| (...skipping 2870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3095 object->ShortPrint(); | 3097 object->ShortPrint(); |
| 3096 PrintF("\n"); | 3098 PrintF("\n"); |
| 3097 } | 3099 } |
| 3098 printf(" --------------------------------------\n"); | 3100 printf(" --------------------------------------\n"); |
| 3099 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); | 3101 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); |
| 3100 } | 3102 } |
| 3101 | 3103 |
| 3102 #endif // DEBUG | 3104 #endif // DEBUG |
| 3103 } | 3105 } |
| 3104 } // namespace v8::internal | 3106 } // namespace v8::internal |
| OLD | NEW |