Chromium Code Reviews| Index: vm/snapshot.h |
| =================================================================== |
| --- vm/snapshot.h (revision 8411) |
| +++ vm/snapshot.h (working copy) |
| @@ -18,11 +18,13 @@ |
| // Forward declarations. |
| class AbstractType; |
| class AbstractTypeArguments; |
| +class Array; |
| class Class; |
| class Heap; |
| class Library; |
| class Object; |
| class ObjectStore; |
| +class RawAbstractTypeArguments; |
| class RawArray; |
| class RawBigint; |
| class RawClass; |
| @@ -355,11 +357,12 @@ |
| // Reads an object. |
| RawObject* ReadObject(); |
| - RawClass* ReadClassId(intptr_t object_id); |
| - |
| // Add object to backward references. |
| - void AddBackwardReference(intptr_t id, Object* obj); |
| + void AddBackwardReference(intptr_t id, Object* obj, bool is_deserialized); |
|
cshapiro
2012/06/08 22:04:39
Can we make this an enum instead of a bool?
siva
2012/06/11 20:49:06
Done.
|
| + // Get an object from the backward references list. |
| + Object* GetBackwardReference(intptr_t id); |
| + |
| // Read a full snap shot. |
| void ReadFullSnapshot(); |
| @@ -390,11 +393,28 @@ |
| RawGrowableObjectArray* NewGrowableObjectArray(); |
| private: |
| + class BackwardReferenceNode : public ZoneAllocated { |
| + public: |
| + BackwardReferenceNode(Object* reference, bool is_deserialized) |
|
cshapiro
2012/06/08 22:04:39
same here
siva
2012/06/11 20:49:06
Done.
|
| + : reference_(reference), is_deserialized_(is_deserialized) {} |
| + Object* reference() const { return reference_; } |
| + bool is_deserialized() const { return is_deserialized_; } |
| + void set_is_deserialized(bool value) { is_deserialized_ = value; } |
| + |
| + private: |
| + Object* reference_; |
| + bool is_deserialized_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(BackwardReferenceNode); |
| + }; |
| + |
| // Allocate uninitialized objects, this is used when reading a full snapshot. |
| RawObject* AllocateUninitialized(const Class& cls, intptr_t size); |
| - // Internal implementation of ReadObject once the header value is read. |
| + RawClass* ReadClassId(intptr_t object_id); |
| + RawObject* ReadObjectImpl(); |
| RawObject* ReadObjectImpl(intptr_t header); |
| + RawObject* ReadObjectRef(); |
| // Read an object that was serialized as an Id (singleton, object store, |
| // or an object that was already serialized before). |
| @@ -406,6 +426,8 @@ |
| // Based on header field check to see if it is an internal VM class. |
| RawClass* LookupInternalClass(intptr_t class_header); |
| + void ArrayReadFrom(const Array& result, intptr_t len, intptr_t tags); |
| + |
| Snapshot::Kind kind_; // Indicates type of snapshot(full, script, message). |
| Isolate* isolate_; // Current isolate. |
| Class& cls_; // Temporary Class handle. |
| @@ -414,8 +436,27 @@ |
| Library& library_; // Temporary library handle. |
| AbstractType& type_; // Temporary type handle. |
| AbstractTypeArguments& type_arguments_; // Temporary type argument handle. |
| - GrowableArray<Object*> backward_references_; |
| + GrowableArray<BackwardReferenceNode*> backward_references_; |
| + friend class Array; |
| + friend class Class; |
| + friend class Context; |
| + friend class ContextScope; |
| + friend class Field; |
| + friend class Function; |
| + friend class GrowableObjectArray; |
| + friend class ImmutableArray; |
| + friend class InstantiatedTypeArguments; |
| + friend class JSRegExp; |
| + friend class Library; |
| + friend class LibraryPrefix; |
| + friend class LiteralToken; |
| + friend class Script; |
| + friend class TokenStream; |
| + friend class Type; |
| + friend class TypeArguments; |
| + friend class TypeParameter; |
| + friend class UnresolvedClass; |
| DISALLOW_COPY_AND_ASSIGN(SnapshotReader); |
| }; |
| @@ -508,11 +549,6 @@ |
| // Serialize an object into the buffer. |
| void WriteObject(RawObject* raw); |
| - void WriteClassId(RawClass* cls); |
| - |
| - // Unmark all objects that were marked as forwarded for serializing. |
| - void UnmarkAll(); |
| - |
| // Writes a full snapshot of the Isolate. |
| void WriteFullSnapshot(); |
| @@ -521,22 +557,37 @@ |
| private: |
| class ForwardObjectNode : public ZoneAllocated { |
| public: |
| - ForwardObjectNode(RawObject* raw, uword tags) : raw_(raw), tags_(tags) {} |
| + ForwardObjectNode(RawObject* raw, uword tags, bool is_serialized) |
|
cshapiro
2012/06/08 22:04:39
same here
siva
2012/06/11 20:49:06
Done.
|
| + : raw_(raw), tags_(tags), is_serialized_(is_serialized) {} |
| RawObject* raw() const { return raw_; } |
| uword tags() const { return tags_; } |
| + bool is_serialized() const { return is_serialized_; } |
| + void set_is_serialized(bool value) { is_serialized_ = value; } |
| private: |
| RawObject* raw_; |
| uword tags_; |
| + bool is_serialized_; |
| DISALLOW_COPY_AND_ASSIGN(ForwardObjectNode); |
| }; |
| - intptr_t MarkObject(RawObject* raw); |
| + intptr_t MarkObject(RawObject* raw, bool is_serialized); |
|
cshapiro
2012/06/08 22:04:39
same here
siva
2012/06/11 20:49:06
Done.
|
| + void UnmarkAll(); |
| bool CheckAndWritePredefinedObject(RawObject* raw); |
| + void WriteObjectRef(RawObject* raw); |
| + void WriteClassId(RawClass* cls); |
| + void WriteObjectImpl(RawObject* raw); |
| void WriteInlinedObject(RawObject* raw); |
| + void WriteForwardedObjects(); |
| + void ArrayWriteTo(intptr_t object_id, |
| + intptr_t array_kind, |
| + intptr_t tags, |
| + RawSmi* length, |
| + RawAbstractTypeArguments* type_arguments, |
| + RawObject* data[]); |
| ObjectStore* object_store() const { return object_store_; } |
| @@ -545,6 +596,17 @@ |
| ClassTable* class_table_; // Class table for the class index to class lookup. |
| GrowableArray<ForwardObjectNode*> forward_list_; |
| + friend class RawArray; |
| + friend class RawClass; |
| + friend class RawGrowableObjectArray; |
| + friend class RawImmutableArray; |
| + friend class RawJSRegExp; |
| + friend class RawLibrary; |
| + friend class RawLiteralToken; |
| + friend class RawScript; |
| + friend class RawTokenStream; |
| + friend class RawTypeArguments; |
| + friend class SnapshotWriterVisitor; |
| DISALLOW_COPY_AND_ASSIGN(SnapshotWriter); |
| }; |
| @@ -571,12 +633,20 @@ |
| class SnapshotWriterVisitor : public ObjectPointerVisitor { |
| public: |
| explicit SnapshotWriterVisitor(SnapshotWriter* writer) |
| - : ObjectPointerVisitor(Isolate::Current()), writer_(writer) {} |
| + : ObjectPointerVisitor(Isolate::Current()), |
| + writer_(writer), |
| + as_references_(true) {} |
| + SnapshotWriterVisitor(SnapshotWriter* writer, bool as_references) |
| + : ObjectPointerVisitor(Isolate::Current()), |
| + writer_(writer), |
| + as_references_(as_references) {} |
| + |
| virtual void VisitPointers(RawObject** first, RawObject** last); |
| private: |
| SnapshotWriter* writer_; |
| + bool as_references_; |
| DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); |
| }; |