| // Copyright 2017 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/snapshot/builtin-serializer-allocator.h" |
| |
| #include "src/heap/heap-inl.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| SerializerReference BuiltinSerializerAllocator::Allocate(AllocationSpace space, |
| uint32_t size) { |
| DCHECK_EQ(space, CODE_SPACE); |
| DCHECK_GT(size, 0); |
| |
| // Builtin serialization & deserialization does not use the reservation |
| // system. Instead of worrying about chunk indices and offsets, we simply |
| // need to generate unique offsets here. |
| |
| const uint32_t virtual_chunk_index = 0; |
| const auto ref = SerializerReference::BackReference( |
| CODE_SPACE, virtual_chunk_index, virtual_chunk_offset_); |
| |
| virtual_chunk_size_ += size; |
| virtual_chunk_offset_ += kObjectAlignment; // Needs to be aligned. |
| |
| return ref; |
| } |
| |
| #ifdef DEBUG |
| bool BuiltinSerializerAllocator::BackReferenceIsAlreadyAllocated( |
| SerializerReference reference) const { |
| DCHECK(reference.is_back_reference()); |
| AllocationSpace space = reference.space(); |
| DCHECK_EQ(space, CODE_SPACE); |
| DCHECK_EQ(reference.chunk_index(), 0); |
| return reference.chunk_offset() < virtual_chunk_offset_; |
| } |
| #endif // DEBUG |
| |
| std::vector<SerializedData::Reservation> |
| BuiltinSerializerAllocator::EncodeReservations() const { |
| return std::vector<SerializedData::Reservation>(); |
| } |
| |
| void BuiltinSerializerAllocator::OutputStatistics() { |
| DCHECK(FLAG_serialization_statistics); |
| |
| PrintF(" Spaces (bytes):\n"); |
| |
| STATIC_ASSERT(NEW_SPACE == 0); |
| for (int space = 0; space < kNumberOfSpaces; space++) { |
| PrintF("%16s", AllocationSpaceName(static_cast<AllocationSpace>(space))); |
| } |
| PrintF("\n"); |
| |
| STATIC_ASSERT(NEW_SPACE == 0); |
| for (int space = 0; space < kNumberOfSpaces; space++) { |
| uint32_t space_size = (space == CODE_SPACE) ? virtual_chunk_size_ : 0; |
| PrintF("%16d", space_size); |
| } |
| PrintF("\n"); |
| } |
| |
| } // namespace internal |
| } // namespace v8 |