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

Unified Diff: runtime/vm/clustered_snapshot.cc

Issue 2591823002: Introduce a SignatureData class so that signature functions can store both their (Closed)
Patch Set: address comments Created 4 years 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/object.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/clustered_snapshot.cc
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 89f3be70a310351fdc1f8868ad00fe5a61d8b169..264389005e95002de64927f198187f73ea5d47ca 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -778,6 +778,84 @@ class ClosureDataDeserializationCluster : public DeserializationCluster {
#if !defined(DART_PRECOMPILED_RUNTIME)
+class SignatureDataSerializationCluster : public SerializationCluster {
+ public:
+ SignatureDataSerializationCluster() {}
+ virtual ~SignatureDataSerializationCluster() {}
+
+ void Trace(Serializer* s, RawObject* object) {
+ RawSignatureData* data = SignatureData::RawCast(object);
+ objects_.Add(data);
+
+ RawObject** from = data->from();
+ RawObject** to = data->to();
+ for (RawObject** p = from; p <= to; p++) {
+ s->Push(*p);
+ }
+ }
+
+ void WriteAlloc(Serializer* s) {
+ s->WriteCid(kSignatureDataCid);
+ intptr_t count = objects_.length();
+ s->Write<int32_t>(count);
+ for (intptr_t i = 0; i < count; i++) {
+ RawSignatureData* data = objects_[i];
+ s->AssignRef(data);
+ }
+ }
+
+ void WriteFill(Serializer* s) {
+ intptr_t count = objects_.length();
+ for (intptr_t i = 0; i < count; i++) {
+ RawSignatureData* data = objects_[i];
+ RawObject** from = data->from();
+ RawObject** to = data->to();
+ for (RawObject** p = from; p <= to; p++) {
+ s->WriteRef(*p);
+ }
+ }
+ }
+
+ private:
+ GrowableArray<RawSignatureData*> objects_;
+};
+#endif // !DART_PRECOMPILED_RUNTIME
+
+
+class SignatureDataDeserializationCluster : public DeserializationCluster {
+ public:
+ SignatureDataDeserializationCluster() {}
+ virtual ~SignatureDataDeserializationCluster() {}
+
+ void ReadAlloc(Deserializer* d) {
+ start_index_ = d->next_index();
+ PageSpace* old_space = d->heap()->old_space();
+ intptr_t count = d->Read<int32_t>();
+ for (intptr_t i = 0; i < count; i++) {
+ d->AssignRef(
+ AllocateUninitialized(old_space, SignatureData::InstanceSize()));
+ }
+ stop_index_ = d->next_index();
+ }
+
+ void ReadFill(Deserializer* d) {
+ bool is_vm_object = d->isolate() == Dart::vm_isolate();
+
+ for (intptr_t id = start_index_; id < stop_index_; id++) {
+ RawSignatureData* data = reinterpret_cast<RawSignatureData*>(d->Ref(id));
+ Deserializer::InitializeHeader(
+ data, kSignatureDataCid, SignatureData::InstanceSize(), is_vm_object);
+ RawObject** from = data->from();
+ RawObject** to = data->to();
+ for (RawObject** p = from; p <= to; p++) {
+ *p = d->ReadRef();
+ }
+ }
+ }
+};
+
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
class RedirectionDataSerializationCluster : public SerializationCluster {
public:
RedirectionDataSerializationCluster() {}
@@ -4446,6 +4524,8 @@ SerializationCluster* Serializer::NewClusterForClass(intptr_t cid) {
return new (Z) FunctionSerializationCluster();
case kClosureDataCid:
return new (Z) ClosureDataSerializationCluster();
+ case kSignatureDataCid:
+ return new (Z) SignatureDataSerializationCluster();
case kRedirectionDataCid:
return new (Z) RedirectionDataSerializationCluster();
case kFieldCid:
@@ -4810,6 +4890,8 @@ DeserializationCluster* Deserializer::ReadCluster() {
return new (Z) FunctionDeserializationCluster();
case kClosureDataCid:
return new (Z) ClosureDataDeserializationCluster();
+ case kSignatureDataCid:
+ return new (Z) SignatureDataDeserializationCluster();
case kRedirectionDataCid:
return new (Z) RedirectionDataDeserializationCluster();
case kFieldCid:
« no previous file with comments | « no previous file | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698