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

Unified Diff: runtime/vm/raw_object_snapshot.cc

Issue 1378423002: Support serializing ObjectPool as reference. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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 | « no previous file | runtime/vm/snapshot.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/raw_object_snapshot.cc
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index d3ec50ea914ec60a4bb2fa8d08c8050a01634eeb..893c0de9439f97ad0ad4370b8840a3977aadf429 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -1306,14 +1306,18 @@ RawObjectPool* ObjectPool::ReadFrom(SnapshotReader* reader,
intptr_t length = reader->Read<intptr_t>();
- ObjectPool& result =
- ObjectPool::ZoneHandle(reader->zone(),
- NEW_OBJECT_WITH_LEN(ObjectPool, length));
- reader->AddBackRef(object_id, &result, kIsDeserialized);
+ ObjectPool* result =
+ reinterpret_cast<ObjectPool*>(reader->GetBackRef(object_id));
+ if (result == NULL) {
+ result =
+ &(ObjectPool::ZoneHandle(reader->zone(),
+ NEW_OBJECT_WITH_LEN(ObjectPool, length)));
+ reader->AddBackRef(object_id, result, kIsDeserialized);
+ }
const TypedData& info_array =
TypedData::Handle(reader->NewTypedData(kTypedDataInt8ArrayCid, length));
- result.set_info_array(info_array);
+ result->set_info_array(info_array);
NoSafepointScope no_safepoint;
for (intptr_t i = 0; i < length; i++) {
@@ -1323,19 +1327,19 @@ RawObjectPool* ObjectPool::ReadFrom(SnapshotReader* reader,
switch (entry_type) {
case ObjectPool::kTaggedObject: {
(*reader->PassiveObjectHandle()) =
- reader->ReadObjectImpl(kAsInlinedObject);
- result.SetObjectAt(i, *(reader->PassiveObjectHandle()));
+ reader->ReadObjectImpl(kAsReference);
+ result->SetObjectAt(i, *(reader->PassiveObjectHandle()));
break;
}
case ObjectPool::kImmediate: {
intptr_t raw_value = reader->Read<intptr_t>();
- result.SetRawValueAt(i, raw_value);
+ result->SetRawValueAt(i, raw_value);
break;
}
case ObjectPool::kNativeEntry: {
// Read nothing. Initialize with the lazy link entry.
uword new_entry = NativeEntry::LinkNativeCallEntry();
- result.SetRawValueAt(i, static_cast<intptr_t>(new_entry));
+ result->SetRawValueAt(i, static_cast<intptr_t>(new_entry));
break;
}
default:
@@ -1343,7 +1347,7 @@ RawObjectPool* ObjectPool::ReadFrom(SnapshotReader* reader,
}
}
- return result.raw();
+ return result->raw();
}
@@ -1372,7 +1376,7 @@ void RawObjectPool::WriteTo(SnapshotWriter* writer,
Entry& entry = ptr()->data()[i];
switch (entry_type) {
case ObjectPool::kTaggedObject: {
- writer->WriteObjectImpl(entry.raw_obj_, kAsInlinedObject);
+ writer->WriteObjectImpl(entry.raw_obj_, kAsReference);
break;
}
case ObjectPool::kImmediate: {
@@ -1720,7 +1724,7 @@ RawICData* ICData::ReadFrom(SnapshotReader* reader,
// Set all the object fields.
READ_OBJECT_FIELDS(result,
result.raw()->from(), result.raw()->to(),
- kAsInlinedObject);
+ kAsReference);
return result.raw();
}
@@ -1743,7 +1747,7 @@ void RawICData::WriteTo(SnapshotWriter* writer,
writer->Write<uint32_t>(ptr()->state_bits_);
// Write out all the object pointer fields.
- SnapshotWriterVisitor visitor(writer, kAsInlinedObject);
+ SnapshotWriterVisitor visitor(writer, kAsReference);
visitor.VisitPointers(from(), to());
}
« no previous file with comments | « no previous file | runtime/vm/snapshot.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698