Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(367)

Unified Diff: runtime/vm/snapshot.h

Issue 383063005: Refactor snapshot writer's forward list into a reusable class. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/snapshot.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/snapshot.h
===================================================================
--- runtime/vm/snapshot.h (revision 38170)
+++ runtime/vm/snapshot.h (working copy)
@@ -487,6 +487,59 @@
};
+class ForwardList {
+ public:
+ explicit ForwardList(intptr_t first_object_id)
+ : first_object_id_(first_object_id),
+ nodes_(),
+ first_unprocessed_object_id_(first_object_id) {}
+
+ class Node : public ZoneAllocated {
+ public:
+ Node(RawObject* raw, uword tags, SerializeState state)
+ : raw_(raw), tags_(tags), state_(state) {}
+ RawObject* raw() const { return raw_; }
+ uword tags() const { return tags_; }
+ bool is_serialized() const { return state_ == kIsSerialized; }
+
+ private:
+ // Private to ensure the invariant of first_unprocessed_object_id_.
+ void set_state(SerializeState value) { state_ = value; }
+
+ RawObject* raw_;
+ uword tags_;
+ SerializeState state_;
+
+ friend class ForwardList;
+ DISALLOW_COPY_AND_ASSIGN(Node);
+ };
+
+ Node* NodeForObjectId(intptr_t object_id) const {
+ return nodes_[object_id - first_object_id_];
+ }
+
+ // Returns the id for the added object.
+ intptr_t MarkAndAddObject(RawObject* raw, SerializeState state);
+
+ // Exhaustively processes all unserialized objects in this list. 'writer' may
+ // concurrently add more objects.
+ void SerializeAll(ObjectVisitor* writer);
+
+ // Restores the tags of all objects in this list.
+ void UnmarkAll() const;
+
+ private:
+ intptr_t first_object_id() const { return first_object_id_; }
+ intptr_t next_object_id() const { return nodes_.length() + first_object_id_; }
+
+ const intptr_t first_object_id_;
+ GrowableArray<Node*> nodes_;
+ intptr_t first_unprocessed_object_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(ForwardList);
+};
+
+
class SnapshotWriter : public BaseWriter {
protected:
SnapshotWriter(Snapshot::Kind kind,
@@ -516,26 +569,10 @@
void ThrowException(Exceptions::ExceptionType type, const char* msg);
protected:
- class ForwardObjectNode : public ZoneAllocated {
- public:
- ForwardObjectNode(RawObject* raw, uword tags, SerializeState state)
- : raw_(raw), tags_(tags), state_(state) {}
- RawObject* raw() const { return raw_; }
- uword tags() const { return tags_; }
- bool is_serialized() const { return state_ == kIsSerialized; }
- void set_state(SerializeState value) { state_ = value; }
+ void UnmarkAll() {
+ forward_list_.UnmarkAll();
+ }
- private:
- RawObject* raw_;
- uword tags_;
- SerializeState state_;
-
- DISALLOW_COPY_AND_ASSIGN(ForwardObjectNode);
- };
-
- intptr_t MarkObject(RawObject* raw, SerializeState state);
- void UnmarkAll();
-
bool CheckAndWritePredefinedObject(RawObject* raw);
void HandleVMIsolateObject(RawObject* raw);
@@ -564,7 +601,7 @@
Snapshot::Kind kind_;
ObjectStore* object_store_; // Object store for common classes.
ClassTable* class_table_; // Class table for the class index to class lookup.
- GrowableArray<ForwardObjectNode*> forward_list_;
+ ForwardList forward_list_;
Exceptions::ExceptionType exception_type_; // Exception type.
const char* exception_msg_; // Message associated with exception.
@@ -576,14 +613,15 @@
friend class RawJSRegExp;
friend class RawLibrary;
friend class RawLiteralToken;
+ friend class RawMirrorReference;
friend class RawReceivePort;
friend class RawScript;
friend class RawStacktrace;
friend class RawTokenStream;
friend class RawTypeArguments;
- friend class RawMirrorReference;
+ friend class RawUserTag;
friend class SnapshotWriterVisitor;
- friend class RawUserTag;
+ friend class WriteInlinedObjectVisitor;
DISALLOW_COPY_AND_ASSIGN(SnapshotWriter);
};
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698