Index: src/snapshot/serialize.h |
diff --git a/src/snapshot/serialize.h b/src/snapshot/serialize.h |
index ccb1c05e7d3f5cd9265cdd906ffe0c639f60741a..36514e13d391927aa247a4714ff519194effacad 100644 |
--- a/src/snapshot/serialize.h |
+++ b/src/snapshot/serialize.h |
@@ -306,10 +306,6 @@ |
static const int kNumberOfSpaces = LAST_SPACE + 1; |
protected: |
- static bool CanBeDeferred(HeapObject* o) { |
- return !o->IsString() && !o->IsScript(); |
- } |
- |
// ---------- byte code range 0x00..0x7f ---------- |
// Byte codes in this range represent Where, HowToCode and WhereToPoint. |
// Where the pointed-to object can be found: |
@@ -377,8 +373,6 @@ |
static const int kNop = 0x3d; |
// Move to next reserved chunk. |
static const int kNextChunk = 0x3e; |
- // Deferring object content. |
- static const int kDeferred = 0x3f; |
// A tag emitted at strategic points in the snapshot to delineate sections. |
// If the deserializer does not find these at the expected moments then it |
// is an indication that the snapshot and the VM do not fit together. |
@@ -559,22 +553,22 @@ |
memcpy(dest, src, sizeof(*src)); |
} |
- void DeserializeDeferredObjects(); |
+ // Allocation sites are present in the snapshot, and must be linked into |
+ // a list at deserialization time. |
+ void RelinkAllocationSite(AllocationSite* site); |
// Fills in some heap data in an area from start to end (non-inclusive). The |
// space id is used for the write barrier. The object_address is the address |
// of the object we are writing into, or NULL if we are not writing into an |
// object, i.e. if we are writing a series of tagged values that are not on |
- // the heap. Return false if the object content has been deferred. |
- bool ReadData(Object** start, Object** end, int space, |
+ // the heap. |
+ void ReadData(Object** start, Object** end, int space, |
Address object_address); |
void ReadObject(int space_number, Object** write_back); |
Address Allocate(int space_index, int size); |
// Special handling for serialized code like hooking up internalized strings. |
- HeapObject* PostProcessNewObject(HeapObject* obj); |
- |
- void RelinkAllocationSite(AllocationSite* obj); |
+ HeapObject* ProcessNewObjectFromSerializedCode(HeapObject* obj); |
// This returns the address of an object that has been described in the |
// snapshot by chunk index and offset. |
@@ -617,8 +611,6 @@ |
void VisitPointers(Object** start, Object** end) override; |
void EncodeReservations(List<SerializedData::Reservation>* out) const; |
- |
- void SerializeDeferredObjects(); |
Isolate* isolate() const { return isolate_; } |
@@ -642,7 +634,6 @@ |
is_code_object_(o->IsCode()), |
code_has_been_output_(false) {} |
void Serialize(); |
- void SerializeDeferred(); |
void VisitPointers(Object** start, Object** end); |
void VisitEmbeddedPointer(RelocInfo* target); |
void VisitExternalReference(Address* p); |
@@ -684,28 +675,11 @@ |
bool code_has_been_output_; |
}; |
- class RecursionScope { |
- public: |
- explicit RecursionScope(Serializer* serializer) : serializer_(serializer) { |
- serializer_->recursion_depth_++; |
- } |
- ~RecursionScope() { serializer_->recursion_depth_--; } |
- bool ExceedsMaximum() { |
- return serializer_->recursion_depth_ >= kMaxRecursionDepth; |
- } |
- |
- private: |
- static const int kMaxRecursionDepth = 32; |
- Serializer* serializer_; |
- }; |
- |
virtual void SerializeObject(HeapObject* o, HowToCode how_to_code, |
WhereToPoint where_to_point, int skip) = 0; |
void PutRoot(int index, HeapObject* object, HowToCode how, WhereToPoint where, |
int skip); |
- |
- void PutBackReference(HeapObject* object, BackReference reference); |
// Returns true if the object was successfully serialized. |
bool SerializeKnownObject(HeapObject* obj, HowToCode how_to_code, |
@@ -748,11 +722,6 @@ |
SnapshotByteSink* sink() const { return sink_; } |
- void QueueDeferredObject(HeapObject* obj) { |
- DCHECK(back_reference_map_.Lookup(obj).is_valid()); |
- deferred_objects_.Add(obj); |
- } |
- |
void OutputStatistics(const char* name); |
Isolate* isolate_; |
@@ -763,11 +732,8 @@ |
BackReferenceMap back_reference_map_; |
RootIndexMap root_index_map_; |
- int recursion_depth_; |
- |
friend class Deserializer; |
friend class ObjectSerializer; |
- friend class RecursionScope; |
friend class SnapshotData; |
private: |
@@ -785,9 +751,6 @@ |
uint32_t seen_large_objects_index_; |
List<byte> code_buffer_; |
- |
- // To handle stack overflow. |
- List<HeapObject*> deferred_objects_; |
#ifdef OBJECT_PRINT |
static const int kInstanceTypes = 256; |
@@ -834,7 +797,7 @@ |
void SerializeOutdatedContextsAsFixedArray(); |
Serializer* startup_serializer_; |
- List<Context*> outdated_contexts_; |
+ List<BackReference> outdated_contexts_; |
Object* global_object_; |
PartialCacheIndexMap partial_cache_index_map_; |
DISALLOW_COPY_AND_ASSIGN(PartialSerializer); |
@@ -866,10 +829,11 @@ |
virtual void SerializeStrongReferences(); |
virtual void SerializeObject(HeapObject* o, HowToCode how_to_code, |
WhereToPoint where_to_point, int skip) override; |
- void SerializeWeakReferencesAndDeferred(); |
+ void SerializeWeakReferences(); |
void Serialize() { |
SerializeStrongReferences(); |
- SerializeWeakReferencesAndDeferred(); |
+ SerializeWeakReferences(); |
+ Pad(); |
} |
private: |