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

Side by Side Diff: runtime/vm/clustered_snapshot.cc

Issue 2481873005: clang-format runtime/vm (Closed)
Patch Set: Merge Created 4 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « runtime/vm/clustered_snapshot.h ('k') | runtime/vm/code_descriptors.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/clustered_snapshot.h" 5 #include "vm/clustered_snapshot.h"
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/bootstrap.h" 8 #include "vm/bootstrap.h"
9 #include "vm/class_finalizer.h" 9 #include "vm/class_finalizer.h"
10 #include "vm/dart.h" 10 #include "vm/dart.h"
11 #include "vm/dart_entry.h" 11 #include "vm/dart_entry.h"
12 #include "vm/exceptions.h" 12 #include "vm/exceptions.h"
13 #include "vm/heap.h" 13 #include "vm/heap.h"
14 #include "vm/lockers.h" 14 #include "vm/lockers.h"
15 #include "vm/longjump.h" 15 #include "vm/longjump.h"
16 #include "vm/native_entry.h" 16 #include "vm/native_entry.h"
17 #include "vm/object.h" 17 #include "vm/object.h"
18 #include "vm/object_store.h" 18 #include "vm/object_store.h"
19 #include "vm/stub_code.h" 19 #include "vm/stub_code.h"
20 #include "vm/symbols.h" 20 #include "vm/symbols.h"
21 #include "vm/timeline.h" 21 #include "vm/timeline.h"
22 #include "vm/version.h" 22 #include "vm/version.h"
23 23
24 namespace dart { 24 namespace dart {
25 25
26 static RawObject* AllocateUninitialized(PageSpace* old_space, intptr_t size) { 26 static RawObject* AllocateUninitialized(PageSpace* old_space, intptr_t size) {
27 ASSERT(Utils::IsAligned(size, kObjectAlignment)); 27 ASSERT(Utils::IsAligned(size, kObjectAlignment));
28 uword address = old_space->TryAllocateDataBumpLocked(size, 28 uword address =
29 PageSpace::kForceGrowth); 29 old_space->TryAllocateDataBumpLocked(size, PageSpace::kForceGrowth);
30 if (address == 0) { 30 if (address == 0) {
31 OUT_OF_MEMORY(); 31 OUT_OF_MEMORY();
32 } 32 }
33 return reinterpret_cast<RawObject*>(address + kHeapObjectTag); 33 return reinterpret_cast<RawObject*>(address + kHeapObjectTag);
34 } 34 }
35 35
36 36
37 void Deserializer::InitializeHeader(RawObject* raw, 37 void Deserializer::InitializeHeader(RawObject* raw,
38 intptr_t class_id, 38 intptr_t class_id,
39 intptr_t size, 39 intptr_t size,
40 bool is_vm_isolate, 40 bool is_vm_isolate,
41 bool is_canonical) { 41 bool is_canonical) {
42 ASSERT(Utils::IsAligned(size, kObjectAlignment)); 42 ASSERT(Utils::IsAligned(size, kObjectAlignment));
43 uword tags = 0; 43 uword tags = 0;
44 tags = RawObject::ClassIdTag::update(class_id, tags); 44 tags = RawObject::ClassIdTag::update(class_id, tags);
45 tags = RawObject::SizeTag::update(size, tags); 45 tags = RawObject::SizeTag::update(size, tags);
46 tags = RawObject::VMHeapObjectTag::update(is_vm_isolate, tags); 46 tags = RawObject::VMHeapObjectTag::update(is_vm_isolate, tags);
47 tags = RawObject::CanonicalObjectTag::update(is_canonical, tags); 47 tags = RawObject::CanonicalObjectTag::update(is_canonical, tags);
48 raw->ptr()->tags_ = tags; 48 raw->ptr()->tags_ = tags;
49 } 49 }
50 50
51 51
52 #if !defined(DART_PRECOMPILED_RUNTIME) 52 #if !defined(DART_PRECOMPILED_RUNTIME)
53 class ClassSerializationCluster : public SerializationCluster { 53 class ClassSerializationCluster : public SerializationCluster {
54 public: 54 public:
55 explicit ClassSerializationCluster(intptr_t num_cids) : 55 explicit ClassSerializationCluster(intptr_t num_cids)
56 predefined_(kNumPredefinedCids), objects_(num_cids) { } 56 : predefined_(kNumPredefinedCids), objects_(num_cids) {}
57 virtual ~ClassSerializationCluster() { } 57 virtual ~ClassSerializationCluster() {}
58 58
59 void Trace(Serializer* s, RawObject* object) { 59 void Trace(Serializer* s, RawObject* object) {
60 RawClass* cls = Class::RawCast(object); 60 RawClass* cls = Class::RawCast(object);
61 intptr_t class_id = cls->ptr()->id_; 61 intptr_t class_id = cls->ptr()->id_;
62 62
63 if (class_id < kNumPredefinedCids) { 63 if (class_id < kNumPredefinedCids) {
64 // These classes are allocated by Object::Init or Object::InitOnce, so the 64 // These classes are allocated by Object::Init or Object::InitOnce, so the
65 // deserializer must find them in the class table instead of allocating 65 // deserializer must find them in the class table instead of allocating
66 // them. 66 // them.
67 predefined_.Add(cls); 67 predefined_.Add(cls);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 127
128 private: 128 private:
129 GrowableArray<RawClass*> predefined_; 129 GrowableArray<RawClass*> predefined_;
130 GrowableArray<RawClass*> objects_; 130 GrowableArray<RawClass*> objects_;
131 }; 131 };
132 #endif // !DART_PRECOMPILED_RUNTIME 132 #endif // !DART_PRECOMPILED_RUNTIME
133 133
134 134
135 class ClassDeserializationCluster : public DeserializationCluster { 135 class ClassDeserializationCluster : public DeserializationCluster {
136 public: 136 public:
137 ClassDeserializationCluster() { } 137 ClassDeserializationCluster() {}
138 virtual ~ClassDeserializationCluster() { } 138 virtual ~ClassDeserializationCluster() {}
139 139
140 void ReadAlloc(Deserializer* d) { 140 void ReadAlloc(Deserializer* d) {
141 predefined_start_index_ = d->next_index(); 141 predefined_start_index_ = d->next_index();
142 PageSpace* old_space = d->heap()->old_space(); 142 PageSpace* old_space = d->heap()->old_space();
143 intptr_t count = d->Read<int32_t>(); 143 intptr_t count = d->Read<int32_t>();
144 ClassTable* table = d->isolate()->class_table(); 144 ClassTable* table = d->isolate()->class_table();
145 for (intptr_t i = 0; i < count; i++) { 145 for (intptr_t i = 0; i < count; i++) {
146 intptr_t class_id = d->ReadCid(); 146 intptr_t class_id = d->ReadCid();
147 ASSERT(table->HasValidClassAt(class_id)); 147 ASSERT(table->HasValidClassAt(class_id));
148 RawClass* cls = table->At(class_id); 148 RawClass* cls = table->At(class_id);
149 ASSERT(cls != NULL); 149 ASSERT(cls != NULL);
150 d->AssignRef(cls); 150 d->AssignRef(cls);
151 } 151 }
152 predefined_stop_index_ = d->next_index(); 152 predefined_stop_index_ = d->next_index();
153 153
154 start_index_ = d->next_index(); 154 start_index_ = d->next_index();
155 count = d->Read<int32_t>(); 155 count = d->Read<int32_t>();
156 for (intptr_t i = 0; i < count; i++) { 156 for (intptr_t i = 0; i < count; i++) {
157 d->AssignRef(AllocateUninitialized(old_space, 157 d->AssignRef(AllocateUninitialized(old_space, Class::InstanceSize()));
158 Class::InstanceSize()));
159 } 158 }
160 stop_index_ = d->next_index(); 159 stop_index_ = d->next_index();
161 } 160 }
162 161
163 void ReadFill(Deserializer* d) { 162 void ReadFill(Deserializer* d) {
164 Snapshot::Kind kind = d->kind(); 163 Snapshot::Kind kind = d->kind();
165 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 164 bool is_vm_object = d->isolate() == Dart::vm_isolate();
166 ClassTable* table = d->isolate()->class_table(); 165 ClassTable* table = d->isolate()->class_table();
167 166
168 for (intptr_t id = predefined_start_index_; 167 for (intptr_t id = predefined_start_index_; id < predefined_stop_index_;
169 id < predefined_stop_index_;
170 id++) { 168 id++) {
171 RawClass* cls = reinterpret_cast<RawClass*>(d->Ref(id)); 169 RawClass* cls = reinterpret_cast<RawClass*>(d->Ref(id));
172 RawObject** from = cls->from(); 170 RawObject** from = cls->from();
173 RawObject** to_snapshot = cls->to_snapshot(kind); 171 RawObject** to_snapshot = cls->to_snapshot(kind);
174 for (RawObject** p = from; p <= to_snapshot; p++) { 172 for (RawObject** p = from; p <= to_snapshot; p++) {
175 *p = d->ReadRef(); 173 *p = d->ReadRef();
176 } 174 }
177 175
178 intptr_t class_id = d->ReadCid(); 176 intptr_t class_id = d->ReadCid();
179 cls->ptr()->id_ = class_id; 177 cls->ptr()->id_ = class_id;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 cls->ptr()->num_native_fields_ = d->Read<uint16_t>(); 219 cls->ptr()->num_native_fields_ = d->Read<uint16_t>();
222 cls->ptr()->token_pos_ = d->ReadTokenPosition(); 220 cls->ptr()->token_pos_ = d->ReadTokenPosition();
223 cls->ptr()->state_bits_ = d->Read<uint16_t>(); 221 cls->ptr()->state_bits_ = d->Read<uint16_t>();
224 222
225 table->AllocateIndex(class_id); 223 table->AllocateIndex(class_id);
226 table->SetAt(class_id, cls); 224 table->SetAt(class_id, cls);
227 } 225 }
228 } 226 }
229 227
230 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) { 228 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) {
231 NOT_IN_PRODUCT(TimelineDurationScope tds(Thread::Current(), 229 NOT_IN_PRODUCT(TimelineDurationScope tds(
232 Timeline::GetIsolateStream(), "PostLoadClass")); 230 Thread::Current(), Timeline::GetIsolateStream(), "PostLoadClass"));
233 231
234 Class& cls = Class::Handle(zone); 232 Class& cls = Class::Handle(zone);
235 for (intptr_t i = predefined_start_index_; 233 for (intptr_t i = predefined_start_index_; i < predefined_stop_index_;
236 i < predefined_stop_index_;
237 i++) { 234 i++) {
238 cls ^= refs.At(i); 235 cls ^= refs.At(i);
239 cls.RehashConstants(zone); 236 cls.RehashConstants(zone);
240 } 237 }
241 for (intptr_t i = start_index_; i < stop_index_; i++) { 238 for (intptr_t i = start_index_; i < stop_index_; i++) {
242 cls ^= refs.At(i); 239 cls ^= refs.At(i);
243 cls.RehashConstants(zone); 240 cls.RehashConstants(zone);
244 } 241 }
245 } 242 }
246 243
247 private: 244 private:
248 intptr_t predefined_start_index_; 245 intptr_t predefined_start_index_;
249 intptr_t predefined_stop_index_; 246 intptr_t predefined_stop_index_;
250 }; 247 };
251 248
252 249
253 #if !defined(DART_PRECOMPILED_RUNTIME) 250 #if !defined(DART_PRECOMPILED_RUNTIME)
254 class UnresolvedClassSerializationCluster : public SerializationCluster { 251 class UnresolvedClassSerializationCluster : public SerializationCluster {
255 public: 252 public:
256 UnresolvedClassSerializationCluster() { } 253 UnresolvedClassSerializationCluster() {}
257 virtual ~UnresolvedClassSerializationCluster() { } 254 virtual ~UnresolvedClassSerializationCluster() {}
258 255
259 void Trace(Serializer* s, RawObject* object) { 256 void Trace(Serializer* s, RawObject* object) {
260 RawUnresolvedClass* cls = UnresolvedClass::RawCast(object); 257 RawUnresolvedClass* cls = UnresolvedClass::RawCast(object);
261 objects_.Add(cls); 258 objects_.Add(cls);
262 259
263 RawObject** from = cls->from(); 260 RawObject** from = cls->from();
264 RawObject** to = cls->to(); 261 RawObject** to = cls->to();
265 for (RawObject** p = from; p <= to; p++) { 262 for (RawObject** p = from; p <= to; p++) {
266 s->Push(*p); 263 s->Push(*p);
267 } 264 }
(...skipping 24 matching lines...) Expand all
292 } 289 }
293 290
294 private: 291 private:
295 GrowableArray<RawUnresolvedClass*> objects_; 292 GrowableArray<RawUnresolvedClass*> objects_;
296 }; 293 };
297 #endif // !DART_PRECOMPILED_RUNTIME 294 #endif // !DART_PRECOMPILED_RUNTIME
298 295
299 296
300 class UnresolvedClassDeserializationCluster : public DeserializationCluster { 297 class UnresolvedClassDeserializationCluster : public DeserializationCluster {
301 public: 298 public:
302 UnresolvedClassDeserializationCluster() { } 299 UnresolvedClassDeserializationCluster() {}
303 virtual ~UnresolvedClassDeserializationCluster() { } 300 virtual ~UnresolvedClassDeserializationCluster() {}
304 301
305 void ReadAlloc(Deserializer* d) { 302 void ReadAlloc(Deserializer* d) {
306 start_index_ = d->next_index(); 303 start_index_ = d->next_index();
307 PageSpace* old_space = d->heap()->old_space(); 304 PageSpace* old_space = d->heap()->old_space();
308 intptr_t count = d->Read<int32_t>(); 305 intptr_t count = d->Read<int32_t>();
309 for (intptr_t i = 0; i < count; i++) { 306 for (intptr_t i = 0; i < count; i++) {
310 d->AssignRef(AllocateUninitialized(old_space, 307 d->AssignRef(
311 UnresolvedClass::InstanceSize())); 308 AllocateUninitialized(old_space, UnresolvedClass::InstanceSize()));
312 } 309 }
313 stop_index_ = d->next_index(); 310 stop_index_ = d->next_index();
314 } 311 }
315 312
316 void ReadFill(Deserializer* d) { 313 void ReadFill(Deserializer* d) {
317 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 314 bool is_vm_object = d->isolate() == Dart::vm_isolate();
318 315
319 for (intptr_t id = start_index_; id < stop_index_; id++) { 316 for (intptr_t id = start_index_; id < stop_index_; id++) {
320 RawUnresolvedClass* cls = 317 RawUnresolvedClass* cls =
321 reinterpret_cast<RawUnresolvedClass*>(d->Ref(id)); 318 reinterpret_cast<RawUnresolvedClass*>(d->Ref(id));
322 Deserializer::InitializeHeader(cls, kUnresolvedClassCid, 319 Deserializer::InitializeHeader(cls, kUnresolvedClassCid,
323 UnresolvedClass::InstanceSize(), 320 UnresolvedClass::InstanceSize(),
324 is_vm_object); 321 is_vm_object);
325 RawObject** from = cls->from(); 322 RawObject** from = cls->from();
326 RawObject** to = cls->to(); 323 RawObject** to = cls->to();
327 for (RawObject** p = from; p <= to; p++) { 324 for (RawObject** p = from; p <= to; p++) {
328 *p = d->ReadRef(); 325 *p = d->ReadRef();
329 } 326 }
330 cls->ptr()->token_pos_ = d->ReadTokenPosition(); 327 cls->ptr()->token_pos_ = d->ReadTokenPosition();
331 } 328 }
332 } 329 }
333 }; 330 };
334 331
335 332
336 #if !defined(DART_PRECOMPILED_RUNTIME) 333 #if !defined(DART_PRECOMPILED_RUNTIME)
337 class TypeArgumentsSerializationCluster : public SerializationCluster { 334 class TypeArgumentsSerializationCluster : public SerializationCluster {
338 public: 335 public:
339 TypeArgumentsSerializationCluster() { } 336 TypeArgumentsSerializationCluster() {}
340 virtual ~TypeArgumentsSerializationCluster() { } 337 virtual ~TypeArgumentsSerializationCluster() {}
341 338
342 void Trace(Serializer* s, RawObject* object) { 339 void Trace(Serializer* s, RawObject* object) {
343 RawTypeArguments* type_args = TypeArguments::RawCast(object); 340 RawTypeArguments* type_args = TypeArguments::RawCast(object);
344 objects_.Add(type_args); 341 objects_.Add(type_args);
345 342
346 s->Push(type_args->ptr()->instantiations_); 343 s->Push(type_args->ptr()->instantiations_);
347 intptr_t length = Smi::Value(type_args->ptr()->length_); 344 intptr_t length = Smi::Value(type_args->ptr()->length_);
348 for (intptr_t i = 0; i < length; i++) { 345 for (intptr_t i = 0; i < length; i++) {
349 s->Push(type_args->ptr()->types()[i]); 346 s->Push(type_args->ptr()->types()[i]);
350 } 347 }
(...skipping 28 matching lines...) Expand all
379 } 376 }
380 377
381 private: 378 private:
382 GrowableArray<RawTypeArguments*> objects_; 379 GrowableArray<RawTypeArguments*> objects_;
383 }; 380 };
384 #endif // !DART_PRECOMPILED_RUNTIME 381 #endif // !DART_PRECOMPILED_RUNTIME
385 382
386 383
387 class TypeArgumentsDeserializationCluster : public DeserializationCluster { 384 class TypeArgumentsDeserializationCluster : public DeserializationCluster {
388 public: 385 public:
389 TypeArgumentsDeserializationCluster() { } 386 TypeArgumentsDeserializationCluster() {}
390 virtual ~TypeArgumentsDeserializationCluster() { } 387 virtual ~TypeArgumentsDeserializationCluster() {}
391 388
392 void ReadAlloc(Deserializer* d) { 389 void ReadAlloc(Deserializer* d) {
393 start_index_ = d->next_index(); 390 start_index_ = d->next_index();
394 PageSpace* old_space = d->heap()->old_space(); 391 PageSpace* old_space = d->heap()->old_space();
395 intptr_t count = d->Read<int32_t>(); 392 intptr_t count = d->Read<int32_t>();
396 for (intptr_t i = 0; i < count; i++) { 393 for (intptr_t i = 0; i < count; i++) {
397 intptr_t length = d->Read<int32_t>(); 394 intptr_t length = d->Read<int32_t>();
398 d->AssignRef(AllocateUninitialized(old_space, 395 d->AssignRef(AllocateUninitialized(old_space,
399 TypeArguments::InstanceSize(length))); 396 TypeArguments::InstanceSize(length)));
400 } 397 }
(...skipping 20 matching lines...) Expand all
421 reinterpret_cast<RawAbstractType*>(d->ReadRef()); 418 reinterpret_cast<RawAbstractType*>(d->ReadRef());
422 } 419 }
423 } 420 }
424 } 421 }
425 }; 422 };
426 423
427 424
428 #if !defined(DART_PRECOMPILED_RUNTIME) 425 #if !defined(DART_PRECOMPILED_RUNTIME)
429 class PatchClassSerializationCluster : public SerializationCluster { 426 class PatchClassSerializationCluster : public SerializationCluster {
430 public: 427 public:
431 PatchClassSerializationCluster() { } 428 PatchClassSerializationCluster() {}
432 virtual ~PatchClassSerializationCluster() { } 429 virtual ~PatchClassSerializationCluster() {}
433 430
434 void Trace(Serializer* s, RawObject* object) { 431 void Trace(Serializer* s, RawObject* object) {
435 RawPatchClass* cls = PatchClass::RawCast(object); 432 RawPatchClass* cls = PatchClass::RawCast(object);
436 objects_.Add(cls); 433 objects_.Add(cls);
437 434
438 RawObject** from = cls->from(); 435 RawObject** from = cls->from();
439 RawObject** to = cls->to(); 436 RawObject** to = cls->to();
440 for (RawObject** p = from; p <= to; p++) { 437 for (RawObject** p = from; p <= to; p++) {
441 s->Push(*p); 438 s->Push(*p);
442 } 439 }
(...skipping 22 matching lines...) Expand all
465 } 462 }
466 463
467 private: 464 private:
468 GrowableArray<RawPatchClass*> objects_; 465 GrowableArray<RawPatchClass*> objects_;
469 }; 466 };
470 #endif // !DART_PRECOMPILED_RUNTIME 467 #endif // !DART_PRECOMPILED_RUNTIME
471 468
472 469
473 class PatchClassDeserializationCluster : public DeserializationCluster { 470 class PatchClassDeserializationCluster : public DeserializationCluster {
474 public: 471 public:
475 PatchClassDeserializationCluster() { } 472 PatchClassDeserializationCluster() {}
476 virtual ~PatchClassDeserializationCluster() { } 473 virtual ~PatchClassDeserializationCluster() {}
477 474
478 void ReadAlloc(Deserializer* d) { 475 void ReadAlloc(Deserializer* d) {
479 start_index_ = d->next_index(); 476 start_index_ = d->next_index();
480 PageSpace* old_space = d->heap()->old_space(); 477 PageSpace* old_space = d->heap()->old_space();
481 intptr_t count = d->Read<int32_t>(); 478 intptr_t count = d->Read<int32_t>();
482 for (intptr_t i = 0; i < count; i++) { 479 for (intptr_t i = 0; i < count; i++) {
483 d->AssignRef(AllocateUninitialized(old_space, 480 d->AssignRef(
484 PatchClass::InstanceSize())); 481 AllocateUninitialized(old_space, PatchClass::InstanceSize()));
485 } 482 }
486 stop_index_ = d->next_index(); 483 stop_index_ = d->next_index();
487 } 484 }
488 485
489 void ReadFill(Deserializer* d) { 486 void ReadFill(Deserializer* d) {
490 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 487 bool is_vm_object = d->isolate() == Dart::vm_isolate();
491 488
492 for (intptr_t id = start_index_; id < stop_index_; id++) { 489 for (intptr_t id = start_index_; id < stop_index_; id++) {
493 RawPatchClass* cls = reinterpret_cast<RawPatchClass*>(d->Ref(id)); 490 RawPatchClass* cls = reinterpret_cast<RawPatchClass*>(d->Ref(id));
494 Deserializer::InitializeHeader(cls, kPatchClassCid, 491 Deserializer::InitializeHeader(cls, kPatchClassCid,
495 PatchClass::InstanceSize(), is_vm_object); 492 PatchClass::InstanceSize(), is_vm_object);
496 RawObject** from = cls->from(); 493 RawObject** from = cls->from();
497 RawObject** to = cls->to(); 494 RawObject** to = cls->to();
498 for (RawObject** p = from; p <= to; p++) { 495 for (RawObject** p = from; p <= to; p++) {
499 *p = d->ReadRef(); 496 *p = d->ReadRef();
500 } 497 }
501 } 498 }
502 } 499 }
503 }; 500 };
504 501
505 502
506 #if !defined(DART_PRECOMPILED_RUNTIME) 503 #if !defined(DART_PRECOMPILED_RUNTIME)
507 class FunctionSerializationCluster : public SerializationCluster { 504 class FunctionSerializationCluster : public SerializationCluster {
508 public: 505 public:
509 FunctionSerializationCluster() { } 506 FunctionSerializationCluster() {}
510 virtual ~FunctionSerializationCluster() { } 507 virtual ~FunctionSerializationCluster() {}
511 508
512 void Trace(Serializer* s, RawObject* object) { 509 void Trace(Serializer* s, RawObject* object) {
513 RawFunction* func = Function::RawCast(object); 510 RawFunction* func = Function::RawCast(object);
514 objects_.Add(func); 511 objects_.Add(func);
515 512
516 RawObject** from = func->from(); 513 RawObject** from = func->from();
517 RawObject** to = func->to_snapshot(); 514 RawObject** to = func->to_snapshot();
518 for (RawObject** p = from; p <= to; p++) { 515 for (RawObject** p = from; p <= to; p++) {
519 s->Push(*p); 516 s->Push(*p);
520 } 517 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 } 580 }
584 581
585 private: 582 private:
586 GrowableArray<RawFunction*> objects_; 583 GrowableArray<RawFunction*> objects_;
587 }; 584 };
588 #endif // !DART_PRECOMPILED_RUNTIME 585 #endif // !DART_PRECOMPILED_RUNTIME
589 586
590 587
591 class FunctionDeserializationCluster : public DeserializationCluster { 588 class FunctionDeserializationCluster : public DeserializationCluster {
592 public: 589 public:
593 FunctionDeserializationCluster() { } 590 FunctionDeserializationCluster() {}
594 virtual ~FunctionDeserializationCluster() { } 591 virtual ~FunctionDeserializationCluster() {}
595 592
596 void ReadAlloc(Deserializer* d) { 593 void ReadAlloc(Deserializer* d) {
597 start_index_ = d->next_index(); 594 start_index_ = d->next_index();
598 PageSpace* old_space = d->heap()->old_space(); 595 PageSpace* old_space = d->heap()->old_space();
599 intptr_t count = d->Read<int32_t>(); 596 intptr_t count = d->Read<int32_t>();
600 for (intptr_t i = 0; i < count; i++) { 597 for (intptr_t i = 0; i < count; i++) {
601 d->AssignRef(AllocateUninitialized(old_space, 598 d->AssignRef(AllocateUninitialized(old_space, Function::InstanceSize()));
602 Function::InstanceSize()));
603 } 599 }
604 stop_index_ = d->next_index(); 600 stop_index_ = d->next_index();
605 } 601 }
606 602
607 void ReadFill(Deserializer* d) { 603 void ReadFill(Deserializer* d) {
608 Snapshot::Kind kind = d->kind(); 604 Snapshot::Kind kind = d->kind();
609 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 605 bool is_vm_object = d->isolate() == Dart::vm_isolate();
610 606
611 for (intptr_t id = start_index_; id < stop_index_; id++) { 607 for (intptr_t id = start_index_; id < stop_index_; id++) {
612 RawFunction* func = reinterpret_cast<RawFunction*>(d->Ref(id)); 608 RawFunction* func = reinterpret_cast<RawFunction*>(d->Ref(id));
613 Deserializer::InitializeHeader(func, kFunctionCid, 609 Deserializer::InitializeHeader(func, kFunctionCid,
614 Function::InstanceSize(), is_vm_object); 610 Function::InstanceSize(), is_vm_object);
615 RawObject** from = func->from(); 611 RawObject** from = func->from();
616 RawObject** to_snapshot = func->to_snapshot(); 612 RawObject** to_snapshot = func->to_snapshot();
617 RawObject** to = func->to(); 613 RawObject** to = func->to();
618 for (RawObject** p = from; p <= to_snapshot; p++) { 614 for (RawObject** p = from; p <= to_snapshot; p++) {
619 *p = d->ReadRef(); 615 *p = d->ReadRef();
620 } 616 }
621 for (RawObject** p = to_snapshot + 1; p <= to; p++) { 617 for (RawObject** p = to_snapshot + 1; p <= to; p++) {
622 *p = Object::null(); 618 *p = Object::null();
623 } 619 }
624 if (kind == Snapshot::kAppNoJIT) { 620 if (kind == Snapshot::kAppNoJIT) {
625 func->ptr()->code_ = reinterpret_cast<RawCode*>(d->ReadRef()); 621 func->ptr()->code_ = reinterpret_cast<RawCode*>(d->ReadRef());
626 } else if (kind == Snapshot::kAppWithJIT) { 622 } else if (kind == Snapshot::kAppWithJIT) {
627 NOT_IN_PRECOMPILED(func->ptr()->unoptimized_code_ = 623 NOT_IN_PRECOMPILED(func->ptr()->unoptimized_code_ =
628 reinterpret_cast<RawCode*>(d->ReadRef())); 624 reinterpret_cast<RawCode*>(d->ReadRef()));
629 func->ptr()->code_ = reinterpret_cast<RawCode*>(d->ReadRef()); 625 func->ptr()->code_ = reinterpret_cast<RawCode*>(d->ReadRef());
630 func->ptr()->ic_data_array_ = reinterpret_cast<RawArray*>(d->ReadRef()); 626 func->ptr()->ic_data_array_ = reinterpret_cast<RawArray*>(d->ReadRef());
631 } 627 }
632 628
633 #if defined(DEBUG) 629 #if defined(DEBUG)
634 func->ptr()->entry_point_ = 0; 630 func->ptr()->entry_point_ = 0;
635 #endif 631 #endif
636 632
637 #if !defined(DART_PRECOMPILED_RUNTIME) 633 #if !defined(DART_PRECOMPILED_RUNTIME)
638 if (kind != Snapshot::kAppNoJIT) { 634 if (kind != Snapshot::kAppNoJIT) {
(...skipping 11 matching lines...) Expand all
650 func->ptr()->usage_counter_ = d->Read<int32_t>(); 646 func->ptr()->usage_counter_ = d->Read<int32_t>();
651 func->ptr()->deoptimization_counter_ = d->Read<int8_t>(); 647 func->ptr()->deoptimization_counter_ = d->Read<int8_t>();
652 func->ptr()->optimized_instruction_count_ = d->Read<uint16_t>(); 648 func->ptr()->optimized_instruction_count_ = d->Read<uint16_t>();
653 func->ptr()->optimized_call_site_count_ = d->Read<uint16_t>(); 649 func->ptr()->optimized_call_site_count_ = d->Read<uint16_t>();
654 #endif 650 #endif
655 } 651 }
656 } 652 }
657 } 653 }
658 654
659 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) { 655 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) {
660 NOT_IN_PRODUCT(TimelineDurationScope tds(Thread::Current(), 656 NOT_IN_PRODUCT(TimelineDurationScope tds(
661 Timeline::GetIsolateStream(), "PostLoadFunction")); 657 Thread::Current(), Timeline::GetIsolateStream(), "PostLoadFunction"));
662 658
663 if (kind == Snapshot::kAppNoJIT) { 659 if (kind == Snapshot::kAppNoJIT) {
664 Function& func = Function::Handle(zone); 660 Function& func = Function::Handle(zone);
665 for (intptr_t i = start_index_; i < stop_index_; i++) { 661 for (intptr_t i = start_index_; i < stop_index_; i++) {
666 func ^= refs.At(i); 662 func ^= refs.At(i);
667 ASSERT(func.raw()->ptr()->code_->IsCode()); 663 ASSERT(func.raw()->ptr()->code_->IsCode());
668 uword entry_point = func.raw()->ptr()->code_->ptr()->entry_point_; 664 uword entry_point = func.raw()->ptr()->code_->ptr()->entry_point_;
669 ASSERT(entry_point != 0); 665 ASSERT(entry_point != 0);
670 func.raw()->ptr()->entry_point_ = entry_point; 666 func.raw()->ptr()->entry_point_ = entry_point;
671 } 667 }
(...skipping 20 matching lines...) Expand all
692 func.set_was_compiled(false); 688 func.set_was_compiled(false);
693 } 689 }
694 } 690 }
695 } 691 }
696 }; 692 };
697 693
698 694
699 #if !defined(DART_PRECOMPILED_RUNTIME) 695 #if !defined(DART_PRECOMPILED_RUNTIME)
700 class ClosureDataSerializationCluster : public SerializationCluster { 696 class ClosureDataSerializationCluster : public SerializationCluster {
701 public: 697 public:
702 ClosureDataSerializationCluster() { } 698 ClosureDataSerializationCluster() {}
703 virtual ~ClosureDataSerializationCluster() { } 699 virtual ~ClosureDataSerializationCluster() {}
704 700
705 void Trace(Serializer* s, RawObject* object) { 701 void Trace(Serializer* s, RawObject* object) {
706 RawClosureData* data = ClosureData::RawCast(object); 702 RawClosureData* data = ClosureData::RawCast(object);
707 objects_.Add(data); 703 objects_.Add(data);
708 704
709 if (s->kind() != Snapshot::kAppNoJIT) { 705 if (s->kind() != Snapshot::kAppNoJIT) {
710 s->Push(data->ptr()->context_scope_); 706 s->Push(data->ptr()->context_scope_);
711 } 707 }
712 s->Push(data->ptr()->parent_function_); 708 s->Push(data->ptr()->parent_function_);
713 s->Push(data->ptr()->signature_type_); 709 s->Push(data->ptr()->signature_type_);
(...skipping 24 matching lines...) Expand all
738 } 734 }
739 735
740 private: 736 private:
741 GrowableArray<RawClosureData*> objects_; 737 GrowableArray<RawClosureData*> objects_;
742 }; 738 };
743 #endif // !DART_PRECOMPILED_RUNTIME 739 #endif // !DART_PRECOMPILED_RUNTIME
744 740
745 741
746 class ClosureDataDeserializationCluster : public DeserializationCluster { 742 class ClosureDataDeserializationCluster : public DeserializationCluster {
747 public: 743 public:
748 ClosureDataDeserializationCluster() { } 744 ClosureDataDeserializationCluster() {}
749 virtual ~ClosureDataDeserializationCluster() { } 745 virtual ~ClosureDataDeserializationCluster() {}
750 746
751 void ReadAlloc(Deserializer* d) { 747 void ReadAlloc(Deserializer* d) {
752 start_index_ = d->next_index(); 748 start_index_ = d->next_index();
753 PageSpace* old_space = d->heap()->old_space(); 749 PageSpace* old_space = d->heap()->old_space();
754 intptr_t count = d->Read<int32_t>(); 750 intptr_t count = d->Read<int32_t>();
755 for (intptr_t i = 0; i < count; i++) { 751 for (intptr_t i = 0; i < count; i++) {
756 d->AssignRef(AllocateUninitialized(old_space, 752 d->AssignRef(
757 ClosureData::InstanceSize())); 753 AllocateUninitialized(old_space, ClosureData::InstanceSize()));
758 } 754 }
759 stop_index_ = d->next_index(); 755 stop_index_ = d->next_index();
760 } 756 }
761 757
762 void ReadFill(Deserializer* d) { 758 void ReadFill(Deserializer* d) {
763 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 759 bool is_vm_object = d->isolate() == Dart::vm_isolate();
764 760
765 for (intptr_t id = start_index_; id < stop_index_; id++) { 761 for (intptr_t id = start_index_; id < stop_index_; id++) {
766 RawClosureData* data = reinterpret_cast<RawClosureData*>(d->Ref(id)); 762 RawClosureData* data = reinterpret_cast<RawClosureData*>(d->Ref(id));
767 Deserializer::InitializeHeader(data, kClosureDataCid, 763 Deserializer::InitializeHeader(data, kClosureDataCid,
768 ClosureData::InstanceSize(), 764 ClosureData::InstanceSize(), is_vm_object);
769 is_vm_object);
770 if (d->kind() == Snapshot::kAppNoJIT) { 765 if (d->kind() == Snapshot::kAppNoJIT) {
771 data->ptr()->context_scope_ = ContextScope::null(); 766 data->ptr()->context_scope_ = ContextScope::null();
772 } else { 767 } else {
773 data->ptr()->context_scope_ = 768 data->ptr()->context_scope_ =
774 static_cast<RawContextScope*>(d->ReadRef()); 769 static_cast<RawContextScope*>(d->ReadRef());
775 } 770 }
776 data->ptr()->parent_function_ = static_cast<RawFunction*>(d->ReadRef()); 771 data->ptr()->parent_function_ = static_cast<RawFunction*>(d->ReadRef());
777 data->ptr()->signature_type_ = static_cast<RawType*>(d->ReadRef()); 772 data->ptr()->signature_type_ = static_cast<RawType*>(d->ReadRef());
778 data->ptr()->closure_ = static_cast<RawInstance*>(d->ReadRef()); 773 data->ptr()->closure_ = static_cast<RawInstance*>(d->ReadRef());
779 } 774 }
780 } 775 }
781 }; 776 };
782 777
783 778
784 #if !defined(DART_PRECOMPILED_RUNTIME) 779 #if !defined(DART_PRECOMPILED_RUNTIME)
785 class RedirectionDataSerializationCluster : public SerializationCluster { 780 class RedirectionDataSerializationCluster : public SerializationCluster {
786 public: 781 public:
787 RedirectionDataSerializationCluster() { } 782 RedirectionDataSerializationCluster() {}
788 virtual ~RedirectionDataSerializationCluster() { } 783 virtual ~RedirectionDataSerializationCluster() {}
789 784
790 void Trace(Serializer* s, RawObject* object) { 785 void Trace(Serializer* s, RawObject* object) {
791 RawRedirectionData* data = RedirectionData::RawCast(object); 786 RawRedirectionData* data = RedirectionData::RawCast(object);
792 objects_.Add(data); 787 objects_.Add(data);
793 788
794 RawObject** from = data->from(); 789 RawObject** from = data->from();
795 RawObject** to = data->to(); 790 RawObject** to = data->to();
796 for (RawObject** p = from; p <= to; p++) { 791 for (RawObject** p = from; p <= to; p++) {
797 s->Push(*p); 792 s->Push(*p);
798 } 793 }
(...skipping 22 matching lines...) Expand all
821 } 816 }
822 817
823 private: 818 private:
824 GrowableArray<RawRedirectionData*> objects_; 819 GrowableArray<RawRedirectionData*> objects_;
825 }; 820 };
826 #endif // !DART_PRECOMPILED_RUNTIME 821 #endif // !DART_PRECOMPILED_RUNTIME
827 822
828 823
829 class RedirectionDataDeserializationCluster : public DeserializationCluster { 824 class RedirectionDataDeserializationCluster : public DeserializationCluster {
830 public: 825 public:
831 RedirectionDataDeserializationCluster() { } 826 RedirectionDataDeserializationCluster() {}
832 virtual ~RedirectionDataDeserializationCluster() { } 827 virtual ~RedirectionDataDeserializationCluster() {}
833 828
834 void ReadAlloc(Deserializer* d) { 829 void ReadAlloc(Deserializer* d) {
835 start_index_ = d->next_index(); 830 start_index_ = d->next_index();
836 PageSpace* old_space = d->heap()->old_space(); 831 PageSpace* old_space = d->heap()->old_space();
837 intptr_t count = d->Read<int32_t>(); 832 intptr_t count = d->Read<int32_t>();
838 for (intptr_t i = 0; i < count; i++) { 833 for (intptr_t i = 0; i < count; i++) {
839 d->AssignRef(AllocateUninitialized(old_space, 834 d->AssignRef(
840 RedirectionData::InstanceSize())); 835 AllocateUninitialized(old_space, RedirectionData::InstanceSize()));
841 } 836 }
842 stop_index_ = d->next_index(); 837 stop_index_ = d->next_index();
843 } 838 }
844 839
845 void ReadFill(Deserializer* d) { 840 void ReadFill(Deserializer* d) {
846 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 841 bool is_vm_object = d->isolate() == Dart::vm_isolate();
847 842
848 for (intptr_t id = start_index_; id < stop_index_; id++) { 843 for (intptr_t id = start_index_; id < stop_index_; id++) {
849 RawRedirectionData* data = 844 RawRedirectionData* data =
850 reinterpret_cast<RawRedirectionData*>(d->Ref(id)); 845 reinterpret_cast<RawRedirectionData*>(d->Ref(id));
851 Deserializer::InitializeHeader(data, kRedirectionDataCid, 846 Deserializer::InitializeHeader(data, kRedirectionDataCid,
852 RedirectionData::InstanceSize(), 847 RedirectionData::InstanceSize(),
853 is_vm_object); 848 is_vm_object);
854 RawObject** from = data->from(); 849 RawObject** from = data->from();
855 RawObject** to = data->to(); 850 RawObject** to = data->to();
856 for (RawObject** p = from; p <= to; p++) { 851 for (RawObject** p = from; p <= to; p++) {
857 *p = d->ReadRef(); 852 *p = d->ReadRef();
858 } 853 }
859 } 854 }
860 } 855 }
861 }; 856 };
862 857
863 858
864 #if !defined(DART_PRECOMPILED_RUNTIME) 859 #if !defined(DART_PRECOMPILED_RUNTIME)
865 class FieldSerializationCluster : public SerializationCluster { 860 class FieldSerializationCluster : public SerializationCluster {
866 public: 861 public:
867 FieldSerializationCluster() { } 862 FieldSerializationCluster() {}
868 virtual ~FieldSerializationCluster() { } 863 virtual ~FieldSerializationCluster() {}
869 864
870 void Trace(Serializer* s, RawObject* object) { 865 void Trace(Serializer* s, RawObject* object) {
871 RawField* field = Field::RawCast(object); 866 RawField* field = Field::RawCast(object);
872 objects_.Add(field); 867 objects_.Add(field);
873 868
874 Snapshot::Kind kind = s->kind(); 869 Snapshot::Kind kind = s->kind();
875 870
876 s->Push(field->ptr()->name_); 871 s->Push(field->ptr()->name_);
877 s->Push(field->ptr()->owner_); 872 s->Push(field->ptr()->owner_);
878 s->Push(field->ptr()->type_); 873 s->Push(field->ptr()->type_);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 } 961 }
967 962
968 private: 963 private:
969 GrowableArray<RawField*> objects_; 964 GrowableArray<RawField*> objects_;
970 }; 965 };
971 #endif // !DART_PRECOMPILED_RUNTIME 966 #endif // !DART_PRECOMPILED_RUNTIME
972 967
973 968
974 class FieldDeserializationCluster : public DeserializationCluster { 969 class FieldDeserializationCluster : public DeserializationCluster {
975 public: 970 public:
976 FieldDeserializationCluster() { } 971 FieldDeserializationCluster() {}
977 virtual ~FieldDeserializationCluster() { } 972 virtual ~FieldDeserializationCluster() {}
978 973
979 void ReadAlloc(Deserializer* d) { 974 void ReadAlloc(Deserializer* d) {
980 start_index_ = d->next_index(); 975 start_index_ = d->next_index();
981 PageSpace* old_space = d->heap()->old_space(); 976 PageSpace* old_space = d->heap()->old_space();
982 intptr_t count = d->Read<int32_t>(); 977 intptr_t count = d->Read<int32_t>();
983 for (intptr_t i = 0; i < count; i++) { 978 for (intptr_t i = 0; i < count; i++) {
984 d->AssignRef(AllocateUninitialized(old_space, Field::InstanceSize())); 979 d->AssignRef(AllocateUninitialized(old_space, Field::InstanceSize()));
985 } 980 }
986 stop_index_ = d->next_index(); 981 stop_index_ = d->next_index();
987 } 982 }
988 983
989 void ReadFill(Deserializer* d) { 984 void ReadFill(Deserializer* d) {
990 Snapshot::Kind kind = d->kind(); 985 Snapshot::Kind kind = d->kind();
991 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 986 bool is_vm_object = d->isolate() == Dart::vm_isolate();
992 987
993 for (intptr_t id = start_index_; id < stop_index_; id++) { 988 for (intptr_t id = start_index_; id < stop_index_; id++) {
994 RawField* field = reinterpret_cast<RawField*>(d->Ref(id)); 989 RawField* field = reinterpret_cast<RawField*>(d->Ref(id));
995 Deserializer::InitializeHeader(field, kFieldCid, 990 Deserializer::InitializeHeader(field, kFieldCid, Field::InstanceSize(),
996 Field::InstanceSize(), is_vm_object); 991 is_vm_object);
997 RawObject** from = field->from(); 992 RawObject** from = field->from();
998 RawObject** to_snapshot = field->to_snapshot(kind); 993 RawObject** to_snapshot = field->to_snapshot(kind);
999 RawObject** to = field->to(); 994 RawObject** to = field->to();
1000 for (RawObject** p = from; p <= to_snapshot; p++) { 995 for (RawObject** p = from; p <= to_snapshot; p++) {
1001 *p = d->ReadRef(); 996 *p = d->ReadRef();
1002 } 997 }
1003 for (RawObject** p = to_snapshot + 1; p <= to; p++) { 998 for (RawObject** p = to_snapshot + 1; p <= to; p++) {
1004 *p = Object::null(); 999 *p = Object::null();
1005 } 1000 }
1006 1001
1007 if (kind != Snapshot::kAppNoJIT) { 1002 if (kind != Snapshot::kAppNoJIT) {
1008 field->ptr()->token_pos_ = d->ReadTokenPosition(); 1003 field->ptr()->token_pos_ = d->ReadTokenPosition();
1009 field->ptr()->guarded_cid_ = d->ReadCid(); 1004 field->ptr()->guarded_cid_ = d->ReadCid();
1010 field->ptr()->is_nullable_ = d->ReadCid(); 1005 field->ptr()->is_nullable_ = d->ReadCid();
1011 } 1006 }
1012 field->ptr()->kind_bits_ = d->Read<uint8_t>(); 1007 field->ptr()->kind_bits_ = d->Read<uint8_t>();
1013 } 1008 }
1014 } 1009 }
1015 1010
1016 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) { 1011 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) {
1017 NOT_IN_PRODUCT(TimelineDurationScope tds(Thread::Current(), 1012 NOT_IN_PRODUCT(TimelineDurationScope tds(
1018 Timeline::GetIsolateStream(), "PostLoadField")); 1013 Thread::Current(), Timeline::GetIsolateStream(), "PostLoadField"));
1019 1014
1020 Field& field = Field::Handle(zone); 1015 Field& field = Field::Handle(zone);
1021 if (!FLAG_use_field_guards) { 1016 if (!FLAG_use_field_guards) {
1022 for (intptr_t i = start_index_; i < stop_index_; i++) { 1017 for (intptr_t i = start_index_; i < stop_index_; i++) {
1023 field ^= refs.At(i); 1018 field ^= refs.At(i);
1024 field.set_guarded_cid(kDynamicCid); 1019 field.set_guarded_cid(kDynamicCid);
1025 field.set_is_nullable(true); 1020 field.set_is_nullable(true);
1026 field.set_guarded_list_length(Field::kNoFixedLength); 1021 field.set_guarded_list_length(Field::kNoFixedLength);
1027 field.set_guarded_list_length_in_object_offset( 1022 field.set_guarded_list_length_in_object_offset(
1028 Field::kUnknownLengthOffset); 1023 Field::kUnknownLengthOffset);
1029 } 1024 }
1030 } else { 1025 } else {
1031 for (intptr_t i = start_index_; i < stop_index_; i++) { 1026 for (intptr_t i = start_index_; i < stop_index_; i++) {
1032 field ^= refs.At(i); 1027 field ^= refs.At(i);
1033 field.InitializeGuardedListLengthInObjectOffset(); 1028 field.InitializeGuardedListLengthInObjectOffset();
1034 } 1029 }
1035 } 1030 }
1036 } 1031 }
1037 }; 1032 };
1038 1033
1039 1034
1040 #if !defined(DART_PRECOMPILED_RUNTIME) 1035 #if !defined(DART_PRECOMPILED_RUNTIME)
1041 class LiteralTokenSerializationCluster : public SerializationCluster { 1036 class LiteralTokenSerializationCluster : public SerializationCluster {
1042 public: 1037 public:
1043 LiteralTokenSerializationCluster() { } 1038 LiteralTokenSerializationCluster() {}
1044 virtual ~LiteralTokenSerializationCluster() { } 1039 virtual ~LiteralTokenSerializationCluster() {}
1045 1040
1046 void Trace(Serializer* s, RawObject* object) { 1041 void Trace(Serializer* s, RawObject* object) {
1047 RawLiteralToken* token = LiteralToken::RawCast(object); 1042 RawLiteralToken* token = LiteralToken::RawCast(object);
1048 objects_.Add(token); 1043 objects_.Add(token);
1049 1044
1050 RawObject** from = token->from(); 1045 RawObject** from = token->from();
1051 RawObject** to = token->to(); 1046 RawObject** to = token->to();
1052 for (RawObject** p = from; p <= to; p++) { 1047 for (RawObject** p = from; p <= to; p++) {
1053 s->Push(*p); 1048 s->Push(*p);
1054 } 1049 }
(...skipping 23 matching lines...) Expand all
1078 } 1073 }
1079 1074
1080 private: 1075 private:
1081 GrowableArray<RawLiteralToken*> objects_; 1076 GrowableArray<RawLiteralToken*> objects_;
1082 }; 1077 };
1083 #endif // !DART_PRECOMPILED_RUNTIME 1078 #endif // !DART_PRECOMPILED_RUNTIME
1084 1079
1085 1080
1086 class LiteralTokenDeserializationCluster : public DeserializationCluster { 1081 class LiteralTokenDeserializationCluster : public DeserializationCluster {
1087 public: 1082 public:
1088 LiteralTokenDeserializationCluster() { } 1083 LiteralTokenDeserializationCluster() {}
1089 virtual ~LiteralTokenDeserializationCluster() { } 1084 virtual ~LiteralTokenDeserializationCluster() {}
1090 1085
1091 void ReadAlloc(Deserializer* d) { 1086 void ReadAlloc(Deserializer* d) {
1092 start_index_ = d->next_index(); 1087 start_index_ = d->next_index();
1093 PageSpace* old_space = d->heap()->old_space(); 1088 PageSpace* old_space = d->heap()->old_space();
1094 intptr_t count = d->Read<int32_t>(); 1089 intptr_t count = d->Read<int32_t>();
1095 for (intptr_t i = 0; i < count; i++) { 1090 for (intptr_t i = 0; i < count; i++) {
1096 d->AssignRef(AllocateUninitialized(old_space, 1091 d->AssignRef(
1097 LiteralToken::InstanceSize())); 1092 AllocateUninitialized(old_space, LiteralToken::InstanceSize()));
1098 } 1093 }
1099 stop_index_ = d->next_index(); 1094 stop_index_ = d->next_index();
1100 } 1095 }
1101 1096
1102 void ReadFill(Deserializer* d) { 1097 void ReadFill(Deserializer* d) {
1103 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 1098 bool is_vm_object = d->isolate() == Dart::vm_isolate();
1104 1099
1105 for (intptr_t id = start_index_; id < stop_index_; id++) { 1100 for (intptr_t id = start_index_; id < stop_index_; id++) {
1106 RawLiteralToken* token = reinterpret_cast<RawLiteralToken*>(d->Ref(id)); 1101 RawLiteralToken* token = reinterpret_cast<RawLiteralToken*>(d->Ref(id));
1107 Deserializer::InitializeHeader(token, kLiteralTokenCid, 1102 Deserializer::InitializeHeader(
1108 LiteralToken::InstanceSize(), 1103 token, kLiteralTokenCid, LiteralToken::InstanceSize(), is_vm_object);
1109 is_vm_object);
1110 RawObject** from = token->from(); 1104 RawObject** from = token->from();
1111 RawObject** to = token->to(); 1105 RawObject** to = token->to();
1112 for (RawObject** p = from; p <= to; p++) { 1106 for (RawObject** p = from; p <= to; p++) {
1113 *p = d->ReadRef(); 1107 *p = d->ReadRef();
1114 } 1108 }
1115 token->ptr()->kind_ = static_cast<Token::Kind>(d->Read<int32_t>()); 1109 token->ptr()->kind_ = static_cast<Token::Kind>(d->Read<int32_t>());
1116 } 1110 }
1117 } 1111 }
1118 }; 1112 };
1119 1113
1120 1114
1121 #if !defined(DART_PRECOMPILED_RUNTIME) 1115 #if !defined(DART_PRECOMPILED_RUNTIME)
1122 class TokenStreamSerializationCluster : public SerializationCluster { 1116 class TokenStreamSerializationCluster : public SerializationCluster {
1123 public: 1117 public:
1124 TokenStreamSerializationCluster() { } 1118 TokenStreamSerializationCluster() {}
1125 virtual ~TokenStreamSerializationCluster() { } 1119 virtual ~TokenStreamSerializationCluster() {}
1126 1120
1127 void Trace(Serializer* s, RawObject* object) { 1121 void Trace(Serializer* s, RawObject* object) {
1128 RawTokenStream* stream = TokenStream::RawCast(object); 1122 RawTokenStream* stream = TokenStream::RawCast(object);
1129 objects_.Add(stream); 1123 objects_.Add(stream);
1130 1124
1131 RawObject** from = stream->from(); 1125 RawObject** from = stream->from();
1132 RawObject** to = stream->to(); 1126 RawObject** to = stream->to();
1133 for (RawObject** p = from; p <= to; p++) { 1127 for (RawObject** p = from; p <= to; p++) {
1134 s->Push(*p); 1128 s->Push(*p);
1135 } 1129 }
(...skipping 22 matching lines...) Expand all
1158 } 1152 }
1159 1153
1160 private: 1154 private:
1161 GrowableArray<RawTokenStream*> objects_; 1155 GrowableArray<RawTokenStream*> objects_;
1162 }; 1156 };
1163 #endif // !DART_PRECOMPILED_RUNTIME 1157 #endif // !DART_PRECOMPILED_RUNTIME
1164 1158
1165 1159
1166 class TokenStreamDeserializationCluster : public DeserializationCluster { 1160 class TokenStreamDeserializationCluster : public DeserializationCluster {
1167 public: 1161 public:
1168 TokenStreamDeserializationCluster() { } 1162 TokenStreamDeserializationCluster() {}
1169 virtual ~TokenStreamDeserializationCluster() { } 1163 virtual ~TokenStreamDeserializationCluster() {}
1170 1164
1171 void ReadAlloc(Deserializer* d) { 1165 void ReadAlloc(Deserializer* d) {
1172 start_index_ = d->next_index(); 1166 start_index_ = d->next_index();
1173 PageSpace* old_space = d->heap()->old_space(); 1167 PageSpace* old_space = d->heap()->old_space();
1174 intptr_t count = d->Read<int32_t>(); 1168 intptr_t count = d->Read<int32_t>();
1175 for (intptr_t i = 0; i < count; i++) { 1169 for (intptr_t i = 0; i < count; i++) {
1176 d->AssignRef(AllocateUninitialized(old_space, 1170 d->AssignRef(
1177 TokenStream::InstanceSize())); 1171 AllocateUninitialized(old_space, TokenStream::InstanceSize()));
1178 } 1172 }
1179 stop_index_ = d->next_index(); 1173 stop_index_ = d->next_index();
1180 } 1174 }
1181 1175
1182 void ReadFill(Deserializer* d) { 1176 void ReadFill(Deserializer* d) {
1183 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 1177 bool is_vm_object = d->isolate() == Dart::vm_isolate();
1184 1178
1185 for (intptr_t id = start_index_; id < stop_index_; id++) { 1179 for (intptr_t id = start_index_; id < stop_index_; id++) {
1186 RawTokenStream* stream = reinterpret_cast<RawTokenStream*>(d->Ref(id)); 1180 RawTokenStream* stream = reinterpret_cast<RawTokenStream*>(d->Ref(id));
1187 Deserializer::InitializeHeader(stream, kTokenStreamCid, 1181 Deserializer::InitializeHeader(stream, kTokenStreamCid,
1188 TokenStream::InstanceSize(), is_vm_object); 1182 TokenStream::InstanceSize(), is_vm_object);
1189 RawObject** from = stream->from(); 1183 RawObject** from = stream->from();
1190 RawObject** to = stream->to(); 1184 RawObject** to = stream->to();
1191 for (RawObject** p = from; p <= to; p++) { 1185 for (RawObject** p = from; p <= to; p++) {
1192 *p = d->ReadRef(); 1186 *p = d->ReadRef();
1193 } 1187 }
1194 } 1188 }
1195 } 1189 }
1196 }; 1190 };
1197 1191
1198 1192
1199 #if !defined(DART_PRECOMPILED_RUNTIME) 1193 #if !defined(DART_PRECOMPILED_RUNTIME)
1200 class ScriptSerializationCluster : public SerializationCluster { 1194 class ScriptSerializationCluster : public SerializationCluster {
1201 public: 1195 public:
1202 ScriptSerializationCluster() { } 1196 ScriptSerializationCluster() {}
1203 virtual ~ScriptSerializationCluster() { } 1197 virtual ~ScriptSerializationCluster() {}
1204 1198
1205 void Trace(Serializer* s, RawObject* object) { 1199 void Trace(Serializer* s, RawObject* object) {
1206 RawScript* script = Script::RawCast(object); 1200 RawScript* script = Script::RawCast(object);
1207 objects_.Add(script); 1201 objects_.Add(script);
1208 1202
1209 RawObject** from = script->from(); 1203 RawObject** from = script->from();
1210 RawObject** to = script->to_snapshot(s->kind()); 1204 RawObject** to = script->to_snapshot(s->kind());
1211 for (RawObject** p = from; p <= to; p++) { 1205 for (RawObject** p = from; p <= to; p++) {
1212 s->Push(*p); 1206 s->Push(*p);
1213 } 1207 }
(...skipping 27 matching lines...) Expand all
1241 } 1235 }
1242 1236
1243 private: 1237 private:
1244 GrowableArray<RawScript*> objects_; 1238 GrowableArray<RawScript*> objects_;
1245 }; 1239 };
1246 #endif // !DART_PRECOMPILED_RUNTIME 1240 #endif // !DART_PRECOMPILED_RUNTIME
1247 1241
1248 1242
1249 class ScriptDeserializationCluster : public DeserializationCluster { 1243 class ScriptDeserializationCluster : public DeserializationCluster {
1250 public: 1244 public:
1251 ScriptDeserializationCluster() { } 1245 ScriptDeserializationCluster() {}
1252 virtual ~ScriptDeserializationCluster() { } 1246 virtual ~ScriptDeserializationCluster() {}
1253 1247
1254 void ReadAlloc(Deserializer* d) { 1248 void ReadAlloc(Deserializer* d) {
1255 start_index_ = d->next_index(); 1249 start_index_ = d->next_index();
1256 PageSpace* old_space = d->heap()->old_space(); 1250 PageSpace* old_space = d->heap()->old_space();
1257 intptr_t count = d->Read<int32_t>(); 1251 intptr_t count = d->Read<int32_t>();
1258 for (intptr_t i = 0; i < count; i++) { 1252 for (intptr_t i = 0; i < count; i++) {
1259 d->AssignRef(AllocateUninitialized(old_space, Script::InstanceSize())); 1253 d->AssignRef(AllocateUninitialized(old_space, Script::InstanceSize()));
1260 } 1254 }
1261 stop_index_ = d->next_index(); 1255 stop_index_ = d->next_index();
1262 } 1256 }
1263 1257
1264 void ReadFill(Deserializer* d) { 1258 void ReadFill(Deserializer* d) {
1265 Snapshot::Kind kind = d->kind(); 1259 Snapshot::Kind kind = d->kind();
1266 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 1260 bool is_vm_object = d->isolate() == Dart::vm_isolate();
1267 1261
1268 for (intptr_t id = start_index_; id < stop_index_; id++) { 1262 for (intptr_t id = start_index_; id < stop_index_; id++) {
1269 RawScript* script = reinterpret_cast<RawScript*>(d->Ref(id)); 1263 RawScript* script = reinterpret_cast<RawScript*>(d->Ref(id));
1270 Deserializer::InitializeHeader(script, kScriptCid, 1264 Deserializer::InitializeHeader(script, kScriptCid, Script::InstanceSize(),
1271 Script::InstanceSize(), is_vm_object); 1265 is_vm_object);
1272 RawObject** from = script->from(); 1266 RawObject** from = script->from();
1273 RawObject** to_snapshot = script->to_snapshot(kind); 1267 RawObject** to_snapshot = script->to_snapshot(kind);
1274 RawObject** to = script->to(); 1268 RawObject** to = script->to();
1275 for (RawObject** p = from; p <= to_snapshot; p++) { 1269 for (RawObject** p = from; p <= to_snapshot; p++) {
1276 *p = d->ReadRef(); 1270 *p = d->ReadRef();
1277 } 1271 }
1278 for (RawObject** p = to_snapshot + 1; p <= to; p++) { 1272 for (RawObject** p = to_snapshot + 1; p <= to; p++) {
1279 *p = Object::null(); 1273 *p = Object::null();
1280 } 1274 }
1281 1275
1282 script->ptr()->line_offset_ = d->Read<int32_t>(); 1276 script->ptr()->line_offset_ = d->Read<int32_t>();
1283 script->ptr()->col_offset_ = d->Read<int32_t>(); 1277 script->ptr()->col_offset_ = d->Read<int32_t>();
1284 script->ptr()->kind_ = d->Read<int8_t>(); 1278 script->ptr()->kind_ = d->Read<int8_t>();
1285 script->ptr()->load_timestamp_ = 0; 1279 script->ptr()->load_timestamp_ = 0;
1286 } 1280 }
1287 } 1281 }
1288 }; 1282 };
1289 1283
1290 1284
1291 #if !defined(DART_PRECOMPILED_RUNTIME) 1285 #if !defined(DART_PRECOMPILED_RUNTIME)
1292 class LibrarySerializationCluster : public SerializationCluster { 1286 class LibrarySerializationCluster : public SerializationCluster {
1293 public: 1287 public:
1294 LibrarySerializationCluster() { } 1288 LibrarySerializationCluster() {}
1295 virtual ~LibrarySerializationCluster() { } 1289 virtual ~LibrarySerializationCluster() {}
1296 1290
1297 void Trace(Serializer* s, RawObject* object) { 1291 void Trace(Serializer* s, RawObject* object) {
1298 RawLibrary* lib = Library::RawCast(object); 1292 RawLibrary* lib = Library::RawCast(object);
1299 objects_.Add(lib); 1293 objects_.Add(lib);
1300 1294
1301 RawObject** from = lib->from(); 1295 RawObject** from = lib->from();
1302 RawObject** to = lib->to_snapshot(); 1296 RawObject** to = lib->to_snapshot();
1303 for (RawObject** p = from; p <= to; p++) { 1297 for (RawObject** p = from; p <= to; p++) {
1304 s->Push(*p); 1298 s->Push(*p);
1305 } 1299 }
(...skipping 29 matching lines...) Expand all
1335 } 1329 }
1336 1330
1337 private: 1331 private:
1338 GrowableArray<RawLibrary*> objects_; 1332 GrowableArray<RawLibrary*> objects_;
1339 }; 1333 };
1340 #endif // !DART_PRECOMPILED_RUNTIME 1334 #endif // !DART_PRECOMPILED_RUNTIME
1341 1335
1342 1336
1343 class LibraryDeserializationCluster : public DeserializationCluster { 1337 class LibraryDeserializationCluster : public DeserializationCluster {
1344 public: 1338 public:
1345 LibraryDeserializationCluster() { } 1339 LibraryDeserializationCluster() {}
1346 virtual ~LibraryDeserializationCluster() { } 1340 virtual ~LibraryDeserializationCluster() {}
1347 1341
1348 void ReadAlloc(Deserializer* d) { 1342 void ReadAlloc(Deserializer* d) {
1349 start_index_ = d->next_index(); 1343 start_index_ = d->next_index();
1350 PageSpace* old_space = d->heap()->old_space(); 1344 PageSpace* old_space = d->heap()->old_space();
1351 intptr_t count = d->Read<int32_t>(); 1345 intptr_t count = d->Read<int32_t>();
1352 for (intptr_t i = 0; i < count; i++) { 1346 for (intptr_t i = 0; i < count; i++) {
1353 d->AssignRef(AllocateUninitialized(old_space, Library::InstanceSize())); 1347 d->AssignRef(AllocateUninitialized(old_space, Library::InstanceSize()));
1354 } 1348 }
1355 stop_index_ = d->next_index(); 1349 stop_index_ = d->next_index();
1356 } 1350 }
1357 1351
1358 void ReadFill(Deserializer* d) { 1352 void ReadFill(Deserializer* d) {
1359 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 1353 bool is_vm_object = d->isolate() == Dart::vm_isolate();
1360 1354
1361 for (intptr_t id = start_index_; id < stop_index_; id++) { 1355 for (intptr_t id = start_index_; id < stop_index_; id++) {
1362 RawLibrary* lib = reinterpret_cast<RawLibrary*>(d->Ref(id)); 1356 RawLibrary* lib = reinterpret_cast<RawLibrary*>(d->Ref(id));
1363 Deserializer::InitializeHeader(lib, kLibraryCid, 1357 Deserializer::InitializeHeader(lib, kLibraryCid, Library::InstanceSize(),
1364 Library::InstanceSize(), is_vm_object); 1358 is_vm_object);
1365 RawObject** from = lib->from(); 1359 RawObject** from = lib->from();
1366 RawObject** to_snapshot = lib->to_snapshot(); 1360 RawObject** to_snapshot = lib->to_snapshot();
1367 RawObject** to = lib->to(); 1361 RawObject** to = lib->to();
1368 for (RawObject** p = from; p <= to_snapshot; p++) { 1362 for (RawObject** p = from; p <= to_snapshot; p++) {
1369 *p = d->ReadRef(); 1363 *p = d->ReadRef();
1370 } 1364 }
1371 for (RawObject** p = to_snapshot + 1; p <= to; p++) { 1365 for (RawObject** p = to_snapshot + 1; p <= to; p++) {
1372 *p = Object::null(); 1366 *p = Object::null();
1373 } 1367 }
1374 1368
1375 lib->ptr()->native_entry_resolver_ = NULL; 1369 lib->ptr()->native_entry_resolver_ = NULL;
1376 lib->ptr()->native_entry_symbol_resolver_ = NULL; 1370 lib->ptr()->native_entry_symbol_resolver_ = NULL;
1377 lib->ptr()->index_ = d->Read<int32_t>(); 1371 lib->ptr()->index_ = d->Read<int32_t>();
1378 lib->ptr()->num_imports_ = d->Read<uint16_t>(); 1372 lib->ptr()->num_imports_ = d->Read<uint16_t>();
1379 lib->ptr()->load_state_ = d->Read<int8_t>(); 1373 lib->ptr()->load_state_ = d->Read<int8_t>();
1380 lib->ptr()->corelib_imported_ = d->Read<bool>(); 1374 lib->ptr()->corelib_imported_ = d->Read<bool>();
1381 lib->ptr()->is_dart_scheme_ = d->Read<bool>(); 1375 lib->ptr()->is_dart_scheme_ = d->Read<bool>();
1382 lib->ptr()->debuggable_ = d->Read<bool>(); 1376 lib->ptr()->debuggable_ = d->Read<bool>();
1383 lib->ptr()->is_in_fullsnapshot_ = true; 1377 lib->ptr()->is_in_fullsnapshot_ = true;
1384 } 1378 }
1385 } 1379 }
1386 1380
1387 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) { 1381 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) {
1388 // TODO(rmacnak): This is surprisingly slow, roughly 20% of deserialization 1382 // TODO(rmacnak): This is surprisingly slow, roughly 20% of deserialization
1389 // time for the JIT. Maybe make the lookups happy with a null? 1383 // time for the JIT. Maybe make the lookups happy with a null?
1390 1384
1391 NOT_IN_PRODUCT(TimelineDurationScope tds(Thread::Current(), 1385 NOT_IN_PRODUCT(TimelineDurationScope tds(
1392 Timeline::GetIsolateStream(), "PostLoadLibrary")); 1386 Thread::Current(), Timeline::GetIsolateStream(), "PostLoadLibrary"));
1393 1387
1394 Library& lib = Library::Handle(zone); 1388 Library& lib = Library::Handle(zone);
1395 for (intptr_t i = start_index_; i < stop_index_; i++) { 1389 for (intptr_t i = start_index_; i < stop_index_; i++) {
1396 lib ^= refs.At(i); 1390 lib ^= refs.At(i);
1397 const intptr_t kInitialNameCacheSize = 64; 1391 const intptr_t kInitialNameCacheSize = 64;
1398 lib.InitResolvedNamesCache(kInitialNameCacheSize); 1392 lib.InitResolvedNamesCache(kInitialNameCacheSize);
1399 } 1393 }
1400 } 1394 }
1401 }; 1395 };
1402 1396
1403 1397
1404 #if !defined(DART_PRECOMPILED_RUNTIME) 1398 #if !defined(DART_PRECOMPILED_RUNTIME)
1405 class NamespaceSerializationCluster : public SerializationCluster { 1399 class NamespaceSerializationCluster : public SerializationCluster {
1406 public: 1400 public:
1407 NamespaceSerializationCluster() { } 1401 NamespaceSerializationCluster() {}
1408 virtual ~NamespaceSerializationCluster() { } 1402 virtual ~NamespaceSerializationCluster() {}
1409 1403
1410 void Trace(Serializer* s, RawObject* object) { 1404 void Trace(Serializer* s, RawObject* object) {
1411 RawNamespace* ns = Namespace::RawCast(object); 1405 RawNamespace* ns = Namespace::RawCast(object);
1412 objects_.Add(ns); 1406 objects_.Add(ns);
1413 1407
1414 RawObject** from = ns->from(); 1408 RawObject** from = ns->from();
1415 RawObject** to = ns->to(); 1409 RawObject** to = ns->to();
1416 for (RawObject** p = from; p <= to; p++) { 1410 for (RawObject** p = from; p <= to; p++) {
1417 s->Push(*p); 1411 s->Push(*p);
1418 } 1412 }
(...skipping 22 matching lines...) Expand all
1441 } 1435 }
1442 1436
1443 private: 1437 private:
1444 GrowableArray<RawNamespace*> objects_; 1438 GrowableArray<RawNamespace*> objects_;
1445 }; 1439 };
1446 #endif // !DART_PRECOMPILED_RUNTIME 1440 #endif // !DART_PRECOMPILED_RUNTIME
1447 1441
1448 1442
1449 class NamespaceDeserializationCluster : public DeserializationCluster { 1443 class NamespaceDeserializationCluster : public DeserializationCluster {
1450 public: 1444 public:
1451 NamespaceDeserializationCluster() { } 1445 NamespaceDeserializationCluster() {}
1452 virtual ~NamespaceDeserializationCluster() { } 1446 virtual ~NamespaceDeserializationCluster() {}
1453 1447
1454 void ReadAlloc(Deserializer* d) { 1448 void ReadAlloc(Deserializer* d) {
1455 start_index_ = d->next_index(); 1449 start_index_ = d->next_index();
1456 PageSpace* old_space = d->heap()->old_space(); 1450 PageSpace* old_space = d->heap()->old_space();
1457 intptr_t count = d->Read<int32_t>(); 1451 intptr_t count = d->Read<int32_t>();
1458 for (intptr_t i = 0; i < count; i++) { 1452 for (intptr_t i = 0; i < count; i++) {
1459 d->AssignRef(AllocateUninitialized(old_space, Namespace::InstanceSize())); 1453 d->AssignRef(AllocateUninitialized(old_space, Namespace::InstanceSize()));
1460 } 1454 }
1461 stop_index_ = d->next_index(); 1455 stop_index_ = d->next_index();
1462 } 1456 }
(...skipping 11 matching lines...) Expand all
1474 *p = d->ReadRef(); 1468 *p = d->ReadRef();
1475 } 1469 }
1476 } 1470 }
1477 } 1471 }
1478 }; 1472 };
1479 1473
1480 1474
1481 #if !defined(DART_PRECOMPILED_RUNTIME) 1475 #if !defined(DART_PRECOMPILED_RUNTIME)
1482 class CodeSerializationCluster : public SerializationCluster { 1476 class CodeSerializationCluster : public SerializationCluster {
1483 public: 1477 public:
1484 CodeSerializationCluster() { } 1478 CodeSerializationCluster() {}
1485 virtual ~CodeSerializationCluster() { } 1479 virtual ~CodeSerializationCluster() {}
1486 1480
1487 void Trace(Serializer* s, RawObject* object) { 1481 void Trace(Serializer* s, RawObject* object) {
1488 RawCode* code = Code::RawCast(object); 1482 RawCode* code = Code::RawCast(object);
1489 objects_.Add(code); 1483 objects_.Add(code);
1490 1484
1491 s->Push(code->ptr()->object_pool_); 1485 s->Push(code->ptr()->object_pool_);
1492 s->Push(code->ptr()->owner_); 1486 s->Push(code->ptr()->owner_);
1493 s->Push(code->ptr()->exception_handlers_); 1487 s->Push(code->ptr()->exception_handlers_);
1494 s->Push(code->ptr()->pc_descriptors_); 1488 s->Push(code->ptr()->pc_descriptors_);
1495 s->Push(code->ptr()->stackmaps_); 1489 s->Push(code->ptr()->stackmaps_);
(...skipping 22 matching lines...) Expand all
1518 for (intptr_t i = 0; i < count; i++) { 1512 for (intptr_t i = 0; i < count; i++) {
1519 RawCode* code = objects_[i]; 1513 RawCode* code = objects_[i];
1520 1514
1521 intptr_t pointer_offsets_length = 1515 intptr_t pointer_offsets_length =
1522 Code::PtrOffBits::decode(code->ptr()->state_bits_); 1516 Code::PtrOffBits::decode(code->ptr()->state_bits_);
1523 if (pointer_offsets_length != 0) { 1517 if (pointer_offsets_length != 0) {
1524 FATAL("Cannot serialize code with embedded pointers"); 1518 FATAL("Cannot serialize code with embedded pointers");
1525 } 1519 }
1526 if (kind == Snapshot::kAppNoJIT) { 1520 if (kind == Snapshot::kAppNoJIT) {
1527 // No disabled code in precompilation. 1521 // No disabled code in precompilation.
1528 NOT_IN_PRECOMPILED(ASSERT( 1522 NOT_IN_PRECOMPILED(ASSERT(code->ptr()->instructions_ ==
1529 code->ptr()->instructions_ == code->ptr()->active_instructions_)); 1523 code->ptr()->active_instructions_));
1530 } 1524 }
1531 1525
1532 RawInstructions* instr = code->ptr()->instructions_; 1526 RawInstructions* instr = code->ptr()->instructions_;
1533 int32_t text_offset = s->GetTextOffset(instr, code); 1527 int32_t text_offset = s->GetTextOffset(instr, code);
1534 s->Write<int32_t>(text_offset); 1528 s->Write<int32_t>(text_offset);
1535 if (s->kind() == Snapshot::kAppWithJIT) { 1529 if (s->kind() == Snapshot::kAppWithJIT) {
1536 // TODO(rmacnak): Fix references to disabled code before serializing. 1530 // TODO(rmacnak): Fix references to disabled code before serializing.
1537 if (code->ptr()->active_instructions_ != code->ptr()->instructions_) { 1531 if (code->ptr()->active_instructions_ != code->ptr()->instructions_) {
1538 instr = code->ptr()->active_instructions_; 1532 instr = code->ptr()->active_instructions_;
1539 text_offset = s->GetTextOffset(instr, code); 1533 text_offset = s->GetTextOffset(instr, code);
(...skipping 19 matching lines...) Expand all
1559 } 1553 }
1560 1554
1561 private: 1555 private:
1562 GrowableArray<RawCode*> objects_; 1556 GrowableArray<RawCode*> objects_;
1563 }; 1557 };
1564 #endif // !DART_PRECOMPILED_RUNTIME 1558 #endif // !DART_PRECOMPILED_RUNTIME
1565 1559
1566 1560
1567 class CodeDeserializationCluster : public DeserializationCluster { 1561 class CodeDeserializationCluster : public DeserializationCluster {
1568 public: 1562 public:
1569 CodeDeserializationCluster() { } 1563 CodeDeserializationCluster() {}
1570 virtual ~CodeDeserializationCluster() { } 1564 virtual ~CodeDeserializationCluster() {}
1571 1565
1572 void ReadAlloc(Deserializer* d) { 1566 void ReadAlloc(Deserializer* d) {
1573 start_index_ = d->next_index(); 1567 start_index_ = d->next_index();
1574 PageSpace* old_space = d->heap()->old_space(); 1568 PageSpace* old_space = d->heap()->old_space();
1575 intptr_t count = d->Read<int32_t>(); 1569 intptr_t count = d->Read<int32_t>();
1576 for (intptr_t i = 0; i < count; i++) { 1570 for (intptr_t i = 0; i < count; i++) {
1577 d->AssignRef(AllocateUninitialized(old_space, Code::InstanceSize(0))); 1571 d->AssignRef(AllocateUninitialized(old_space, Code::InstanceSize(0)));
1578 } 1572 }
1579 stop_index_ = d->next_index(); 1573 stop_index_ = d->next_index();
1580 } 1574 }
1581 1575
1582 void ReadFill(Deserializer* d) { 1576 void ReadFill(Deserializer* d) {
1583 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 1577 bool is_vm_object = d->isolate() == Dart::vm_isolate();
1584 1578
1585 for (intptr_t id = start_index_; id < stop_index_; id++) { 1579 for (intptr_t id = start_index_; id < stop_index_; id++) {
1586 RawCode* code = reinterpret_cast<RawCode*>(d->Ref(id)); 1580 RawCode* code = reinterpret_cast<RawCode*>(d->Ref(id));
1587 Deserializer::InitializeHeader(code, kCodeCid, 1581 Deserializer::InitializeHeader(code, kCodeCid, Code::InstanceSize(0),
1588 Code::InstanceSize(0), is_vm_object); 1582 is_vm_object);
1589 1583
1590 int32_t text_offset = d->Read<int32_t>(); 1584 int32_t text_offset = d->Read<int32_t>();
1591 RawInstructions* instr = reinterpret_cast<RawInstructions*>( 1585 RawInstructions* instr = reinterpret_cast<RawInstructions*>(
1592 d->GetInstructionsAt(text_offset) + kHeapObjectTag); 1586 d->GetInstructionsAt(text_offset) + kHeapObjectTag);
1593 1587
1594 code->ptr()->entry_point_ = Instructions::UncheckedEntryPoint(instr); 1588 code->ptr()->entry_point_ = Instructions::UncheckedEntryPoint(instr);
1595 code->ptr()->checked_entry_point_ = 1589 code->ptr()->checked_entry_point_ =
1596 Instructions::CheckedEntryPoint(instr); 1590 Instructions::CheckedEntryPoint(instr);
1597 NOT_IN_PRECOMPILED(code->ptr()->active_instructions_ = instr); 1591 NOT_IN_PRECOMPILED(code->ptr()->active_instructions_ = instr);
1598 code->ptr()->instructions_ = instr; 1592 code->ptr()->instructions_ = instr;
(...skipping 10 matching lines...) Expand all
1609 } 1603 }
1610 #endif // !DART_PRECOMPILED_RUNTIME 1604 #endif // !DART_PRECOMPILED_RUNTIME
1611 1605
1612 code->ptr()->object_pool_ = 1606 code->ptr()->object_pool_ =
1613 reinterpret_cast<RawObjectPool*>(d->ReadRef()); 1607 reinterpret_cast<RawObjectPool*>(d->ReadRef());
1614 code->ptr()->owner_ = d->ReadRef(); 1608 code->ptr()->owner_ = d->ReadRef();
1615 code->ptr()->exception_handlers_ = 1609 code->ptr()->exception_handlers_ =
1616 reinterpret_cast<RawExceptionHandlers*>(d->ReadRef()); 1610 reinterpret_cast<RawExceptionHandlers*>(d->ReadRef());
1617 code->ptr()->pc_descriptors_ = 1611 code->ptr()->pc_descriptors_ =
1618 reinterpret_cast<RawPcDescriptors*>(d->ReadRef()); 1612 reinterpret_cast<RawPcDescriptors*>(d->ReadRef());
1619 code->ptr()->stackmaps_ = 1613 code->ptr()->stackmaps_ = reinterpret_cast<RawArray*>(d->ReadRef());
1620 reinterpret_cast<RawArray*>(d->ReadRef());
1621 1614
1622 #if !defined(DART_PRECOMPILED_RUNTIME) 1615 #if !defined(DART_PRECOMPILED_RUNTIME)
1623 if (d->kind() == Snapshot::kAppWithJIT) { 1616 if (d->kind() == Snapshot::kAppWithJIT) {
1624 code->ptr()->deopt_info_array_ = 1617 code->ptr()->deopt_info_array_ =
1625 reinterpret_cast<RawArray*>(d->ReadRef()); 1618 reinterpret_cast<RawArray*>(d->ReadRef());
1626 code->ptr()->static_calls_target_table_ = 1619 code->ptr()->static_calls_target_table_ =
1627 reinterpret_cast<RawArray*>(d->ReadRef()); 1620 reinterpret_cast<RawArray*>(d->ReadRef());
1628 #if defined(PRODUCT) 1621 #if defined(PRODUCT)
1629 code->ptr()->inlined_metadata_ = Array::null(); 1622 code->ptr()->inlined_metadata_ = Array::null();
1630 code->ptr()->return_address_metadata_ = Object::null(); 1623 code->ptr()->return_address_metadata_ = Object::null();
(...skipping 18 matching lines...) Expand all
1649 1642
1650 code->ptr()->state_bits_ = d->Read<int32_t>(); 1643 code->ptr()->state_bits_ = d->Read<int32_t>();
1651 } 1644 }
1652 } 1645 }
1653 }; 1646 };
1654 1647
1655 1648
1656 #if !defined(DART_PRECOMPILED_RUNTIME) 1649 #if !defined(DART_PRECOMPILED_RUNTIME)
1657 class ObjectPoolSerializationCluster : public SerializationCluster { 1650 class ObjectPoolSerializationCluster : public SerializationCluster {
1658 public: 1651 public:
1659 ObjectPoolSerializationCluster() { } 1652 ObjectPoolSerializationCluster() {}
1660 virtual ~ObjectPoolSerializationCluster() { } 1653 virtual ~ObjectPoolSerializationCluster() {}
1661 1654
1662 void Trace(Serializer* s, RawObject* object) { 1655 void Trace(Serializer* s, RawObject* object) {
1663 RawObjectPool* pool = ObjectPool::RawCast(object); 1656 RawObjectPool* pool = ObjectPool::RawCast(object);
1664 objects_.Add(pool); 1657 objects_.Add(pool);
1665 1658
1666 intptr_t length = pool->ptr()->length_; 1659 intptr_t length = pool->ptr()->length_;
1667 RawTypedData* info_array = pool->ptr()->info_array_; 1660 RawTypedData* info_array = pool->ptr()->info_array_;
1668 1661
1669 for (intptr_t i = 0; i < length; i++) { 1662 for (intptr_t i = 0; i < length; i++) {
1670 ObjectPool::EntryType entry_type = 1663 ObjectPool::EntryType entry_type =
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1706 #if !defined(TARGET_ARCH_DBC) 1699 #if !defined(TARGET_ARCH_DBC)
1707 if (entry.raw_obj_ == 1700 if (entry.raw_obj_ ==
1708 StubCode::CallNativeCFunction_entry()->code()) { 1701 StubCode::CallNativeCFunction_entry()->code()) {
1709 // Natives can run while precompiling, becoming linked and 1702 // Natives can run while precompiling, becoming linked and
1710 // switching their stub. Reset to the initial stub used for 1703 // switching their stub. Reset to the initial stub used for
1711 // lazy-linking. 1704 // lazy-linking.
1712 s->WriteRef(StubCode::CallBootstrapCFunction_entry()->code()); 1705 s->WriteRef(StubCode::CallBootstrapCFunction_entry()->code());
1713 break; 1706 break;
1714 } 1707 }
1715 #endif 1708 #endif
1716 s->WriteRef(entry.raw_obj_); 1709 s->WriteRef(entry.raw_obj_);
1717 break; 1710 break;
1718 } 1711 }
1719 case ObjectPool::kImmediate: { 1712 case ObjectPool::kImmediate: {
1720 s->Write<intptr_t>(entry.raw_value_); 1713 s->Write<intptr_t>(entry.raw_value_);
1721 break; 1714 break;
1722 } 1715 }
1723 case ObjectPool::kNativeEntry: { 1716 case ObjectPool::kNativeEntry: {
1724 // Write nothing. Will initialize with the lazy link entry. 1717 // Write nothing. Will initialize with the lazy link entry.
1725 #if defined(TARGET_ARCH_DBC) 1718 #if defined(TARGET_ARCH_DBC)
1726 UNREACHABLE(); // DBC does not support lazy native call linking. 1719 UNREACHABLE(); // DBC does not support lazy native call linking.
1727 #endif 1720 #endif
1728 break; 1721 break;
1729 } 1722 }
1730 default: 1723 default:
1731 UNREACHABLE(); 1724 UNREACHABLE();
1732 } 1725 }
1733 } 1726 }
1734 } 1727 }
1735 } 1728 }
1736 1729
1737 private: 1730 private:
1738 GrowableArray<RawObjectPool*> objects_; 1731 GrowableArray<RawObjectPool*> objects_;
1739 }; 1732 };
1740 #endif // !DART_PRECOMPILED_RUNTIME 1733 #endif // !DART_PRECOMPILED_RUNTIME
1741 1734
1742 1735
1743 class ObjectPoolDeserializationCluster : public DeserializationCluster { 1736 class ObjectPoolDeserializationCluster : public DeserializationCluster {
1744 public: 1737 public:
1745 ObjectPoolDeserializationCluster() { } 1738 ObjectPoolDeserializationCluster() {}
1746 virtual ~ObjectPoolDeserializationCluster() { } 1739 virtual ~ObjectPoolDeserializationCluster() {}
1747 1740
1748 void ReadAlloc(Deserializer* d) { 1741 void ReadAlloc(Deserializer* d) {
1749 start_index_ = d->next_index(); 1742 start_index_ = d->next_index();
1750 PageSpace* old_space = d->heap()->old_space(); 1743 PageSpace* old_space = d->heap()->old_space();
1751 intptr_t count = d->Read<int32_t>(); 1744 intptr_t count = d->Read<int32_t>();
1752 for (intptr_t i = 0; i < count; i++) { 1745 for (intptr_t i = 0; i < count; i++) {
1753 intptr_t length = d->Read<int32_t>(); 1746 intptr_t length = d->Read<int32_t>();
1754 d->AssignRef(AllocateUninitialized(old_space, 1747 d->AssignRef(
1755 ObjectPool::InstanceSize(length))); 1748 AllocateUninitialized(old_space, ObjectPool::InstanceSize(length)));
1756 } 1749 }
1757 stop_index_ = d->next_index(); 1750 stop_index_ = d->next_index();
1758 } 1751 }
1759 1752
1760 void ReadFill(Deserializer* d) { 1753 void ReadFill(Deserializer* d) {
1761 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 1754 bool is_vm_object = d->isolate() == Dart::vm_isolate();
1762 PageSpace* old_space = d->heap()->old_space(); 1755 PageSpace* old_space = d->heap()->old_space();
1763 for (intptr_t id = start_index_; id < stop_index_; id += 1) { 1756 for (intptr_t id = start_index_; id < stop_index_; id += 1) {
1764 intptr_t length = d->Read<int32_t>(); 1757 intptr_t length = d->Read<int32_t>();
1765 RawTypedData* info_array = reinterpret_cast<RawTypedData*>( 1758 RawTypedData* info_array = reinterpret_cast<RawTypedData*>(
1766 AllocateUninitialized(old_space, TypedData::InstanceSize(length))); 1759 AllocateUninitialized(old_space, TypedData::InstanceSize(length)));
1767 Deserializer::InitializeHeader(info_array, kTypedDataUint8ArrayCid, 1760 Deserializer::InitializeHeader(info_array, kTypedDataUint8ArrayCid,
1768 TypedData::InstanceSize(length), 1761 TypedData::InstanceSize(length),
1769 is_vm_object); 1762 is_vm_object);
1770 info_array->ptr()->length_ = Smi::New(length); 1763 info_array->ptr()->length_ = Smi::New(length);
1771 RawObjectPool* pool = reinterpret_cast<RawObjectPool*>(d->Ref(id + 0)); 1764 RawObjectPool* pool = reinterpret_cast<RawObjectPool*>(d->Ref(id + 0));
1772 Deserializer::InitializeHeader(pool, kObjectPoolCid, 1765 Deserializer::InitializeHeader(
1773 ObjectPool::InstanceSize(length), 1766 pool, kObjectPoolCid, ObjectPool::InstanceSize(length), is_vm_object);
1774 is_vm_object);
1775 pool->ptr()->length_ = length; 1767 pool->ptr()->length_ = length;
1776 pool->ptr()->info_array_ = info_array; 1768 pool->ptr()->info_array_ = info_array;
1777 for (intptr_t j = 0; j < length; j++) { 1769 for (intptr_t j = 0; j < length; j++) {
1778 ObjectPool::EntryType entry_type = 1770 ObjectPool::EntryType entry_type =
1779 static_cast<ObjectPool::EntryType>(d->Read<int8_t>()); 1771 static_cast<ObjectPool::EntryType>(d->Read<int8_t>());
1780 info_array->ptr()->data()[j] = entry_type; 1772 info_array->ptr()->data()[j] = entry_type;
1781 RawObjectPool::Entry& entry = pool->ptr()->data()[j]; 1773 RawObjectPool::Entry& entry = pool->ptr()->data()[j];
1782 switch (entry_type) { 1774 switch (entry_type) {
1783 case ObjectPool::kTaggedObject: 1775 case ObjectPool::kTaggedObject:
1784 entry.raw_obj_ = d->ReadRef(); 1776 entry.raw_obj_ = d->ReadRef();
(...skipping 17 matching lines...) Expand all
1802 } 1794 }
1803 } 1795 }
1804 } 1796 }
1805 }; 1797 };
1806 1798
1807 1799
1808 #if !defined(DART_PRECOMPILED_RUNTIME) 1800 #if !defined(DART_PRECOMPILED_RUNTIME)
1809 // PcDescriptor, Stackmap, OneByteString, TwoByteString 1801 // PcDescriptor, Stackmap, OneByteString, TwoByteString
1810 class RODataSerializationCluster : public SerializationCluster { 1802 class RODataSerializationCluster : public SerializationCluster {
1811 public: 1803 public:
1812 explicit RODataSerializationCluster(intptr_t cid) : cid_(cid) { } 1804 explicit RODataSerializationCluster(intptr_t cid) : cid_(cid) {}
1813 virtual ~RODataSerializationCluster() { } 1805 virtual ~RODataSerializationCluster() {}
1814 1806
1815 void Trace(Serializer* s, RawObject* object) { 1807 void Trace(Serializer* s, RawObject* object) {
1816 objects_.Add(object); 1808 objects_.Add(object);
1817 1809
1818 // A string's hash must already be computed when we write it because it 1810 // A string's hash must already be computed when we write it because it
1819 // will be loaded into read-only memory. 1811 // will be loaded into read-only memory.
1820 if (cid_ == kOneByteStringCid) { 1812 if (cid_ == kOneByteStringCid) {
1821 RawOneByteString* str = static_cast<RawOneByteString*>(object); 1813 RawOneByteString* str = static_cast<RawOneByteString*>(object);
1822 if (str->ptr()->hash_ == Smi::New(0)) { 1814 if (str->ptr()->hash_ == Smi::New(0)) {
1823 intptr_t hash = String::Hash(str->ptr()->data(), 1815 intptr_t hash =
1824 Smi::Value(str->ptr()->length_)); 1816 String::Hash(str->ptr()->data(), Smi::Value(str->ptr()->length_));
1825 str->ptr()->hash_ = Smi::New(hash); 1817 str->ptr()->hash_ = Smi::New(hash);
1826 } 1818 }
1827 ASSERT(str->ptr()->hash_ != Smi::New(0)); 1819 ASSERT(str->ptr()->hash_ != Smi::New(0));
1828 } else if (cid_ == kTwoByteStringCid) { 1820 } else if (cid_ == kTwoByteStringCid) {
1829 RawTwoByteString* str = static_cast<RawTwoByteString*>(object); 1821 RawTwoByteString* str = static_cast<RawTwoByteString*>(object);
1830 if (str->ptr()->hash_ == Smi::New(0)) { 1822 if (str->ptr()->hash_ == Smi::New(0)) {
1831 intptr_t hash = String::Hash(str->ptr()->data(), 1823 intptr_t hash = String::Hash(str->ptr()->data(),
1832 Smi::Value(str->ptr()->length_) * 2); 1824 Smi::Value(str->ptr()->length_) * 2);
1833 str->ptr()->hash_ = Smi::New(hash); 1825 str->ptr()->hash_ = Smi::New(hash);
1834 } 1826 }
(...skipping 19 matching lines...) Expand all
1854 1846
1855 private: 1847 private:
1856 const intptr_t cid_; 1848 const intptr_t cid_;
1857 GrowableArray<RawObject*> objects_; 1849 GrowableArray<RawObject*> objects_;
1858 }; 1850 };
1859 #endif // !DART_PRECOMPILED_RUNTIME 1851 #endif // !DART_PRECOMPILED_RUNTIME
1860 1852
1861 1853
1862 class RODataDeserializationCluster : public DeserializationCluster { 1854 class RODataDeserializationCluster : public DeserializationCluster {
1863 public: 1855 public:
1864 RODataDeserializationCluster() { } 1856 RODataDeserializationCluster() {}
1865 virtual ~RODataDeserializationCluster() { } 1857 virtual ~RODataDeserializationCluster() {}
1866 1858
1867 void ReadAlloc(Deserializer* d) { 1859 void ReadAlloc(Deserializer* d) {
1868 intptr_t count = d->Read<int32_t>(); 1860 intptr_t count = d->Read<int32_t>();
1869 for (intptr_t i = 0; i < count; i++) { 1861 for (intptr_t i = 0; i < count; i++) {
1870 int32_t rodata_offset = d->Read<int32_t>(); 1862 int32_t rodata_offset = d->Read<int32_t>();
1871 d->AssignRef(d->GetObjectAt(rodata_offset)); 1863 d->AssignRef(d->GetObjectAt(rodata_offset));
1872 } 1864 }
1873 } 1865 }
1874 1866
1875 void ReadFill(Deserializer* d) { 1867 void ReadFill(Deserializer* d) {
1876 // No-op. 1868 // No-op.
1877 } 1869 }
1878 }; 1870 };
1879 1871
1880 1872
1881 #if !defined(DART_PRECOMPILED_RUNTIME) 1873 #if !defined(DART_PRECOMPILED_RUNTIME)
1882 class ExceptionHandlersSerializationCluster : public SerializationCluster { 1874 class ExceptionHandlersSerializationCluster : public SerializationCluster {
1883 public: 1875 public:
1884 ExceptionHandlersSerializationCluster() { } 1876 ExceptionHandlersSerializationCluster() {}
1885 virtual ~ExceptionHandlersSerializationCluster() { } 1877 virtual ~ExceptionHandlersSerializationCluster() {}
1886 1878
1887 void Trace(Serializer* s, RawObject* object) { 1879 void Trace(Serializer* s, RawObject* object) {
1888 RawExceptionHandlers* handlers = ExceptionHandlers::RawCast(object); 1880 RawExceptionHandlers* handlers = ExceptionHandlers::RawCast(object);
1889 objects_.Add(handlers); 1881 objects_.Add(handlers);
1890 1882
1891 s->Push(handlers->ptr()->handled_types_data_); 1883 s->Push(handlers->ptr()->handled_types_data_);
1892 } 1884 }
1893 1885
1894 void WriteAlloc(Serializer* s) { 1886 void WriteAlloc(Serializer* s) {
1895 s->WriteCid(kExceptionHandlersCid); 1887 s->WriteCid(kExceptionHandlersCid);
(...skipping 23 matching lines...) Expand all
1919 } 1911 }
1920 1912
1921 private: 1913 private:
1922 GrowableArray<RawExceptionHandlers*> objects_; 1914 GrowableArray<RawExceptionHandlers*> objects_;
1923 }; 1915 };
1924 #endif // !DART_PRECOMPILED_RUNTIME 1916 #endif // !DART_PRECOMPILED_RUNTIME
1925 1917
1926 1918
1927 class ExceptionHandlersDeserializationCluster : public DeserializationCluster { 1919 class ExceptionHandlersDeserializationCluster : public DeserializationCluster {
1928 public: 1920 public:
1929 ExceptionHandlersDeserializationCluster() { } 1921 ExceptionHandlersDeserializationCluster() {}
1930 virtual ~ExceptionHandlersDeserializationCluster() { } 1922 virtual ~ExceptionHandlersDeserializationCluster() {}
1931 1923
1932 void ReadAlloc(Deserializer* d) { 1924 void ReadAlloc(Deserializer* d) {
1933 start_index_ = d->next_index(); 1925 start_index_ = d->next_index();
1934 PageSpace* old_space = d->heap()->old_space(); 1926 PageSpace* old_space = d->heap()->old_space();
1935 intptr_t count = d->Read<int32_t>(); 1927 intptr_t count = d->Read<int32_t>();
1936 for (intptr_t i = 0; i < count; i++) { 1928 for (intptr_t i = 0; i < count; i++) {
1937 intptr_t length = d->Read<int32_t>(); 1929 intptr_t length = d->Read<int32_t>();
1938 d->AssignRef(AllocateUninitialized(old_space, 1930 d->AssignRef(AllocateUninitialized(
1939 ExceptionHandlers::InstanceSize(length))); 1931 old_space, ExceptionHandlers::InstanceSize(length)));
1940 } 1932 }
1941 stop_index_ = d->next_index(); 1933 stop_index_ = d->next_index();
1942 } 1934 }
1943 1935
1944 void ReadFill(Deserializer* d) { 1936 void ReadFill(Deserializer* d) {
1945 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 1937 bool is_vm_object = d->isolate() == Dart::vm_isolate();
1946 1938
1947 for (intptr_t id = start_index_; id < stop_index_; id++) { 1939 for (intptr_t id = start_index_; id < stop_index_; id++) {
1948 RawExceptionHandlers* handlers = 1940 RawExceptionHandlers* handlers =
1949 reinterpret_cast<RawExceptionHandlers*>(d->Ref(id)); 1941 reinterpret_cast<RawExceptionHandlers*>(d->Ref(id));
1950 intptr_t length = d->Read<int32_t>(); 1942 intptr_t length = d->Read<int32_t>();
1951 Deserializer::InitializeHeader(handlers, kExceptionHandlersCid, 1943 Deserializer::InitializeHeader(handlers, kExceptionHandlersCid,
1952 ExceptionHandlers::InstanceSize(length), 1944 ExceptionHandlers::InstanceSize(length),
1953 is_vm_object); 1945 is_vm_object);
1954 handlers->ptr()->num_entries_ = length; 1946 handlers->ptr()->num_entries_ = length;
1955 handlers->ptr()->handled_types_data_ = 1947 handlers->ptr()->handled_types_data_ =
1956 reinterpret_cast<RawArray*>(d->ReadRef()); 1948 reinterpret_cast<RawArray*>(d->ReadRef());
1957 1949
1958 uint8_t* data = reinterpret_cast<uint8_t*>(handlers->ptr()->data()); 1950 uint8_t* data = reinterpret_cast<uint8_t*>(handlers->ptr()->data());
1959 intptr_t length_in_bytes = 1951 intptr_t length_in_bytes =
1960 length * sizeof(RawExceptionHandlers::HandlerInfo); 1952 length * sizeof(RawExceptionHandlers::HandlerInfo);
1961 d->ReadBytes(data, length_in_bytes); 1953 d->ReadBytes(data, length_in_bytes);
1962 } 1954 }
1963 } 1955 }
1964 }; 1956 };
1965 1957
1966 #if !defined(DART_PRECOMPILED_RUNTIME) 1958 #if !defined(DART_PRECOMPILED_RUNTIME)
1967 class ContextSerializationCluster : public SerializationCluster { 1959 class ContextSerializationCluster : public SerializationCluster {
1968 public: 1960 public:
1969 ContextSerializationCluster() { } 1961 ContextSerializationCluster() {}
1970 virtual ~ContextSerializationCluster() { } 1962 virtual ~ContextSerializationCluster() {}
1971 1963
1972 void Trace(Serializer* s, RawObject* object) { 1964 void Trace(Serializer* s, RawObject* object) {
1973 RawContext* context = Context::RawCast(object); 1965 RawContext* context = Context::RawCast(object);
1974 objects_.Add(context); 1966 objects_.Add(context);
1975 1967
1976 s->Push(context->ptr()->parent_); 1968 s->Push(context->ptr()->parent_);
1977 intptr_t length = context->ptr()->num_variables_; 1969 intptr_t length = context->ptr()->num_variables_;
1978 for (intptr_t i = 0; i < length; i++) { 1970 for (intptr_t i = 0; i < length; i++) {
1979 s->Push(context->ptr()->data()[i]); 1971 s->Push(context->ptr()->data()[i]);
1980 } 1972 }
(...skipping 25 matching lines...) Expand all
2006 } 1998 }
2007 1999
2008 private: 2000 private:
2009 GrowableArray<RawContext*> objects_; 2001 GrowableArray<RawContext*> objects_;
2010 }; 2002 };
2011 #endif // !DART_PRECOMPILED_RUNTIME 2003 #endif // !DART_PRECOMPILED_RUNTIME
2012 2004
2013 2005
2014 class ContextDeserializationCluster : public DeserializationCluster { 2006 class ContextDeserializationCluster : public DeserializationCluster {
2015 public: 2007 public:
2016 ContextDeserializationCluster() { } 2008 ContextDeserializationCluster() {}
2017 virtual ~ContextDeserializationCluster() { } 2009 virtual ~ContextDeserializationCluster() {}
2018 2010
2019 void ReadAlloc(Deserializer* d) { 2011 void ReadAlloc(Deserializer* d) {
2020 start_index_ = d->next_index(); 2012 start_index_ = d->next_index();
2021 PageSpace* old_space = d->heap()->old_space(); 2013 PageSpace* old_space = d->heap()->old_space();
2022 intptr_t count = d->Read<int32_t>(); 2014 intptr_t count = d->Read<int32_t>();
2023 for (intptr_t i = 0; i < count; i++) { 2015 for (intptr_t i = 0; i < count; i++) {
2024 intptr_t length = d->Read<int32_t>(); 2016 intptr_t length = d->Read<int32_t>();
2025 d->AssignRef(AllocateUninitialized(old_space, 2017 d->AssignRef(
2026 Context::InstanceSize(length))); 2018 AllocateUninitialized(old_space, Context::InstanceSize(length)));
2027 } 2019 }
2028 stop_index_ = d->next_index(); 2020 stop_index_ = d->next_index();
2029 } 2021 }
2030 2022
2031 void ReadFill(Deserializer* d) { 2023 void ReadFill(Deserializer* d) {
2032 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 2024 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2033 2025
2034 for (intptr_t id = start_index_; id < stop_index_; id++) { 2026 for (intptr_t id = start_index_; id < stop_index_; id++) {
2035 RawContext* context = reinterpret_cast<RawContext*>(d->Ref(id)); 2027 RawContext* context = reinterpret_cast<RawContext*>(d->Ref(id));
2036 intptr_t length = d->Read<int32_t>(); 2028 intptr_t length = d->Read<int32_t>();
2037 Deserializer::InitializeHeader(context, kContextCid, 2029 Deserializer::InitializeHeader(
2038 Context::InstanceSize(length), 2030 context, kContextCid, Context::InstanceSize(length), is_vm_object);
2039 is_vm_object);
2040 context->ptr()->num_variables_ = length; 2031 context->ptr()->num_variables_ = length;
2041 context->ptr()->parent_ = reinterpret_cast<RawContext*>(d->ReadRef()); 2032 context->ptr()->parent_ = reinterpret_cast<RawContext*>(d->ReadRef());
2042 for (intptr_t j = 0; j < length; j++) { 2033 for (intptr_t j = 0; j < length; j++) {
2043 context->ptr()->data()[j] = d->ReadRef(); 2034 context->ptr()->data()[j] = d->ReadRef();
2044 } 2035 }
2045 } 2036 }
2046 } 2037 }
2047 }; 2038 };
2048 2039
2049 2040
2050 #if !defined(DART_PRECOMPILED_RUNTIME) 2041 #if !defined(DART_PRECOMPILED_RUNTIME)
2051 class ContextScopeSerializationCluster : public SerializationCluster { 2042 class ContextScopeSerializationCluster : public SerializationCluster {
2052 public: 2043 public:
2053 ContextScopeSerializationCluster() { } 2044 ContextScopeSerializationCluster() {}
2054 virtual ~ContextScopeSerializationCluster() { } 2045 virtual ~ContextScopeSerializationCluster() {}
2055 2046
2056 void Trace(Serializer* s, RawObject* object) { 2047 void Trace(Serializer* s, RawObject* object) {
2057 RawContextScope* scope = ContextScope::RawCast(object); 2048 RawContextScope* scope = ContextScope::RawCast(object);
2058 objects_.Add(scope); 2049 objects_.Add(scope);
2059 2050
2060 intptr_t length = scope->ptr()->num_variables_; 2051 intptr_t length = scope->ptr()->num_variables_;
2061 RawObject** from = scope->from(); 2052 RawObject** from = scope->from();
2062 RawObject** to = scope->to(length); 2053 RawObject** to = scope->to(length);
2063 for (RawObject** p = from; p <= to; p++) { 2054 for (RawObject** p = from; p <= to; p++) {
2064 s->Push(*p); 2055 s->Push(*p);
(...skipping 28 matching lines...) Expand all
2093 } 2084 }
2094 2085
2095 private: 2086 private:
2096 GrowableArray<RawContextScope*> objects_; 2087 GrowableArray<RawContextScope*> objects_;
2097 }; 2088 };
2098 #endif // !DART_PRECOMPILED_RUNTIME 2089 #endif // !DART_PRECOMPILED_RUNTIME
2099 2090
2100 2091
2101 class ContextScopeDeserializationCluster : public DeserializationCluster { 2092 class ContextScopeDeserializationCluster : public DeserializationCluster {
2102 public: 2093 public:
2103 ContextScopeDeserializationCluster() { } 2094 ContextScopeDeserializationCluster() {}
2104 virtual ~ContextScopeDeserializationCluster() { } 2095 virtual ~ContextScopeDeserializationCluster() {}
2105 2096
2106 void ReadAlloc(Deserializer* d) { 2097 void ReadAlloc(Deserializer* d) {
2107 start_index_ = d->next_index(); 2098 start_index_ = d->next_index();
2108 PageSpace* old_space = d->heap()->old_space(); 2099 PageSpace* old_space = d->heap()->old_space();
2109 intptr_t count = d->Read<int32_t>(); 2100 intptr_t count = d->Read<int32_t>();
2110 for (intptr_t i = 0; i < count; i++) { 2101 for (intptr_t i = 0; i < count; i++) {
2111 intptr_t length = d->Read<int32_t>(); 2102 intptr_t length = d->Read<int32_t>();
2112 d->AssignRef(AllocateUninitialized(old_space, 2103 d->AssignRef(
2113 ContextScope::InstanceSize(length))); 2104 AllocateUninitialized(old_space, ContextScope::InstanceSize(length)));
2114 } 2105 }
2115 stop_index_ = d->next_index(); 2106 stop_index_ = d->next_index();
2116 } 2107 }
2117 2108
2118 void ReadFill(Deserializer* d) { 2109 void ReadFill(Deserializer* d) {
2119 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 2110 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2120 2111
2121 for (intptr_t id = start_index_; id < stop_index_; id++) { 2112 for (intptr_t id = start_index_; id < stop_index_; id++) {
2122 RawContextScope* scope = reinterpret_cast<RawContextScope*>(d->Ref(id)); 2113 RawContextScope* scope = reinterpret_cast<RawContextScope*>(d->Ref(id));
2123 intptr_t length = d->Read<int32_t>(); 2114 intptr_t length = d->Read<int32_t>();
2124 Deserializer::InitializeHeader(scope, kContextScopeCid, 2115 Deserializer::InitializeHeader(scope, kContextScopeCid,
2125 ContextScope::InstanceSize(length), 2116 ContextScope::InstanceSize(length),
2126 is_vm_object); 2117 is_vm_object);
2127 scope->ptr()->num_variables_ = length; 2118 scope->ptr()->num_variables_ = length;
2128 scope->ptr()->is_implicit_ = d->Read<bool>(); 2119 scope->ptr()->is_implicit_ = d->Read<bool>();
2129 RawObject** from = scope->from(); 2120 RawObject** from = scope->from();
2130 RawObject** to = scope->to(length); 2121 RawObject** to = scope->to(length);
2131 for (RawObject** p = from; p <= to; p++) { 2122 for (RawObject** p = from; p <= to; p++) {
2132 *p = d->ReadRef(); 2123 *p = d->ReadRef();
2133 } 2124 }
2134 } 2125 }
2135 } 2126 }
2136 }; 2127 };
2137 2128
2138 2129
2139 #if !defined(DART_PRECOMPILED_RUNTIME) 2130 #if !defined(DART_PRECOMPILED_RUNTIME)
2140 class UnlinkedCallSerializationCluster : public SerializationCluster { 2131 class UnlinkedCallSerializationCluster : public SerializationCluster {
2141 public: 2132 public:
2142 UnlinkedCallSerializationCluster() { } 2133 UnlinkedCallSerializationCluster() {}
2143 virtual ~UnlinkedCallSerializationCluster() { } 2134 virtual ~UnlinkedCallSerializationCluster() {}
2144 2135
2145 void Trace(Serializer* s, RawObject* object) { 2136 void Trace(Serializer* s, RawObject* object) {
2146 RawUnlinkedCall* unlinked = UnlinkedCall::RawCast(object); 2137 RawUnlinkedCall* unlinked = UnlinkedCall::RawCast(object);
2147 objects_.Add(unlinked); 2138 objects_.Add(unlinked);
2148 2139
2149 RawObject** from = unlinked->from(); 2140 RawObject** from = unlinked->from();
2150 RawObject** to = unlinked->to(); 2141 RawObject** to = unlinked->to();
2151 for (RawObject** p = from; p <= to; p++) { 2142 for (RawObject** p = from; p <= to; p++) {
2152 s->Push(*p); 2143 s->Push(*p);
2153 } 2144 }
(...skipping 22 matching lines...) Expand all
2176 } 2167 }
2177 2168
2178 private: 2169 private:
2179 GrowableArray<RawUnlinkedCall*> objects_; 2170 GrowableArray<RawUnlinkedCall*> objects_;
2180 }; 2171 };
2181 #endif // !DART_PRECOMPILED_RUNTIME 2172 #endif // !DART_PRECOMPILED_RUNTIME
2182 2173
2183 2174
2184 class UnlinkedCallDeserializationCluster : public DeserializationCluster { 2175 class UnlinkedCallDeserializationCluster : public DeserializationCluster {
2185 public: 2176 public:
2186 UnlinkedCallDeserializationCluster() { } 2177 UnlinkedCallDeserializationCluster() {}
2187 virtual ~UnlinkedCallDeserializationCluster() { } 2178 virtual ~UnlinkedCallDeserializationCluster() {}
2188 2179
2189 void ReadAlloc(Deserializer* d) { 2180 void ReadAlloc(Deserializer* d) {
2190 start_index_ = d->next_index(); 2181 start_index_ = d->next_index();
2191 PageSpace* old_space = d->heap()->old_space(); 2182 PageSpace* old_space = d->heap()->old_space();
2192 intptr_t count = d->Read<int32_t>(); 2183 intptr_t count = d->Read<int32_t>();
2193 for (intptr_t i = 0; i < count; i++) { 2184 for (intptr_t i = 0; i < count; i++) {
2194 d->AssignRef(AllocateUninitialized(old_space, 2185 d->AssignRef(
2195 UnlinkedCall::InstanceSize())); 2186 AllocateUninitialized(old_space, UnlinkedCall::InstanceSize()));
2196 } 2187 }
2197 stop_index_ = d->next_index(); 2188 stop_index_ = d->next_index();
2198 } 2189 }
2199 2190
2200 void ReadFill(Deserializer* d) { 2191 void ReadFill(Deserializer* d) {
2201 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 2192 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2202 2193
2203 for (intptr_t id = start_index_; id < stop_index_; id++) { 2194 for (intptr_t id = start_index_; id < stop_index_; id++) {
2204 RawUnlinkedCall* unlinked = 2195 RawUnlinkedCall* unlinked =
2205 reinterpret_cast<RawUnlinkedCall*>(d->Ref(id)); 2196 reinterpret_cast<RawUnlinkedCall*>(d->Ref(id));
2206 Deserializer::InitializeHeader(unlinked, kUnlinkedCallCid, 2197 Deserializer::InitializeHeader(unlinked, kUnlinkedCallCid,
2207 UnlinkedCall::InstanceSize(), 2198 UnlinkedCall::InstanceSize(),
2208 is_vm_object); 2199 is_vm_object);
2209 RawObject** from = unlinked->from(); 2200 RawObject** from = unlinked->from();
2210 RawObject** to = unlinked->to(); 2201 RawObject** to = unlinked->to();
2211 for (RawObject** p = from; p <= to; p++) { 2202 for (RawObject** p = from; p <= to; p++) {
2212 *p = d->ReadRef(); 2203 *p = d->ReadRef();
2213 } 2204 }
2214 } 2205 }
2215 } 2206 }
2216 }; 2207 };
2217 2208
2218 2209
2219 #if !defined(DART_PRECOMPILED_RUNTIME) 2210 #if !defined(DART_PRECOMPILED_RUNTIME)
2220 class ICDataSerializationCluster : public SerializationCluster { 2211 class ICDataSerializationCluster : public SerializationCluster {
2221 public: 2212 public:
2222 ICDataSerializationCluster() { } 2213 ICDataSerializationCluster() {}
2223 virtual ~ICDataSerializationCluster() { } 2214 virtual ~ICDataSerializationCluster() {}
2224 2215
2225 void Trace(Serializer* s, RawObject* object) { 2216 void Trace(Serializer* s, RawObject* object) {
2226 RawICData* ic = ICData::RawCast(object); 2217 RawICData* ic = ICData::RawCast(object);
2227 objects_.Add(ic); 2218 objects_.Add(ic);
2228 2219
2229 RawObject** from = ic->from(); 2220 RawObject** from = ic->from();
2230 RawObject** to = ic->to_snapshot(s->kind()); 2221 RawObject** to = ic->to_snapshot(s->kind());
2231 for (RawObject** p = from; p <= to; p++) { 2222 for (RawObject** p = from; p <= to; p++) {
2232 s->Push(*p); 2223 s->Push(*p);
2233 } 2224 }
(...skipping 30 matching lines...) Expand all
2264 } 2255 }
2265 2256
2266 private: 2257 private:
2267 GrowableArray<RawICData*> objects_; 2258 GrowableArray<RawICData*> objects_;
2268 }; 2259 };
2269 #endif // !DART_PRECOMPILED_RUNTIME 2260 #endif // !DART_PRECOMPILED_RUNTIME
2270 2261
2271 2262
2272 class ICDataDeserializationCluster : public DeserializationCluster { 2263 class ICDataDeserializationCluster : public DeserializationCluster {
2273 public: 2264 public:
2274 ICDataDeserializationCluster() { } 2265 ICDataDeserializationCluster() {}
2275 virtual ~ICDataDeserializationCluster() { } 2266 virtual ~ICDataDeserializationCluster() {}
2276 2267
2277 void ReadAlloc(Deserializer* d) { 2268 void ReadAlloc(Deserializer* d) {
2278 start_index_ = d->next_index(); 2269 start_index_ = d->next_index();
2279 PageSpace* old_space = d->heap()->old_space(); 2270 PageSpace* old_space = d->heap()->old_space();
2280 intptr_t count = d->Read<int32_t>(); 2271 intptr_t count = d->Read<int32_t>();
2281 for (intptr_t i = 0; i < count; i++) { 2272 for (intptr_t i = 0; i < count; i++) {
2282 d->AssignRef(AllocateUninitialized(old_space, ICData::InstanceSize())); 2273 d->AssignRef(AllocateUninitialized(old_space, ICData::InstanceSize()));
2283 } 2274 }
2284 stop_index_ = d->next_index(); 2275 stop_index_ = d->next_index();
2285 } 2276 }
2286 2277
2287 void ReadFill(Deserializer* d) { 2278 void ReadFill(Deserializer* d) {
2288 Snapshot::Kind kind = d->kind(); 2279 Snapshot::Kind kind = d->kind();
2289 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 2280 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2290 2281
2291 for (intptr_t id = start_index_; id < stop_index_; id++) { 2282 for (intptr_t id = start_index_; id < stop_index_; id++) {
2292 RawICData* ic = reinterpret_cast<RawICData*>(d->Ref(id)); 2283 RawICData* ic = reinterpret_cast<RawICData*>(d->Ref(id));
2293 Deserializer::InitializeHeader(ic, kICDataCid, 2284 Deserializer::InitializeHeader(ic, kICDataCid, ICData::InstanceSize(),
2294 ICData::InstanceSize(), is_vm_object); 2285 is_vm_object);
2295 RawObject** from = ic->from(); 2286 RawObject** from = ic->from();
2296 RawObject** to_snapshot = ic->to_snapshot(kind); 2287 RawObject** to_snapshot = ic->to_snapshot(kind);
2297 RawObject** to = ic->to(); 2288 RawObject** to = ic->to();
2298 for (RawObject** p = from; p <= to_snapshot; p++) { 2289 for (RawObject** p = from; p <= to_snapshot; p++) {
2299 *p = d->ReadRef(); 2290 *p = d->ReadRef();
2300 } 2291 }
2301 for (RawObject** p = to_snapshot + 1; p <= to; p++) { 2292 for (RawObject** p = to_snapshot + 1; p <= to; p++) {
2302 *p = Object::null(); 2293 *p = Object::null();
2303 } 2294 }
2304 NOT_IN_PRECOMPILED(ic->ptr()->deopt_id_ = d->Read<int32_t>()); 2295 NOT_IN_PRECOMPILED(ic->ptr()->deopt_id_ = d->Read<int32_t>());
2305 ic->ptr()->state_bits_ = d->Read<int32_t>(); 2296 ic->ptr()->state_bits_ = d->Read<int32_t>();
2306 #if defined(TAG_IC_DATA) 2297 #if defined(TAG_IC_DATA)
2307 ic->ptr()->tag_ = d->Read<int32_t>(); 2298 ic->ptr()->tag_ = d->Read<int32_t>();
2308 #endif 2299 #endif
2309 } 2300 }
2310 } 2301 }
2311 }; 2302 };
2312 2303
2313 2304
2314 #if !defined(DART_PRECOMPILED_RUNTIME) 2305 #if !defined(DART_PRECOMPILED_RUNTIME)
2315 class MegamorphicCacheSerializationCluster : public SerializationCluster { 2306 class MegamorphicCacheSerializationCluster : public SerializationCluster {
2316 public: 2307 public:
2317 MegamorphicCacheSerializationCluster() { } 2308 MegamorphicCacheSerializationCluster() {}
2318 virtual ~MegamorphicCacheSerializationCluster() { } 2309 virtual ~MegamorphicCacheSerializationCluster() {}
2319 2310
2320 void Trace(Serializer* s, RawObject* object) { 2311 void Trace(Serializer* s, RawObject* object) {
2321 RawMegamorphicCache* cache = MegamorphicCache::RawCast(object); 2312 RawMegamorphicCache* cache = MegamorphicCache::RawCast(object);
2322 objects_.Add(cache); 2313 objects_.Add(cache);
2323 2314
2324 RawObject** from = cache->from(); 2315 RawObject** from = cache->from();
2325 RawObject** to = cache->to(); 2316 RawObject** to = cache->to();
2326 for (RawObject** p = from; p <= to; p++) { 2317 for (RawObject** p = from; p <= to; p++) {
2327 s->Push(*p); 2318 s->Push(*p);
2328 } 2319 }
(...skipping 23 matching lines...) Expand all
2352 } 2343 }
2353 2344
2354 private: 2345 private:
2355 GrowableArray<RawMegamorphicCache*> objects_; 2346 GrowableArray<RawMegamorphicCache*> objects_;
2356 }; 2347 };
2357 #endif // !DART_PRECOMPILED_RUNTIME 2348 #endif // !DART_PRECOMPILED_RUNTIME
2358 2349
2359 2350
2360 class MegamorphicCacheDeserializationCluster : public DeserializationCluster { 2351 class MegamorphicCacheDeserializationCluster : public DeserializationCluster {
2361 public: 2352 public:
2362 MegamorphicCacheDeserializationCluster() { } 2353 MegamorphicCacheDeserializationCluster() {}
2363 virtual ~MegamorphicCacheDeserializationCluster() { } 2354 virtual ~MegamorphicCacheDeserializationCluster() {}
2364 2355
2365 void ReadAlloc(Deserializer* d) { 2356 void ReadAlloc(Deserializer* d) {
2366 start_index_ = d->next_index(); 2357 start_index_ = d->next_index();
2367 PageSpace* old_space = d->heap()->old_space(); 2358 PageSpace* old_space = d->heap()->old_space();
2368 intptr_t count = d->Read<int32_t>(); 2359 intptr_t count = d->Read<int32_t>();
2369 for (intptr_t i = 0; i < count; i++) { 2360 for (intptr_t i = 0; i < count; i++) {
2370 d->AssignRef(AllocateUninitialized(old_space, 2361 d->AssignRef(
2371 MegamorphicCache::InstanceSize())); 2362 AllocateUninitialized(old_space, MegamorphicCache::InstanceSize()));
2372 } 2363 }
2373 stop_index_ = d->next_index(); 2364 stop_index_ = d->next_index();
2374 } 2365 }
2375 2366
2376 void ReadFill(Deserializer* d) { 2367 void ReadFill(Deserializer* d) {
2377 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 2368 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2378 2369
2379 for (intptr_t id = start_index_; id < stop_index_; id++) { 2370 for (intptr_t id = start_index_; id < stop_index_; id++) {
2380 RawMegamorphicCache* cache = 2371 RawMegamorphicCache* cache =
2381 reinterpret_cast<RawMegamorphicCache*>(d->Ref(id)); 2372 reinterpret_cast<RawMegamorphicCache*>(d->Ref(id));
2382 Deserializer::InitializeHeader(cache, kMegamorphicCacheCid, 2373 Deserializer::InitializeHeader(cache, kMegamorphicCacheCid,
2383 MegamorphicCache::InstanceSize(), 2374 MegamorphicCache::InstanceSize(),
2384 is_vm_object); 2375 is_vm_object);
2385 RawObject** from = cache->from(); 2376 RawObject** from = cache->from();
2386 RawObject** to = cache->to(); 2377 RawObject** to = cache->to();
2387 for (RawObject** p = from; p <= to; p++) { 2378 for (RawObject** p = from; p <= to; p++) {
2388 *p = d->ReadRef(); 2379 *p = d->ReadRef();
2389 } 2380 }
2390 cache->ptr()->filled_entry_count_ = d->Read<int32_t>(); 2381 cache->ptr()->filled_entry_count_ = d->Read<int32_t>();
2391 } 2382 }
2392 } 2383 }
2393 }; 2384 };
2394 2385
2395 2386
2396 #if !defined(DART_PRECOMPILED_RUNTIME) 2387 #if !defined(DART_PRECOMPILED_RUNTIME)
2397 class SubtypeTestCacheSerializationCluster : public SerializationCluster { 2388 class SubtypeTestCacheSerializationCluster : public SerializationCluster {
2398 public: 2389 public:
2399 SubtypeTestCacheSerializationCluster() { } 2390 SubtypeTestCacheSerializationCluster() {}
2400 virtual ~SubtypeTestCacheSerializationCluster() { } 2391 virtual ~SubtypeTestCacheSerializationCluster() {}
2401 2392
2402 void Trace(Serializer* s, RawObject* object) { 2393 void Trace(Serializer* s, RawObject* object) {
2403 RawSubtypeTestCache* cache = SubtypeTestCache::RawCast(object); 2394 RawSubtypeTestCache* cache = SubtypeTestCache::RawCast(object);
2404 objects_.Add(cache); 2395 objects_.Add(cache);
2405 s->Push(cache->ptr()->cache_); 2396 s->Push(cache->ptr()->cache_);
2406 } 2397 }
2407 2398
2408 void WriteAlloc(Serializer* s) { 2399 void WriteAlloc(Serializer* s) {
2409 s->WriteCid(kSubtypeTestCacheCid); 2400 s->WriteCid(kSubtypeTestCacheCid);
2410 intptr_t count = objects_.length(); 2401 intptr_t count = objects_.length();
(...skipping 13 matching lines...) Expand all
2424 } 2415 }
2425 2416
2426 private: 2417 private:
2427 GrowableArray<RawSubtypeTestCache*> objects_; 2418 GrowableArray<RawSubtypeTestCache*> objects_;
2428 }; 2419 };
2429 #endif // !DART_PRECOMPILED_RUNTIME 2420 #endif // !DART_PRECOMPILED_RUNTIME
2430 2421
2431 2422
2432 class SubtypeTestCacheDeserializationCluster : public DeserializationCluster { 2423 class SubtypeTestCacheDeserializationCluster : public DeserializationCluster {
2433 public: 2424 public:
2434 SubtypeTestCacheDeserializationCluster() { } 2425 SubtypeTestCacheDeserializationCluster() {}
2435 virtual ~SubtypeTestCacheDeserializationCluster() { } 2426 virtual ~SubtypeTestCacheDeserializationCluster() {}
2436 2427
2437 void ReadAlloc(Deserializer* d) { 2428 void ReadAlloc(Deserializer* d) {
2438 start_index_ = d->next_index(); 2429 start_index_ = d->next_index();
2439 PageSpace* old_space = d->heap()->old_space(); 2430 PageSpace* old_space = d->heap()->old_space();
2440 intptr_t count = d->Read<int32_t>(); 2431 intptr_t count = d->Read<int32_t>();
2441 for (intptr_t i = 0; i < count; i++) { 2432 for (intptr_t i = 0; i < count; i++) {
2442 d->AssignRef(AllocateUninitialized(old_space, 2433 d->AssignRef(
2443 SubtypeTestCache::InstanceSize())); 2434 AllocateUninitialized(old_space, SubtypeTestCache::InstanceSize()));
2444 } 2435 }
2445 stop_index_ = d->next_index(); 2436 stop_index_ = d->next_index();
2446 } 2437 }
2447 2438
2448 void ReadFill(Deserializer* d) { 2439 void ReadFill(Deserializer* d) {
2449 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 2440 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2450 2441
2451 for (intptr_t id = start_index_; id < stop_index_; id++) { 2442 for (intptr_t id = start_index_; id < stop_index_; id++) {
2452 RawSubtypeTestCache* cache = 2443 RawSubtypeTestCache* cache =
2453 reinterpret_cast<RawSubtypeTestCache*>(d->Ref(id)); 2444 reinterpret_cast<RawSubtypeTestCache*>(d->Ref(id));
2454 Deserializer::InitializeHeader(cache, kSubtypeTestCacheCid, 2445 Deserializer::InitializeHeader(cache, kSubtypeTestCacheCid,
2455 SubtypeTestCache::InstanceSize(), 2446 SubtypeTestCache::InstanceSize(),
2456 is_vm_object); 2447 is_vm_object);
2457 cache->ptr()->cache_ = reinterpret_cast<RawArray*>(d->ReadRef()); 2448 cache->ptr()->cache_ = reinterpret_cast<RawArray*>(d->ReadRef());
2458 } 2449 }
2459 } 2450 }
2460 }; 2451 };
2461 2452
2462 2453
2463 #if !defined(DART_PRECOMPILED_RUNTIME) 2454 #if !defined(DART_PRECOMPILED_RUNTIME)
2464 class LanguageErrorSerializationCluster : public SerializationCluster { 2455 class LanguageErrorSerializationCluster : public SerializationCluster {
2465 public: 2456 public:
2466 LanguageErrorSerializationCluster() { } 2457 LanguageErrorSerializationCluster() {}
2467 virtual ~LanguageErrorSerializationCluster() { } 2458 virtual ~LanguageErrorSerializationCluster() {}
2468 2459
2469 void Trace(Serializer* s, RawObject* object) { 2460 void Trace(Serializer* s, RawObject* object) {
2470 RawLanguageError* error = LanguageError::RawCast(object); 2461 RawLanguageError* error = LanguageError::RawCast(object);
2471 objects_.Add(error); 2462 objects_.Add(error);
2472 2463
2473 RawObject** from = error->from(); 2464 RawObject** from = error->from();
2474 RawObject** to = error->to(); 2465 RawObject** to = error->to();
2475 for (RawObject** p = from; p <= to; p++) { 2466 for (RawObject** p = from; p <= to; p++) {
2476 s->Push(*p); 2467 s->Push(*p);
2477 } 2468 }
(...skipping 25 matching lines...) Expand all
2503 } 2494 }
2504 2495
2505 private: 2496 private:
2506 GrowableArray<RawLanguageError*> objects_; 2497 GrowableArray<RawLanguageError*> objects_;
2507 }; 2498 };
2508 #endif // !DART_PRECOMPILED_RUNTIME 2499 #endif // !DART_PRECOMPILED_RUNTIME
2509 2500
2510 2501
2511 class LanguageErrorDeserializationCluster : public DeserializationCluster { 2502 class LanguageErrorDeserializationCluster : public DeserializationCluster {
2512 public: 2503 public:
2513 LanguageErrorDeserializationCluster() { } 2504 LanguageErrorDeserializationCluster() {}
2514 virtual ~LanguageErrorDeserializationCluster() { } 2505 virtual ~LanguageErrorDeserializationCluster() {}
2515 2506
2516 void ReadAlloc(Deserializer* d) { 2507 void ReadAlloc(Deserializer* d) {
2517 start_index_ = d->next_index(); 2508 start_index_ = d->next_index();
2518 PageSpace* old_space = d->heap()->old_space(); 2509 PageSpace* old_space = d->heap()->old_space();
2519 intptr_t count = d->Read<int32_t>(); 2510 intptr_t count = d->Read<int32_t>();
2520 for (intptr_t i = 0; i < count; i++) { 2511 for (intptr_t i = 0; i < count; i++) {
2521 d->AssignRef(AllocateUninitialized(old_space, 2512 d->AssignRef(
2522 LanguageError::InstanceSize())); 2513 AllocateUninitialized(old_space, LanguageError::InstanceSize()));
2523 } 2514 }
2524 stop_index_ = d->next_index(); 2515 stop_index_ = d->next_index();
2525 } 2516 }
2526 2517
2527 void ReadFill(Deserializer* d) { 2518 void ReadFill(Deserializer* d) {
2528 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 2519 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2529 2520
2530 for (intptr_t id = start_index_; id < stop_index_; id++) { 2521 for (intptr_t id = start_index_; id < stop_index_; id++) {
2531 RawLanguageError* error = reinterpret_cast<RawLanguageError*>(d->Ref(id)); 2522 RawLanguageError* error = reinterpret_cast<RawLanguageError*>(d->Ref(id));
2532 Deserializer::InitializeHeader(error, kLanguageErrorCid, 2523 Deserializer::InitializeHeader(error, kLanguageErrorCid,
2533 LanguageError::InstanceSize(), 2524 LanguageError::InstanceSize(),
2534 is_vm_object); 2525 is_vm_object);
2535 RawObject** from = error->from(); 2526 RawObject** from = error->from();
2536 RawObject** to = error->to(); 2527 RawObject** to = error->to();
2537 for (RawObject** p = from; p <= to; p++) { 2528 for (RawObject** p = from; p <= to; p++) {
2538 *p = d->ReadRef(); 2529 *p = d->ReadRef();
2539 } 2530 }
2540 error->ptr()->token_pos_ = d->ReadTokenPosition(); 2531 error->ptr()->token_pos_ = d->ReadTokenPosition();
2541 error->ptr()->report_after_token_ = d->Read<bool>(); 2532 error->ptr()->report_after_token_ = d->Read<bool>();
2542 error->ptr()->kind_ = d->Read<int8_t>(); 2533 error->ptr()->kind_ = d->Read<int8_t>();
2543 } 2534 }
2544 } 2535 }
2545 }; 2536 };
2546 2537
2547 2538
2548 #if !defined(DART_PRECOMPILED_RUNTIME) 2539 #if !defined(DART_PRECOMPILED_RUNTIME)
2549 class UnhandledExceptionSerializationCluster : public SerializationCluster { 2540 class UnhandledExceptionSerializationCluster : public SerializationCluster {
2550 public: 2541 public:
2551 UnhandledExceptionSerializationCluster() { } 2542 UnhandledExceptionSerializationCluster() {}
2552 virtual ~UnhandledExceptionSerializationCluster() { } 2543 virtual ~UnhandledExceptionSerializationCluster() {}
2553 2544
2554 void Trace(Serializer* s, RawObject* object) { 2545 void Trace(Serializer* s, RawObject* object) {
2555 RawUnhandledException* exception = UnhandledException::RawCast(object); 2546 RawUnhandledException* exception = UnhandledException::RawCast(object);
2556 objects_.Add(exception); 2547 objects_.Add(exception);
2557 2548
2558 RawObject** from = exception->from(); 2549 RawObject** from = exception->from();
2559 RawObject** to = exception->to(); 2550 RawObject** to = exception->to();
2560 for (RawObject** p = from; p <= to; p++) { 2551 for (RawObject** p = from; p <= to; p++) {
2561 s->Push(*p); 2552 s->Push(*p);
2562 } 2553 }
(...skipping 22 matching lines...) Expand all
2585 } 2576 }
2586 2577
2587 private: 2578 private:
2588 GrowableArray<RawUnhandledException*> objects_; 2579 GrowableArray<RawUnhandledException*> objects_;
2589 }; 2580 };
2590 #endif // !DART_PRECOMPILED_RUNTIME 2581 #endif // !DART_PRECOMPILED_RUNTIME
2591 2582
2592 2583
2593 class UnhandledExceptionDeserializationCluster : public DeserializationCluster { 2584 class UnhandledExceptionDeserializationCluster : public DeserializationCluster {
2594 public: 2585 public:
2595 UnhandledExceptionDeserializationCluster() { } 2586 UnhandledExceptionDeserializationCluster() {}
2596 virtual ~UnhandledExceptionDeserializationCluster() { } 2587 virtual ~UnhandledExceptionDeserializationCluster() {}
2597 2588
2598 void ReadAlloc(Deserializer* d) { 2589 void ReadAlloc(Deserializer* d) {
2599 start_index_ = d->next_index(); 2590 start_index_ = d->next_index();
2600 PageSpace* old_space = d->heap()->old_space(); 2591 PageSpace* old_space = d->heap()->old_space();
2601 intptr_t count = d->Read<int32_t>(); 2592 intptr_t count = d->Read<int32_t>();
2602 for (intptr_t i = 0; i < count; i++) { 2593 for (intptr_t i = 0; i < count; i++) {
2603 d->AssignRef(AllocateUninitialized(old_space, 2594 d->AssignRef(
2604 UnhandledException::InstanceSize())); 2595 AllocateUninitialized(old_space, UnhandledException::InstanceSize()));
2605 } 2596 }
2606 stop_index_ = d->next_index(); 2597 stop_index_ = d->next_index();
2607 } 2598 }
2608 2599
2609 void ReadFill(Deserializer* d) { 2600 void ReadFill(Deserializer* d) {
2610 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 2601 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2611 2602
2612 for (intptr_t id = start_index_; id < stop_index_; id++) { 2603 for (intptr_t id = start_index_; id < stop_index_; id++) {
2613 RawUnhandledException* exception = 2604 RawUnhandledException* exception =
2614 reinterpret_cast<RawUnhandledException*>(d->Ref(id)); 2605 reinterpret_cast<RawUnhandledException*>(d->Ref(id));
(...skipping 13 matching lines...) Expand all
2628 #if !defined(DART_PRECOMPILED_RUNTIME) 2619 #if !defined(DART_PRECOMPILED_RUNTIME)
2629 class InstanceSerializationCluster : public SerializationCluster { 2620 class InstanceSerializationCluster : public SerializationCluster {
2630 public: 2621 public:
2631 explicit InstanceSerializationCluster(intptr_t cid) : cid_(cid) { 2622 explicit InstanceSerializationCluster(intptr_t cid) : cid_(cid) {
2632 RawClass* cls = Isolate::Current()->class_table()->At(cid); 2623 RawClass* cls = Isolate::Current()->class_table()->At(cid);
2633 next_field_offset_in_words_ = cls->ptr()->next_field_offset_in_words_; 2624 next_field_offset_in_words_ = cls->ptr()->next_field_offset_in_words_;
2634 instance_size_in_words_ = cls->ptr()->instance_size_in_words_; 2625 instance_size_in_words_ = cls->ptr()->instance_size_in_words_;
2635 ASSERT(next_field_offset_in_words_ > 0); 2626 ASSERT(next_field_offset_in_words_ > 0);
2636 ASSERT(instance_size_in_words_ > 0); 2627 ASSERT(instance_size_in_words_ > 0);
2637 } 2628 }
2638 virtual ~InstanceSerializationCluster() { } 2629 virtual ~InstanceSerializationCluster() {}
2639 2630
2640 void Trace(Serializer* s, RawObject* object) { 2631 void Trace(Serializer* s, RawObject* object) {
2641 RawInstance* instance = Instance::RawCast(object); 2632 RawInstance* instance = Instance::RawCast(object);
2642 objects_.Add(instance); 2633 objects_.Add(instance);
2643 2634
2644 intptr_t next_field_offset = next_field_offset_in_words_ << kWordSizeLog2; 2635 intptr_t next_field_offset = next_field_offset_in_words_ << kWordSizeLog2;
2645 intptr_t offset = Instance::NextFieldOffset(); 2636 intptr_t offset = Instance::NextFieldOffset();
2646 while (offset < next_field_offset) { 2637 while (offset < next_field_offset) {
2647 RawObject* raw_obj = *reinterpret_cast<RawObject**>( 2638 RawObject* raw_obj = *reinterpret_cast<RawObject**>(
2648 reinterpret_cast<uword>(instance->ptr()) + offset); 2639 reinterpret_cast<uword>(instance->ptr()) + offset);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2685 const intptr_t cid_; 2676 const intptr_t cid_;
2686 intptr_t next_field_offset_in_words_; 2677 intptr_t next_field_offset_in_words_;
2687 intptr_t instance_size_in_words_; 2678 intptr_t instance_size_in_words_;
2688 GrowableArray<RawInstance*> objects_; 2679 GrowableArray<RawInstance*> objects_;
2689 }; 2680 };
2690 #endif // !DART_PRECOMPILED_RUNTIME 2681 #endif // !DART_PRECOMPILED_RUNTIME
2691 2682
2692 2683
2693 class InstanceDeserializationCluster : public DeserializationCluster { 2684 class InstanceDeserializationCluster : public DeserializationCluster {
2694 public: 2685 public:
2695 explicit InstanceDeserializationCluster(intptr_t cid) : cid_(cid) { } 2686 explicit InstanceDeserializationCluster(intptr_t cid) : cid_(cid) {}
2696 virtual ~InstanceDeserializationCluster() { } 2687 virtual ~InstanceDeserializationCluster() {}
2697 2688
2698 void ReadAlloc(Deserializer* d) { 2689 void ReadAlloc(Deserializer* d) {
2699 start_index_ = d->next_index(); 2690 start_index_ = d->next_index();
2700 PageSpace* old_space = d->heap()->old_space(); 2691 PageSpace* old_space = d->heap()->old_space();
2701 intptr_t count = d->Read<int32_t>(); 2692 intptr_t count = d->Read<int32_t>();
2702 next_field_offset_in_words_ = d->Read<int32_t>(); 2693 next_field_offset_in_words_ = d->Read<int32_t>();
2703 instance_size_in_words_ = d->Read<int32_t>(); 2694 instance_size_in_words_ = d->Read<int32_t>();
2704 intptr_t instance_size = 2695 intptr_t instance_size =
2705 Object::RoundedAllocationSize(instance_size_in_words_ * kWordSize); 2696 Object::RoundedAllocationSize(instance_size_in_words_ * kWordSize);
2706 for (intptr_t i = 0; i < count; i++) { 2697 for (intptr_t i = 0; i < count; i++) {
2707 d->AssignRef(AllocateUninitialized(old_space, instance_size)); 2698 d->AssignRef(AllocateUninitialized(old_space, instance_size));
2708 } 2699 }
2709 stop_index_ = d->next_index(); 2700 stop_index_ = d->next_index();
2710 } 2701 }
2711 2702
2712 void ReadFill(Deserializer* d) { 2703 void ReadFill(Deserializer* d) {
2713 intptr_t next_field_offset = next_field_offset_in_words_ << kWordSizeLog2; 2704 intptr_t next_field_offset = next_field_offset_in_words_ << kWordSizeLog2;
2714 intptr_t instance_size = 2705 intptr_t instance_size =
2715 Object::RoundedAllocationSize(instance_size_in_words_ * kWordSize); 2706 Object::RoundedAllocationSize(instance_size_in_words_ * kWordSize);
2716 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 2707 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2717 2708
2718 for (intptr_t id = start_index_; id < stop_index_; id++) { 2709 for (intptr_t id = start_index_; id < stop_index_; id++) {
2719 RawInstance* instance = reinterpret_cast<RawInstance*>(d->Ref(id)); 2710 RawInstance* instance = reinterpret_cast<RawInstance*>(d->Ref(id));
2720 bool is_canonical = d->Read<bool>(); 2711 bool is_canonical = d->Read<bool>();
2721 Deserializer::InitializeHeader(instance, cid_, 2712 Deserializer::InitializeHeader(instance, cid_, instance_size,
2722 instance_size,
2723 is_vm_object, is_canonical); 2713 is_vm_object, is_canonical);
2724 intptr_t offset = Instance::NextFieldOffset(); 2714 intptr_t offset = Instance::NextFieldOffset();
2725 while (offset < next_field_offset) { 2715 while (offset < next_field_offset) {
2726 RawObject** p = reinterpret_cast<RawObject**>( 2716 RawObject** p = reinterpret_cast<RawObject**>(
2727 reinterpret_cast<uword>(instance->ptr()) + offset); 2717 reinterpret_cast<uword>(instance->ptr()) + offset);
2728 *p = d->ReadRef(); 2718 *p = d->ReadRef();
2729 offset += kWordSize; 2719 offset += kWordSize;
2730 } 2720 }
2731 if (offset < instance_size) { 2721 if (offset < instance_size) {
2732 RawObject** p = reinterpret_cast<RawObject**>( 2722 RawObject** p = reinterpret_cast<RawObject**>(
2733 reinterpret_cast<uword>(instance->ptr()) + offset); 2723 reinterpret_cast<uword>(instance->ptr()) + offset);
2734 *p = Object::null(); 2724 *p = Object::null();
2735 offset += kWordSize; 2725 offset += kWordSize;
2736 } 2726 }
2737 ASSERT(offset == instance_size); 2727 ASSERT(offset == instance_size);
2738 } 2728 }
2739 } 2729 }
2740 2730
2741 private: 2731 private:
2742 const intptr_t cid_; 2732 const intptr_t cid_;
2743 intptr_t next_field_offset_in_words_; 2733 intptr_t next_field_offset_in_words_;
2744 intptr_t instance_size_in_words_; 2734 intptr_t instance_size_in_words_;
2745 }; 2735 };
2746 2736
2747 2737
2748 #if !defined(DART_PRECOMPILED_RUNTIME) 2738 #if !defined(DART_PRECOMPILED_RUNTIME)
2749 class LibraryPrefixSerializationCluster : public SerializationCluster { 2739 class LibraryPrefixSerializationCluster : public SerializationCluster {
2750 public: 2740 public:
2751 LibraryPrefixSerializationCluster() { } 2741 LibraryPrefixSerializationCluster() {}
2752 virtual ~LibraryPrefixSerializationCluster() { } 2742 virtual ~LibraryPrefixSerializationCluster() {}
2753 2743
2754 void Trace(Serializer* s, RawObject* object) { 2744 void Trace(Serializer* s, RawObject* object) {
2755 RawLibraryPrefix* prefix = LibraryPrefix::RawCast(object); 2745 RawLibraryPrefix* prefix = LibraryPrefix::RawCast(object);
2756 objects_.Add(prefix); 2746 objects_.Add(prefix);
2757 2747
2758 RawObject** from = prefix->from(); 2748 RawObject** from = prefix->from();
2759 RawObject** to = prefix->to(); 2749 RawObject** to = prefix->to();
2760 for (RawObject** p = from; p <= to; p++) { 2750 for (RawObject** p = from; p <= to; p++) {
2761 s->Push(*p); 2751 s->Push(*p);
2762 } 2752 }
(...skipping 24 matching lines...) Expand all
2787 } 2777 }
2788 2778
2789 private: 2779 private:
2790 GrowableArray<RawLibraryPrefix*> objects_; 2780 GrowableArray<RawLibraryPrefix*> objects_;
2791 }; 2781 };
2792 #endif // !DART_PRECOMPILED_RUNTIME 2782 #endif // !DART_PRECOMPILED_RUNTIME
2793 2783
2794 2784
2795 class LibraryPrefixDeserializationCluster : public DeserializationCluster { 2785 class LibraryPrefixDeserializationCluster : public DeserializationCluster {
2796 public: 2786 public:
2797 LibraryPrefixDeserializationCluster() { } 2787 LibraryPrefixDeserializationCluster() {}
2798 virtual ~LibraryPrefixDeserializationCluster() { } 2788 virtual ~LibraryPrefixDeserializationCluster() {}
2799 2789
2800 void ReadAlloc(Deserializer* d) { 2790 void ReadAlloc(Deserializer* d) {
2801 start_index_ = d->next_index(); 2791 start_index_ = d->next_index();
2802 PageSpace* old_space = d->heap()->old_space(); 2792 PageSpace* old_space = d->heap()->old_space();
2803 intptr_t count = d->Read<int32_t>(); 2793 intptr_t count = d->Read<int32_t>();
2804 for (intptr_t i = 0; i < count; i++) { 2794 for (intptr_t i = 0; i < count; i++) {
2805 d->AssignRef(AllocateUninitialized(old_space, 2795 d->AssignRef(
2806 LibraryPrefix::InstanceSize())); 2796 AllocateUninitialized(old_space, LibraryPrefix::InstanceSize()));
2807 } 2797 }
2808 stop_index_ = d->next_index(); 2798 stop_index_ = d->next_index();
2809 } 2799 }
2810 2800
2811 void ReadFill(Deserializer* d) { 2801 void ReadFill(Deserializer* d) {
2812 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 2802 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2813 2803
2814 for (intptr_t id = start_index_; id < stop_index_; id++) { 2804 for (intptr_t id = start_index_; id < stop_index_; id++) {
2815 RawLibraryPrefix* prefix = 2805 RawLibraryPrefix* prefix =
2816 reinterpret_cast<RawLibraryPrefix*>(d->Ref(id)); 2806 reinterpret_cast<RawLibraryPrefix*>(d->Ref(id));
2817 Deserializer::InitializeHeader(prefix, kLibraryPrefixCid, 2807 Deserializer::InitializeHeader(prefix, kLibraryPrefixCid,
2818 LibraryPrefix::InstanceSize(), 2808 LibraryPrefix::InstanceSize(),
2819 is_vm_object); 2809 is_vm_object);
2820 RawObject** from = prefix->from(); 2810 RawObject** from = prefix->from();
2821 RawObject** to = prefix->to(); 2811 RawObject** to = prefix->to();
2822 for (RawObject** p = from; p <= to; p++) { 2812 for (RawObject** p = from; p <= to; p++) {
2823 *p = d->ReadRef(); 2813 *p = d->ReadRef();
2824 } 2814 }
2825 prefix->ptr()->num_imports_ = d->Read<uint16_t>(); 2815 prefix->ptr()->num_imports_ = d->Read<uint16_t>();
2826 prefix->ptr()->is_deferred_load_ = d->Read<bool>(); 2816 prefix->ptr()->is_deferred_load_ = d->Read<bool>();
2827 prefix->ptr()->is_loaded_ = !prefix->ptr()->is_deferred_load_; 2817 prefix->ptr()->is_loaded_ = !prefix->ptr()->is_deferred_load_;
2828 } 2818 }
2829 } 2819 }
2830 }; 2820 };
2831 2821
2832 2822
2833 #if !defined(DART_PRECOMPILED_RUNTIME) 2823 #if !defined(DART_PRECOMPILED_RUNTIME)
2834 class TypeSerializationCluster : public SerializationCluster { 2824 class TypeSerializationCluster : public SerializationCluster {
2835 public: 2825 public:
2836 TypeSerializationCluster() { } 2826 TypeSerializationCluster() {}
2837 virtual ~TypeSerializationCluster() { } 2827 virtual ~TypeSerializationCluster() {}
2838 2828
2839 void Trace(Serializer* s, RawObject* object) { 2829 void Trace(Serializer* s, RawObject* object) {
2840 RawType* type = Type::RawCast(object); 2830 RawType* type = Type::RawCast(object);
2841 if (type->IsCanonical()) { 2831 if (type->IsCanonical()) {
2842 canonical_objects_.Add(type); 2832 canonical_objects_.Add(type);
2843 } else { 2833 } else {
2844 objects_.Add(type); 2834 objects_.Add(type);
2845 } 2835 }
2846 2836
2847 RawObject** from = type->from(); 2837 RawObject** from = type->from();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
2904 2894
2905 private: 2895 private:
2906 GrowableArray<RawType*> canonical_objects_; 2896 GrowableArray<RawType*> canonical_objects_;
2907 GrowableArray<RawType*> objects_; 2897 GrowableArray<RawType*> objects_;
2908 }; 2898 };
2909 #endif // !DART_PRECOMPILED_RUNTIME 2899 #endif // !DART_PRECOMPILED_RUNTIME
2910 2900
2911 2901
2912 class TypeDeserializationCluster : public DeserializationCluster { 2902 class TypeDeserializationCluster : public DeserializationCluster {
2913 public: 2903 public:
2914 TypeDeserializationCluster() { } 2904 TypeDeserializationCluster() {}
2915 virtual ~TypeDeserializationCluster() { } 2905 virtual ~TypeDeserializationCluster() {}
2916 2906
2917 void ReadAlloc(Deserializer* d) { 2907 void ReadAlloc(Deserializer* d) {
2918 canonical_start_index_ = d->next_index(); 2908 canonical_start_index_ = d->next_index();
2919 PageSpace* old_space = d->heap()->old_space(); 2909 PageSpace* old_space = d->heap()->old_space();
2920 intptr_t count = d->Read<int32_t>(); 2910 intptr_t count = d->Read<int32_t>();
2921 for (intptr_t i = 0; i < count; i++) { 2911 for (intptr_t i = 0; i < count; i++) {
2922 d->AssignRef(AllocateUninitialized(old_space, Type::InstanceSize())); 2912 d->AssignRef(AllocateUninitialized(old_space, Type::InstanceSize()));
2923 } 2913 }
2924 canonical_stop_index_ = d->next_index(); 2914 canonical_stop_index_ = d->next_index();
2925 2915
2926 start_index_ = d->next_index(); 2916 start_index_ = d->next_index();
2927 count = d->Read<int32_t>(); 2917 count = d->Read<int32_t>();
2928 for (intptr_t i = 0; i < count; i++) { 2918 for (intptr_t i = 0; i < count; i++) {
2929 d->AssignRef(AllocateUninitialized(old_space, Type::InstanceSize())); 2919 d->AssignRef(AllocateUninitialized(old_space, Type::InstanceSize()));
2930 } 2920 }
2931 stop_index_ = d->next_index(); 2921 stop_index_ = d->next_index();
2932 } 2922 }
2933 2923
2934 void ReadFill(Deserializer* d) { 2924 void ReadFill(Deserializer* d) {
2935 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 2925 bool is_vm_object = d->isolate() == Dart::vm_isolate();
2936 2926
2937 for (intptr_t id = canonical_start_index_; 2927 for (intptr_t id = canonical_start_index_; id < canonical_stop_index_;
2938 id < canonical_stop_index_;
2939 id++) { 2928 id++) {
2940 RawType* type = reinterpret_cast<RawType*>(d->Ref(id)); 2929 RawType* type = reinterpret_cast<RawType*>(d->Ref(id));
2941 Deserializer::InitializeHeader(type, kTypeCid, 2930 Deserializer::InitializeHeader(type, kTypeCid, Type::InstanceSize(),
2942 Type::InstanceSize(), is_vm_object, true); 2931 is_vm_object, true);
2943 RawObject** from = type->from(); 2932 RawObject** from = type->from();
2944 RawObject** to = type->to(); 2933 RawObject** to = type->to();
2945 for (RawObject** p = from; p <= to; p++) { 2934 for (RawObject** p = from; p <= to; p++) {
2946 *p = d->ReadRef(); 2935 *p = d->ReadRef();
2947 } 2936 }
2948 type->ptr()->token_pos_ = d->ReadTokenPosition(); 2937 type->ptr()->token_pos_ = d->ReadTokenPosition();
2949 type->ptr()->type_state_ = d->Read<int8_t>(); 2938 type->ptr()->type_state_ = d->Read<int8_t>();
2950 } 2939 }
2951 2940
2952 for (intptr_t id = start_index_; id < stop_index_; id++) { 2941 for (intptr_t id = start_index_; id < stop_index_; id++) {
2953 RawType* type = reinterpret_cast<RawType*>(d->Ref(id)); 2942 RawType* type = reinterpret_cast<RawType*>(d->Ref(id));
2954 Deserializer::InitializeHeader(type, kTypeCid, 2943 Deserializer::InitializeHeader(type, kTypeCid, Type::InstanceSize(),
2955 Type::InstanceSize(), is_vm_object); 2944 is_vm_object);
2956 RawObject** from = type->from(); 2945 RawObject** from = type->from();
2957 RawObject** to = type->to(); 2946 RawObject** to = type->to();
2958 for (RawObject** p = from; p <= to; p++) { 2947 for (RawObject** p = from; p <= to; p++) {
2959 *p = d->ReadRef(); 2948 *p = d->ReadRef();
2960 } 2949 }
2961 type->ptr()->token_pos_ = d->ReadTokenPosition(); 2950 type->ptr()->token_pos_ = d->ReadTokenPosition();
2962 type->ptr()->type_state_ = d->Read<int8_t>(); 2951 type->ptr()->type_state_ = d->Read<int8_t>();
2963 } 2952 }
2964 } 2953 }
2965 2954
2966 private: 2955 private:
2967 intptr_t canonical_start_index_; 2956 intptr_t canonical_start_index_;
2968 intptr_t canonical_stop_index_; 2957 intptr_t canonical_stop_index_;
2969 }; 2958 };
2970 2959
2971 2960
2972 #if !defined(DART_PRECOMPILED_RUNTIME) 2961 #if !defined(DART_PRECOMPILED_RUNTIME)
2973 class TypeRefSerializationCluster : public SerializationCluster { 2962 class TypeRefSerializationCluster : public SerializationCluster {
2974 public: 2963 public:
2975 TypeRefSerializationCluster() { } 2964 TypeRefSerializationCluster() {}
2976 virtual ~TypeRefSerializationCluster() { } 2965 virtual ~TypeRefSerializationCluster() {}
2977 2966
2978 void Trace(Serializer* s, RawObject* object) { 2967 void Trace(Serializer* s, RawObject* object) {
2979 RawTypeRef* type = TypeRef::RawCast(object); 2968 RawTypeRef* type = TypeRef::RawCast(object);
2980 objects_.Add(type); 2969 objects_.Add(type);
2981 2970
2982 RawObject** from = type->from(); 2971 RawObject** from = type->from();
2983 RawObject** to = type->to(); 2972 RawObject** to = type->to();
2984 for (RawObject** p = from; p <= to; p++) { 2973 for (RawObject** p = from; p <= to; p++) {
2985 s->Push(*p); 2974 s->Push(*p);
2986 } 2975 }
(...skipping 22 matching lines...) Expand all
3009 } 2998 }
3010 2999
3011 private: 3000 private:
3012 GrowableArray<RawTypeRef*> objects_; 3001 GrowableArray<RawTypeRef*> objects_;
3013 }; 3002 };
3014 #endif // !DART_PRECOMPILED_RUNTIME 3003 #endif // !DART_PRECOMPILED_RUNTIME
3015 3004
3016 3005
3017 class TypeRefDeserializationCluster : public DeserializationCluster { 3006 class TypeRefDeserializationCluster : public DeserializationCluster {
3018 public: 3007 public:
3019 TypeRefDeserializationCluster() { } 3008 TypeRefDeserializationCluster() {}
3020 virtual ~TypeRefDeserializationCluster() { } 3009 virtual ~TypeRefDeserializationCluster() {}
3021 3010
3022 void ReadAlloc(Deserializer* d) { 3011 void ReadAlloc(Deserializer* d) {
3023 start_index_ = d->next_index(); 3012 start_index_ = d->next_index();
3024 PageSpace* old_space = d->heap()->old_space(); 3013 PageSpace* old_space = d->heap()->old_space();
3025 intptr_t count = d->Read<int32_t>(); 3014 intptr_t count = d->Read<int32_t>();
3026 for (intptr_t i = 0; i < count; i++) { 3015 for (intptr_t i = 0; i < count; i++) {
3027 d->AssignRef(AllocateUninitialized(old_space, TypeRef::InstanceSize())); 3016 d->AssignRef(AllocateUninitialized(old_space, TypeRef::InstanceSize()));
3028 } 3017 }
3029 stop_index_ = d->next_index(); 3018 stop_index_ = d->next_index();
3030 } 3019 }
3031 3020
3032 void ReadFill(Deserializer* d) { 3021 void ReadFill(Deserializer* d) {
3033 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3022 bool is_vm_object = d->isolate() == Dart::vm_isolate();
3034 3023
3035 for (intptr_t id = start_index_; id < stop_index_; id++) { 3024 for (intptr_t id = start_index_; id < stop_index_; id++) {
3036 RawTypeRef* type = reinterpret_cast<RawTypeRef*>(d->Ref(id)); 3025 RawTypeRef* type = reinterpret_cast<RawTypeRef*>(d->Ref(id));
3037 Deserializer::InitializeHeader(type, kTypeRefCid, 3026 Deserializer::InitializeHeader(type, kTypeRefCid, TypeRef::InstanceSize(),
3038 TypeRef::InstanceSize(), is_vm_object); 3027 is_vm_object);
3039 RawObject** from = type->from(); 3028 RawObject** from = type->from();
3040 RawObject** to = type->to(); 3029 RawObject** to = type->to();
3041 for (RawObject** p = from; p <= to; p++) { 3030 for (RawObject** p = from; p <= to; p++) {
3042 *p = d->ReadRef(); 3031 *p = d->ReadRef();
3043 } 3032 }
3044 } 3033 }
3045 } 3034 }
3046 }; 3035 };
3047 3036
3048 3037
3049 #if !defined(DART_PRECOMPILED_RUNTIME) 3038 #if !defined(DART_PRECOMPILED_RUNTIME)
3050 class TypeParameterSerializationCluster : public SerializationCluster { 3039 class TypeParameterSerializationCluster : public SerializationCluster {
3051 public: 3040 public:
3052 TypeParameterSerializationCluster() { } 3041 TypeParameterSerializationCluster() {}
3053 virtual ~TypeParameterSerializationCluster() { } 3042 virtual ~TypeParameterSerializationCluster() {}
3054 3043
3055 void Trace(Serializer* s, RawObject* object) { 3044 void Trace(Serializer* s, RawObject* object) {
3056 RawTypeParameter* type = TypeParameter::RawCast(object); 3045 RawTypeParameter* type = TypeParameter::RawCast(object);
3057 objects_.Add(type); 3046 objects_.Add(type);
3058 ASSERT(!type->IsCanonical()); 3047 ASSERT(!type->IsCanonical());
3059 3048
3060 RawObject** from = type->from(); 3049 RawObject** from = type->from();
3061 RawObject** to = type->to(); 3050 RawObject** to = type->to();
3062 for (RawObject** p = from; p <= to; p++) { 3051 for (RawObject** p = from; p <= to; p++) {
3063 s->Push(*p); 3052 s->Push(*p);
(...skipping 28 matching lines...) Expand all
3092 } 3081 }
3093 3082
3094 private: 3083 private:
3095 GrowableArray<RawTypeParameter*> objects_; 3084 GrowableArray<RawTypeParameter*> objects_;
3096 }; 3085 };
3097 #endif // !DART_PRECOMPILED_RUNTIME 3086 #endif // !DART_PRECOMPILED_RUNTIME
3098 3087
3099 3088
3100 class TypeParameterDeserializationCluster : public DeserializationCluster { 3089 class TypeParameterDeserializationCluster : public DeserializationCluster {
3101 public: 3090 public:
3102 TypeParameterDeserializationCluster() { } 3091 TypeParameterDeserializationCluster() {}
3103 virtual ~TypeParameterDeserializationCluster() { } 3092 virtual ~TypeParameterDeserializationCluster() {}
3104 3093
3105 void ReadAlloc(Deserializer* d) { 3094 void ReadAlloc(Deserializer* d) {
3106 start_index_ = d->next_index(); 3095 start_index_ = d->next_index();
3107 PageSpace* old_space = d->heap()->old_space(); 3096 PageSpace* old_space = d->heap()->old_space();
3108 intptr_t count = d->Read<int32_t>(); 3097 intptr_t count = d->Read<int32_t>();
3109 for (intptr_t i = 0; i < count; i++) { 3098 for (intptr_t i = 0; i < count; i++) {
3110 d->AssignRef(AllocateUninitialized(old_space, 3099 d->AssignRef(
3111 TypeParameter::InstanceSize())); 3100 AllocateUninitialized(old_space, TypeParameter::InstanceSize()));
3112 } 3101 }
3113 stop_index_ = d->next_index(); 3102 stop_index_ = d->next_index();
3114 } 3103 }
3115 3104
3116 void ReadFill(Deserializer* d) { 3105 void ReadFill(Deserializer* d) {
3117 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3106 bool is_vm_object = d->isolate() == Dart::vm_isolate();
3118 3107
3119 for (intptr_t id = start_index_; id < stop_index_; id++) { 3108 for (intptr_t id = start_index_; id < stop_index_; id++) {
3120 RawTypeParameter* type = reinterpret_cast<RawTypeParameter*>(d->Ref(id)); 3109 RawTypeParameter* type = reinterpret_cast<RawTypeParameter*>(d->Ref(id));
3121 Deserializer::InitializeHeader(type, kTypeParameterCid, 3110 Deserializer::InitializeHeader(
3122 TypeParameter::InstanceSize(), 3111 type, kTypeParameterCid, TypeParameter::InstanceSize(), is_vm_object);
3123 is_vm_object);
3124 RawObject** from = type->from(); 3112 RawObject** from = type->from();
3125 RawObject** to = type->to(); 3113 RawObject** to = type->to();
3126 for (RawObject** p = from; p <= to; p++) { 3114 for (RawObject** p = from; p <= to; p++) {
3127 *p = d->ReadRef(); 3115 *p = d->ReadRef();
3128 } 3116 }
3129 type->ptr()->parameterized_class_id_ = d->Read<int32_t>(); 3117 type->ptr()->parameterized_class_id_ = d->Read<int32_t>();
3130 type->ptr()->token_pos_ = d->ReadTokenPosition(); 3118 type->ptr()->token_pos_ = d->ReadTokenPosition();
3131 type->ptr()->index_ = d->Read<int16_t>(); 3119 type->ptr()->index_ = d->Read<int16_t>();
3132 type->ptr()->parent_level_ = d->Read<uint8_t>(); 3120 type->ptr()->parent_level_ = d->Read<uint8_t>();
3133 type->ptr()->type_state_ = d->Read<int8_t>(); 3121 type->ptr()->type_state_ = d->Read<int8_t>();
3134 } 3122 }
3135 } 3123 }
3136 }; 3124 };
3137 3125
3138 3126
3139 #if !defined(DART_PRECOMPILED_RUNTIME) 3127 #if !defined(DART_PRECOMPILED_RUNTIME)
3140 class BoundedTypeSerializationCluster : public SerializationCluster { 3128 class BoundedTypeSerializationCluster : public SerializationCluster {
3141 public: 3129 public:
3142 BoundedTypeSerializationCluster() { } 3130 BoundedTypeSerializationCluster() {}
3143 virtual ~BoundedTypeSerializationCluster() { } 3131 virtual ~BoundedTypeSerializationCluster() {}
3144 3132
3145 void Trace(Serializer* s, RawObject* object) { 3133 void Trace(Serializer* s, RawObject* object) {
3146 RawBoundedType* type = BoundedType::RawCast(object); 3134 RawBoundedType* type = BoundedType::RawCast(object);
3147 objects_.Add(type); 3135 objects_.Add(type);
3148 3136
3149 RawObject** from = type->from(); 3137 RawObject** from = type->from();
3150 RawObject** to = type->to(); 3138 RawObject** to = type->to();
3151 for (RawObject** p = from; p <= to; p++) { 3139 for (RawObject** p = from; p <= to; p++) {
3152 s->Push(*p); 3140 s->Push(*p);
3153 } 3141 }
(...skipping 22 matching lines...) Expand all
3176 } 3164 }
3177 3165
3178 private: 3166 private:
3179 GrowableArray<RawBoundedType*> objects_; 3167 GrowableArray<RawBoundedType*> objects_;
3180 }; 3168 };
3181 #endif // !DART_PRECOMPILED_RUNTIME 3169 #endif // !DART_PRECOMPILED_RUNTIME
3182 3170
3183 3171
3184 class BoundedTypeDeserializationCluster : public DeserializationCluster { 3172 class BoundedTypeDeserializationCluster : public DeserializationCluster {
3185 public: 3173 public:
3186 BoundedTypeDeserializationCluster() { } 3174 BoundedTypeDeserializationCluster() {}
3187 virtual ~BoundedTypeDeserializationCluster() { } 3175 virtual ~BoundedTypeDeserializationCluster() {}
3188 3176
3189 void ReadAlloc(Deserializer* d) { 3177 void ReadAlloc(Deserializer* d) {
3190 start_index_ = d->next_index(); 3178 start_index_ = d->next_index();
3191 PageSpace* old_space = d->heap()->old_space(); 3179 PageSpace* old_space = d->heap()->old_space();
3192 intptr_t count = d->Read<int32_t>(); 3180 intptr_t count = d->Read<int32_t>();
3193 for (intptr_t i = 0; i < count; i++) { 3181 for (intptr_t i = 0; i < count; i++) {
3194 d->AssignRef(AllocateUninitialized(old_space, 3182 d->AssignRef(
3195 BoundedType::InstanceSize())); 3183 AllocateUninitialized(old_space, BoundedType::InstanceSize()));
3196 } 3184 }
3197 stop_index_ = d->next_index(); 3185 stop_index_ = d->next_index();
3198 } 3186 }
3199 3187
3200 void ReadFill(Deserializer* d) { 3188 void ReadFill(Deserializer* d) {
3201 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3189 bool is_vm_object = d->isolate() == Dart::vm_isolate();
3202 3190
3203 for (intptr_t id = start_index_; id < stop_index_; id++) { 3191 for (intptr_t id = start_index_; id < stop_index_; id++) {
3204 RawBoundedType* type = reinterpret_cast<RawBoundedType*>(d->Ref(id)); 3192 RawBoundedType* type = reinterpret_cast<RawBoundedType*>(d->Ref(id));
3205 Deserializer::InitializeHeader(type, kBoundedTypeCid, 3193 Deserializer::InitializeHeader(type, kBoundedTypeCid,
3206 BoundedType::InstanceSize(), is_vm_object); 3194 BoundedType::InstanceSize(), is_vm_object);
3207 RawObject** from = type->from(); 3195 RawObject** from = type->from();
3208 RawObject** to = type->to(); 3196 RawObject** to = type->to();
3209 for (RawObject** p = from; p <= to; p++) { 3197 for (RawObject** p = from; p <= to; p++) {
3210 *p = d->ReadRef(); 3198 *p = d->ReadRef();
3211 } 3199 }
3212 } 3200 }
3213 } 3201 }
3214 }; 3202 };
3215 3203
3216 3204
3217 #if !defined(DART_PRECOMPILED_RUNTIME) 3205 #if !defined(DART_PRECOMPILED_RUNTIME)
3218 class ClosureSerializationCluster : public SerializationCluster { 3206 class ClosureSerializationCluster : public SerializationCluster {
3219 public: 3207 public:
3220 ClosureSerializationCluster() { } 3208 ClosureSerializationCluster() {}
3221 virtual ~ClosureSerializationCluster() { } 3209 virtual ~ClosureSerializationCluster() {}
3222 3210
3223 void Trace(Serializer* s, RawObject* object) { 3211 void Trace(Serializer* s, RawObject* object) {
3224 RawClosure* closure = Closure::RawCast(object); 3212 RawClosure* closure = Closure::RawCast(object);
3225 objects_.Add(closure); 3213 objects_.Add(closure);
3226 3214
3227 RawObject** from = closure->from(); 3215 RawObject** from = closure->from();
3228 RawObject** to = closure->to(); 3216 RawObject** to = closure->to();
3229 for (RawObject** p = from; p <= to; p++) { 3217 for (RawObject** p = from; p <= to; p++) {
3230 s->Push(*p); 3218 s->Push(*p);
3231 } 3219 }
(...skipping 23 matching lines...) Expand all
3255 } 3243 }
3256 3244
3257 private: 3245 private:
3258 GrowableArray<RawClosure*> objects_; 3246 GrowableArray<RawClosure*> objects_;
3259 }; 3247 };
3260 #endif // !DART_PRECOMPILED_RUNTIME 3248 #endif // !DART_PRECOMPILED_RUNTIME
3261 3249
3262 3250
3263 class ClosureDeserializationCluster : public DeserializationCluster { 3251 class ClosureDeserializationCluster : public DeserializationCluster {
3264 public: 3252 public:
3265 ClosureDeserializationCluster() { } 3253 ClosureDeserializationCluster() {}
3266 virtual ~ClosureDeserializationCluster() { } 3254 virtual ~ClosureDeserializationCluster() {}
3267 3255
3268 void ReadAlloc(Deserializer* d) { 3256 void ReadAlloc(Deserializer* d) {
3269 start_index_ = d->next_index(); 3257 start_index_ = d->next_index();
3270 PageSpace* old_space = d->heap()->old_space(); 3258 PageSpace* old_space = d->heap()->old_space();
3271 intptr_t count = d->Read<int32_t>(); 3259 intptr_t count = d->Read<int32_t>();
3272 for (intptr_t i = 0; i < count; i++) { 3260 for (intptr_t i = 0; i < count; i++) {
3273 d->AssignRef(AllocateUninitialized(old_space, Closure::InstanceSize())); 3261 d->AssignRef(AllocateUninitialized(old_space, Closure::InstanceSize()));
3274 } 3262 }
3275 stop_index_ = d->next_index(); 3263 stop_index_ = d->next_index();
3276 } 3264 }
3277 3265
3278 void ReadFill(Deserializer* d) { 3266 void ReadFill(Deserializer* d) {
3279 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3267 bool is_vm_object = d->isolate() == Dart::vm_isolate();
3280 3268
3281 for (intptr_t id = start_index_; id < stop_index_; id++) { 3269 for (intptr_t id = start_index_; id < stop_index_; id++) {
3282 RawClosure* closure = reinterpret_cast<RawClosure*>(d->Ref(id)); 3270 RawClosure* closure = reinterpret_cast<RawClosure*>(d->Ref(id));
3283 bool is_canonical = d->Read<bool>(); 3271 bool is_canonical = d->Read<bool>();
3284 Deserializer::InitializeHeader(closure, kClosureCid, 3272 Deserializer::InitializeHeader(closure, kClosureCid,
3285 Closure::InstanceSize(), 3273 Closure::InstanceSize(), is_vm_object,
3286 is_vm_object, is_canonical); 3274 is_canonical);
3287 RawObject** from = closure->from(); 3275 RawObject** from = closure->from();
3288 RawObject** to = closure->to(); 3276 RawObject** to = closure->to();
3289 for (RawObject** p = from; p <= to; p++) { 3277 for (RawObject** p = from; p <= to; p++) {
3290 *p = d->ReadRef(); 3278 *p = d->ReadRef();
3291 } 3279 }
3292 } 3280 }
3293 } 3281 }
3294 }; 3282 };
3295 3283
3296 3284
3297 #if !defined(DART_PRECOMPILED_RUNTIME) 3285 #if !defined(DART_PRECOMPILED_RUNTIME)
3298 class MintSerializationCluster : public SerializationCluster { 3286 class MintSerializationCluster : public SerializationCluster {
3299 public: 3287 public:
3300 MintSerializationCluster() { } 3288 MintSerializationCluster() {}
3301 virtual ~MintSerializationCluster() { } 3289 virtual ~MintSerializationCluster() {}
3302 3290
3303 void Trace(Serializer* s, RawObject* object) { 3291 void Trace(Serializer* s, RawObject* object) {
3304 if (!object->IsHeapObject()) { 3292 if (!object->IsHeapObject()) {
3305 RawSmi* smi = Smi::RawCast(object); 3293 RawSmi* smi = Smi::RawCast(object);
3306 smis_.Add(smi); 3294 smis_.Add(smi);
3307 } else { 3295 } else {
3308 RawMint* mint = Mint::RawCast(object); 3296 RawMint* mint = Mint::RawCast(object);
3309 mints_.Add(mint); 3297 mints_.Add(mint);
3310 } 3298 }
3311 } 3299 }
3312 3300
3313 void WriteAlloc(Serializer* s) { 3301 void WriteAlloc(Serializer* s) {
3314 s->WriteCid(kMintCid); 3302 s->WriteCid(kMintCid);
3315 3303
3316 s->Write<int32_t>(smis_.length() + mints_.length()); 3304 s->Write<int32_t>(smis_.length() + mints_.length());
3317 for (intptr_t i = 0; i < smis_.length(); i++) { 3305 for (intptr_t i = 0; i < smis_.length(); i++) {
3318 RawSmi* smi = smis_[i]; 3306 RawSmi* smi = smis_[i];
3319 s->Write<bool>(true); 3307 s->Write<bool>(true);
3320 s->Write<int64_t>(Smi::Value(smi)); 3308 s->Write<int64_t>(Smi::Value(smi));
3321 s->AssignRef(smi); 3309 s->AssignRef(smi);
3322 } 3310 }
3323 for (intptr_t i = 0; i < mints_.length(); i++) { 3311 for (intptr_t i = 0; i < mints_.length(); i++) {
3324 RawMint* mint = mints_[i]; 3312 RawMint* mint = mints_[i];
3325 s->Write<bool>(mint->IsCanonical()); 3313 s->Write<bool>(mint->IsCanonical());
3326 s->Write<int64_t>(mint->ptr()->value_); 3314 s->Write<int64_t>(mint->ptr()->value_);
3327 s->AssignRef(mint); 3315 s->AssignRef(mint);
3328 } 3316 }
3329 } 3317 }
3330 3318
3331 void WriteFill(Serializer* s) { } 3319 void WriteFill(Serializer* s) {}
3332 3320
3333 private: 3321 private:
3334 GrowableArray<RawSmi*> smis_; 3322 GrowableArray<RawSmi*> smis_;
3335 GrowableArray<RawMint*> mints_; 3323 GrowableArray<RawMint*> mints_;
3336 }; 3324 };
3337 #endif // !DART_PRECOMPILED_RUNTIME 3325 #endif // !DART_PRECOMPILED_RUNTIME
3338 3326
3339 3327
3340 class MintDeserializationCluster : public DeserializationCluster { 3328 class MintDeserializationCluster : public DeserializationCluster {
3341 public: 3329 public:
3342 MintDeserializationCluster() { } 3330 MintDeserializationCluster() {}
3343 virtual ~MintDeserializationCluster() { } 3331 virtual ~MintDeserializationCluster() {}
3344 3332
3345 void ReadAlloc(Deserializer* d) { 3333 void ReadAlloc(Deserializer* d) {
3346 PageSpace* old_space = d->heap()->old_space(); 3334 PageSpace* old_space = d->heap()->old_space();
3347 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3335 bool is_vm_object = d->isolate() == Dart::vm_isolate();
3348 3336
3349 start_index_ = d->next_index(); 3337 start_index_ = d->next_index();
3350 intptr_t count = d->Read<int32_t>(); 3338 intptr_t count = d->Read<int32_t>();
3351 for (intptr_t i = 0; i < count; i++) { 3339 for (intptr_t i = 0; i < count; i++) {
3352 bool is_canonical = d->Read<bool>(); 3340 bool is_canonical = d->Read<bool>();
3353 int64_t value = d->Read<int64_t>(); 3341 int64_t value = d->Read<int64_t>();
3354 if (Smi::IsValid(value)) { 3342 if (Smi::IsValid(value)) {
3355 d->AssignRef(Smi::New(value)); 3343 d->AssignRef(Smi::New(value));
3356 } else { 3344 } else {
3357 RawMint* mint = static_cast<RawMint*>( 3345 RawMint* mint = static_cast<RawMint*>(
3358 AllocateUninitialized(old_space, Mint::InstanceSize())); 3346 AllocateUninitialized(old_space, Mint::InstanceSize()));
3359 Deserializer::InitializeHeader(mint, kMintCid, 3347 Deserializer::InitializeHeader(mint, kMintCid, Mint::InstanceSize(),
3360 Mint::InstanceSize(),
3361 is_vm_object, is_canonical); 3348 is_vm_object, is_canonical);
3362 mint->ptr()->value_ = value; 3349 mint->ptr()->value_ = value;
3363 d->AssignRef(mint); 3350 d->AssignRef(mint);
3364 } 3351 }
3365 } 3352 }
3366 stop_index_ = d->next_index(); 3353 stop_index_ = d->next_index();
3367 } 3354 }
3368 3355
3369 void ReadFill(Deserializer* d) { } 3356 void ReadFill(Deserializer* d) {}
3370 3357
3371 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) { 3358 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) {
3372 NOT_IN_PRODUCT(TimelineDurationScope tds(Thread::Current(), 3359 NOT_IN_PRODUCT(TimelineDurationScope tds(
3373 Timeline::GetIsolateStream(), "PostLoadMint")); 3360 Thread::Current(), Timeline::GetIsolateStream(), "PostLoadMint"));
3374 3361
3375 const GrowableObjectArray& new_constants = 3362 const GrowableObjectArray& new_constants =
3376 GrowableObjectArray::Handle(zone, GrowableObjectArray::New()); 3363 GrowableObjectArray::Handle(zone, GrowableObjectArray::New());
3377 Object& number = Object::Handle(zone); 3364 Object& number = Object::Handle(zone);
3378 for (intptr_t i = start_index_; i < stop_index_; i++) { 3365 for (intptr_t i = start_index_; i < stop_index_; i++) {
3379 number = refs.At(i); 3366 number = refs.At(i);
3380 if (number.IsMint() && number.IsCanonical()) { 3367 if (number.IsMint() && number.IsCanonical()) {
3381 new_constants.Add(number); 3368 new_constants.Add(number);
3382 } 3369 }
3383 } 3370 }
3384 const Array& constants_array = 3371 const Array& constants_array =
3385 Array::Handle(zone, Array::MakeArray(new_constants)); 3372 Array::Handle(zone, Array::MakeArray(new_constants));
3386 const Class& mint_cls = Class::Handle(zone, 3373 const Class& mint_cls =
3387 Isolate::Current()->object_store()->mint_class()); 3374 Class::Handle(zone, Isolate::Current()->object_store()->mint_class());
3388 mint_cls.set_constants(constants_array); 3375 mint_cls.set_constants(constants_array);
3389 } 3376 }
3390 }; 3377 };
3391 3378
3392 3379
3393 #if !defined(DART_PRECOMPILED_RUNTIME) 3380 #if !defined(DART_PRECOMPILED_RUNTIME)
3394 class BigintSerializationCluster : public SerializationCluster { 3381 class BigintSerializationCluster : public SerializationCluster {
3395 public: 3382 public:
3396 BigintSerializationCluster() { } 3383 BigintSerializationCluster() {}
3397 virtual ~BigintSerializationCluster() { } 3384 virtual ~BigintSerializationCluster() {}
3398 3385
3399 void Trace(Serializer* s, RawObject* object) { 3386 void Trace(Serializer* s, RawObject* object) {
3400 RawBigint* bigint = Bigint::RawCast(object); 3387 RawBigint* bigint = Bigint::RawCast(object);
3401 objects_.Add(bigint); 3388 objects_.Add(bigint);
3402 3389
3403 RawObject** from = bigint->from(); 3390 RawObject** from = bigint->from();
3404 RawObject** to = bigint->to(); 3391 RawObject** to = bigint->to();
3405 for (RawObject** p = from; p <= to; p++) { 3392 for (RawObject** p = from; p <= to; p++) {
3406 s->Push(*p); 3393 s->Push(*p);
3407 } 3394 }
(...skipping 23 matching lines...) Expand all
3431 } 3418 }
3432 3419
3433 private: 3420 private:
3434 GrowableArray<RawBigint*> objects_; 3421 GrowableArray<RawBigint*> objects_;
3435 }; 3422 };
3436 #endif // !DART_PRECOMPILED_RUNTIME 3423 #endif // !DART_PRECOMPILED_RUNTIME
3437 3424
3438 3425
3439 class BigintDeserializationCluster : public DeserializationCluster { 3426 class BigintDeserializationCluster : public DeserializationCluster {
3440 public: 3427 public:
3441 BigintDeserializationCluster() { } 3428 BigintDeserializationCluster() {}
3442 virtual ~BigintDeserializationCluster() { } 3429 virtual ~BigintDeserializationCluster() {}
3443 3430
3444 void ReadAlloc(Deserializer* d) { 3431 void ReadAlloc(Deserializer* d) {
3445 start_index_ = d->next_index(); 3432 start_index_ = d->next_index();
3446 PageSpace* old_space = d->heap()->old_space(); 3433 PageSpace* old_space = d->heap()->old_space();
3447 intptr_t count = d->Read<int32_t>(); 3434 intptr_t count = d->Read<int32_t>();
3448 for (intptr_t i = 0; i < count; i++) { 3435 for (intptr_t i = 0; i < count; i++) {
3449 d->AssignRef(AllocateUninitialized(old_space, Bigint::InstanceSize())); 3436 d->AssignRef(AllocateUninitialized(old_space, Bigint::InstanceSize()));
3450 } 3437 }
3451 stop_index_ = d->next_index(); 3438 stop_index_ = d->next_index();
3452 } 3439 }
3453 3440
3454 void ReadFill(Deserializer* d) { 3441 void ReadFill(Deserializer* d) {
3455 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3442 bool is_vm_object = d->isolate() == Dart::vm_isolate();
3456 3443
3457 for (intptr_t id = start_index_; id < stop_index_; id++) { 3444 for (intptr_t id = start_index_; id < stop_index_; id++) {
3458 RawBigint* bigint = reinterpret_cast<RawBigint*>(d->Ref(id)); 3445 RawBigint* bigint = reinterpret_cast<RawBigint*>(d->Ref(id));
3459 bool is_canonical = d->Read<bool>(); 3446 bool is_canonical = d->Read<bool>();
3460 Deserializer::InitializeHeader(bigint, kBigintCid, 3447 Deserializer::InitializeHeader(bigint, kBigintCid, Bigint::InstanceSize(),
3461 Bigint::InstanceSize(),
3462 is_vm_object, is_canonical); 3448 is_vm_object, is_canonical);
3463 RawObject** from = bigint->from(); 3449 RawObject** from = bigint->from();
3464 RawObject** to = bigint->to(); 3450 RawObject** to = bigint->to();
3465 for (RawObject** p = from; p <= to; p++) { 3451 for (RawObject** p = from; p <= to; p++) {
3466 *p = d->ReadRef(); 3452 *p = d->ReadRef();
3467 } 3453 }
3468 } 3454 }
3469 } 3455 }
3470 }; 3456 };
3471 3457
3472 3458
3473 #if !defined(DART_PRECOMPILED_RUNTIME) 3459 #if !defined(DART_PRECOMPILED_RUNTIME)
3474 class DoubleSerializationCluster : public SerializationCluster { 3460 class DoubleSerializationCluster : public SerializationCluster {
3475 public: 3461 public:
3476 DoubleSerializationCluster() { } 3462 DoubleSerializationCluster() {}
3477 virtual ~DoubleSerializationCluster() { } 3463 virtual ~DoubleSerializationCluster() {}
3478 3464
3479 void Trace(Serializer* s, RawObject* object) { 3465 void Trace(Serializer* s, RawObject* object) {
3480 RawDouble* dbl = Double::RawCast(object); 3466 RawDouble* dbl = Double::RawCast(object);
3481 objects_.Add(dbl); 3467 objects_.Add(dbl);
3482 } 3468 }
3483 3469
3484 void WriteAlloc(Serializer* s) { 3470 void WriteAlloc(Serializer* s) {
3485 s->WriteCid(kDoubleCid); 3471 s->WriteCid(kDoubleCid);
3486 intptr_t count = objects_.length(); 3472 intptr_t count = objects_.length();
3487 s->Write<int32_t>(count); 3473 s->Write<int32_t>(count);
(...skipping 13 matching lines...) Expand all
3501 } 3487 }
3502 3488
3503 private: 3489 private:
3504 GrowableArray<RawDouble*> objects_; 3490 GrowableArray<RawDouble*> objects_;
3505 }; 3491 };
3506 #endif // !DART_PRECOMPILED_RUNTIME 3492 #endif // !DART_PRECOMPILED_RUNTIME
3507 3493
3508 3494
3509 class DoubleDeserializationCluster : public DeserializationCluster { 3495 class DoubleDeserializationCluster : public DeserializationCluster {
3510 public: 3496 public:
3511 DoubleDeserializationCluster() { } 3497 DoubleDeserializationCluster() {}
3512 virtual ~DoubleDeserializationCluster() { } 3498 virtual ~DoubleDeserializationCluster() {}
3513 3499
3514 void ReadAlloc(Deserializer* d) { 3500 void ReadAlloc(Deserializer* d) {
3515 start_index_ = d->next_index(); 3501 start_index_ = d->next_index();
3516 PageSpace* old_space = d->heap()->old_space(); 3502 PageSpace* old_space = d->heap()->old_space();
3517 intptr_t count = d->Read<int32_t>(); 3503 intptr_t count = d->Read<int32_t>();
3518 for (intptr_t i = 0; i < count; i++) { 3504 for (intptr_t i = 0; i < count; i++) {
3519 d->AssignRef(AllocateUninitialized(old_space, Double::InstanceSize())); 3505 d->AssignRef(AllocateUninitialized(old_space, Double::InstanceSize()));
3520 } 3506 }
3521 stop_index_ = d->next_index(); 3507 stop_index_ = d->next_index();
3522 } 3508 }
3523 3509
3524 void ReadFill(Deserializer* d) { 3510 void ReadFill(Deserializer* d) {
3525 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3511 bool is_vm_object = d->isolate() == Dart::vm_isolate();
3526 3512
3527 for (intptr_t id = start_index_; id < stop_index_; id++) { 3513 for (intptr_t id = start_index_; id < stop_index_; id++) {
3528 RawDouble* dbl = reinterpret_cast<RawDouble*>(d->Ref(id)); 3514 RawDouble* dbl = reinterpret_cast<RawDouble*>(d->Ref(id));
3529 bool is_canonical = d->Read<bool>(); 3515 bool is_canonical = d->Read<bool>();
3530 Deserializer::InitializeHeader(dbl, kDoubleCid, 3516 Deserializer::InitializeHeader(dbl, kDoubleCid, Double::InstanceSize(),
3531 Double::InstanceSize(),
3532 is_vm_object, is_canonical); 3517 is_vm_object, is_canonical);
3533 dbl->ptr()->value_ = d->Read<double>(); 3518 dbl->ptr()->value_ = d->Read<double>();
3534 } 3519 }
3535 } 3520 }
3536 }; 3521 };
3537 3522
3538 3523
3539 #if !defined(DART_PRECOMPILED_RUNTIME) 3524 #if !defined(DART_PRECOMPILED_RUNTIME)
3540 class GrowableObjectArraySerializationCluster : public SerializationCluster { 3525 class GrowableObjectArraySerializationCluster : public SerializationCluster {
3541 public: 3526 public:
3542 GrowableObjectArraySerializationCluster() { } 3527 GrowableObjectArraySerializationCluster() {}
3543 virtual ~GrowableObjectArraySerializationCluster() { } 3528 virtual ~GrowableObjectArraySerializationCluster() {}
3544 3529
3545 void Trace(Serializer* s, RawObject* object) { 3530 void Trace(Serializer* s, RawObject* object) {
3546 RawGrowableObjectArray* array = GrowableObjectArray::RawCast(object); 3531 RawGrowableObjectArray* array = GrowableObjectArray::RawCast(object);
3547 objects_.Add(array); 3532 objects_.Add(array);
3548 3533
3549 RawObject** from = array->from(); 3534 RawObject** from = array->from();
3550 RawObject** to = array->to(); 3535 RawObject** to = array->to();
3551 for (RawObject** p = from; p <= to; p++) { 3536 for (RawObject** p = from; p <= to; p++) {
3552 s->Push(*p); 3537 s->Push(*p);
3553 } 3538 }
(...skipping 24 matching lines...) Expand all
3578 3563
3579 private: 3564 private:
3580 GrowableArray<RawGrowableObjectArray*> objects_; 3565 GrowableArray<RawGrowableObjectArray*> objects_;
3581 }; 3566 };
3582 #endif // !DART_PRECOMPILED_RUNTIME 3567 #endif // !DART_PRECOMPILED_RUNTIME
3583 3568
3584 3569
3585 class GrowableObjectArrayDeserializationCluster 3570 class GrowableObjectArrayDeserializationCluster
3586 : public DeserializationCluster { 3571 : public DeserializationCluster {
3587 public: 3572 public:
3588 GrowableObjectArrayDeserializationCluster() { } 3573 GrowableObjectArrayDeserializationCluster() {}
3589 virtual ~GrowableObjectArrayDeserializationCluster() { } 3574 virtual ~GrowableObjectArrayDeserializationCluster() {}
3590 3575
3591 void ReadAlloc(Deserializer* d) { 3576 void ReadAlloc(Deserializer* d) {
3592 start_index_ = d->next_index(); 3577 start_index_ = d->next_index();
3593 PageSpace* old_space = d->heap()->old_space(); 3578 PageSpace* old_space = d->heap()->old_space();
3594 intptr_t count = d->Read<int32_t>(); 3579 intptr_t count = d->Read<int32_t>();
3595 for (intptr_t i = 0; i < count; i++) { 3580 for (intptr_t i = 0; i < count; i++) {
3596 d->AssignRef(AllocateUninitialized(old_space, 3581 d->AssignRef(AllocateUninitialized(old_space,
3597 GrowableObjectArray::InstanceSize())); 3582 GrowableObjectArray::InstanceSize()));
3598 } 3583 }
3599 stop_index_ = d->next_index(); 3584 stop_index_ = d->next_index();
(...skipping 15 matching lines...) Expand all
3615 *p = d->ReadRef(); 3600 *p = d->ReadRef();
3616 } 3601 }
3617 } 3602 }
3618 } 3603 }
3619 }; 3604 };
3620 3605
3621 3606
3622 #if !defined(DART_PRECOMPILED_RUNTIME) 3607 #if !defined(DART_PRECOMPILED_RUNTIME)
3623 class TypedDataSerializationCluster : public SerializationCluster { 3608 class TypedDataSerializationCluster : public SerializationCluster {
3624 public: 3609 public:
3625 explicit TypedDataSerializationCluster(intptr_t cid) : cid_(cid) { } 3610 explicit TypedDataSerializationCluster(intptr_t cid) : cid_(cid) {}
3626 virtual ~TypedDataSerializationCluster() { } 3611 virtual ~TypedDataSerializationCluster() {}
3627 3612
3628 void Trace(Serializer* s, RawObject* object) { 3613 void Trace(Serializer* s, RawObject* object) {
3629 RawTypedData* data = TypedData::RawCast(object); 3614 RawTypedData* data = TypedData::RawCast(object);
3630 objects_.Add(data); 3615 objects_.Add(data);
3631 } 3616 }
3632 3617
3633 void WriteAlloc(Serializer* s) { 3618 void WriteAlloc(Serializer* s) {
3634 s->WriteCid(cid_); 3619 s->WriteCid(cid_);
3635 intptr_t count = objects_.length(); 3620 intptr_t count = objects_.length();
3636 s->Write<int32_t>(count); 3621 s->Write<int32_t>(count);
(...skipping 20 matching lines...) Expand all
3657 3642
3658 private: 3643 private:
3659 const intptr_t cid_; 3644 const intptr_t cid_;
3660 GrowableArray<RawTypedData*> objects_; 3645 GrowableArray<RawTypedData*> objects_;
3661 }; 3646 };
3662 #endif // !DART_PRECOMPILED_RUNTIME 3647 #endif // !DART_PRECOMPILED_RUNTIME
3663 3648
3664 3649
3665 class TypedDataDeserializationCluster : public DeserializationCluster { 3650 class TypedDataDeserializationCluster : public DeserializationCluster {
3666 public: 3651 public:
3667 explicit TypedDataDeserializationCluster(intptr_t cid) : cid_(cid) { } 3652 explicit TypedDataDeserializationCluster(intptr_t cid) : cid_(cid) {}
3668 virtual ~TypedDataDeserializationCluster() { } 3653 virtual ~TypedDataDeserializationCluster() {}
3669 3654
3670 void ReadAlloc(Deserializer* d) { 3655 void ReadAlloc(Deserializer* d) {
3671 start_index_ = d->next_index(); 3656 start_index_ = d->next_index();
3672 PageSpace* old_space = d->heap()->old_space(); 3657 PageSpace* old_space = d->heap()->old_space();
3673 intptr_t count = d->Read<int32_t>(); 3658 intptr_t count = d->Read<int32_t>();
3674 intptr_t element_size = TypedData::ElementSizeInBytes(cid_); 3659 intptr_t element_size = TypedData::ElementSizeInBytes(cid_);
3675 for (intptr_t i = 0; i < count; i++) { 3660 for (intptr_t i = 0; i < count; i++) {
3676 intptr_t length = d->Read<int32_t>(); 3661 intptr_t length = d->Read<int32_t>();
3677 d->AssignRef(AllocateUninitialized(old_space, 3662 d->AssignRef(AllocateUninitialized(
3678 TypedData::InstanceSize(length * element_size))); 3663 old_space, TypedData::InstanceSize(length * element_size)));
3679 } 3664 }
3680 stop_index_ = d->next_index(); 3665 stop_index_ = d->next_index();
3681 } 3666 }
3682 3667
3683 void ReadFill(Deserializer* d) { 3668 void ReadFill(Deserializer* d) {
3684 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3669 bool is_vm_object = d->isolate() == Dart::vm_isolate();
3685 intptr_t element_size = TypedData::ElementSizeInBytes(cid_); 3670 intptr_t element_size = TypedData::ElementSizeInBytes(cid_);
3686 3671
3687 for (intptr_t id = start_index_; id < stop_index_; id++) { 3672 for (intptr_t id = start_index_; id < stop_index_; id++) {
3688 RawTypedData* data = reinterpret_cast<RawTypedData*>(d->Ref(id)); 3673 RawTypedData* data = reinterpret_cast<RawTypedData*>(d->Ref(id));
(...skipping 10 matching lines...) Expand all
3699 } 3684 }
3700 3685
3701 private: 3686 private:
3702 const intptr_t cid_; 3687 const intptr_t cid_;
3703 }; 3688 };
3704 3689
3705 3690
3706 #if !defined(DART_PRECOMPILED_RUNTIME) 3691 #if !defined(DART_PRECOMPILED_RUNTIME)
3707 class ExternalTypedDataSerializationCluster : public SerializationCluster { 3692 class ExternalTypedDataSerializationCluster : public SerializationCluster {
3708 public: 3693 public:
3709 explicit ExternalTypedDataSerializationCluster(intptr_t cid) : cid_(cid) { } 3694 explicit ExternalTypedDataSerializationCluster(intptr_t cid) : cid_(cid) {}
3710 virtual ~ExternalTypedDataSerializationCluster() { } 3695 virtual ~ExternalTypedDataSerializationCluster() {}
3711 3696
3712 void Trace(Serializer* s, RawObject* object) { 3697 void Trace(Serializer* s, RawObject* object) {
3713 RawExternalTypedData* data = ExternalTypedData::RawCast(object); 3698 RawExternalTypedData* data = ExternalTypedData::RawCast(object);
3714 objects_.Add(data); 3699 objects_.Add(data);
3715 ASSERT(!data->IsCanonical()); 3700 ASSERT(!data->IsCanonical());
3716 } 3701 }
3717 3702
3718 void WriteAlloc(Serializer* s) { 3703 void WriteAlloc(Serializer* s) {
3719 s->WriteCid(cid_); 3704 s->WriteCid(cid_);
3720 intptr_t count = objects_.length(); 3705 intptr_t count = objects_.length();
(...skipping 18 matching lines...) Expand all
3739 3724
3740 private: 3725 private:
3741 const intptr_t cid_; 3726 const intptr_t cid_;
3742 GrowableArray<RawExternalTypedData*> objects_; 3727 GrowableArray<RawExternalTypedData*> objects_;
3743 }; 3728 };
3744 #endif // !DART_PRECOMPILED_RUNTIME 3729 #endif // !DART_PRECOMPILED_RUNTIME
3745 3730
3746 3731
3747 class ExternalTypedDataDeserializationCluster : public DeserializationCluster { 3732 class ExternalTypedDataDeserializationCluster : public DeserializationCluster {
3748 public: 3733 public:
3749 explicit ExternalTypedDataDeserializationCluster(intptr_t cid) : cid_(cid) { } 3734 explicit ExternalTypedDataDeserializationCluster(intptr_t cid) : cid_(cid) {}
3750 virtual ~ExternalTypedDataDeserializationCluster() { } 3735 virtual ~ExternalTypedDataDeserializationCluster() {}
3751 3736
3752 void ReadAlloc(Deserializer* d) { 3737 void ReadAlloc(Deserializer* d) {
3753 start_index_ = d->next_index(); 3738 start_index_ = d->next_index();
3754 PageSpace* old_space = d->heap()->old_space(); 3739 PageSpace* old_space = d->heap()->old_space();
3755 intptr_t count = d->Read<int32_t>(); 3740 intptr_t count = d->Read<int32_t>();
3756 for (intptr_t i = 0; i < count; i++) { 3741 for (intptr_t i = 0; i < count; i++) {
3757 d->AssignRef(AllocateUninitialized(old_space, 3742 d->AssignRef(
3758 ExternalTypedData::InstanceSize())); 3743 AllocateUninitialized(old_space, ExternalTypedData::InstanceSize()));
3759 } 3744 }
3760 stop_index_ = d->next_index(); 3745 stop_index_ = d->next_index();
3761 } 3746 }
3762 3747
3763 void ReadFill(Deserializer* d) { 3748 void ReadFill(Deserializer* d) {
3764 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3749 bool is_vm_object = d->isolate() == Dart::vm_isolate();
3765 intptr_t element_size = ExternalTypedData::ElementSizeInBytes(cid_); 3750 intptr_t element_size = ExternalTypedData::ElementSizeInBytes(cid_);
3766 3751
3767 for (intptr_t id = start_index_; id < stop_index_; id++) { 3752 for (intptr_t id = start_index_; id < stop_index_; id++) {
3768 RawExternalTypedData* data = 3753 RawExternalTypedData* data =
3769 reinterpret_cast<RawExternalTypedData*>(d->Ref(id)); 3754 reinterpret_cast<RawExternalTypedData*>(d->Ref(id));
3770 intptr_t length = d->Read<int32_t>(); 3755 intptr_t length = d->Read<int32_t>();
3771 Deserializer::InitializeHeader(data, cid_, 3756 Deserializer::InitializeHeader(
3772 ExternalTypedData::InstanceSize(), 3757 data, cid_, ExternalTypedData::InstanceSize(), is_vm_object);
3773 is_vm_object);
3774 data->ptr()->length_ = Smi::New(length); 3758 data->ptr()->length_ = Smi::New(length);
3775 data->ptr()->data_ = const_cast<uint8_t*>(d->CurrentBufferAddress()); 3759 data->ptr()->data_ = const_cast<uint8_t*>(d->CurrentBufferAddress());
3776 d->Advance(length * element_size); 3760 d->Advance(length * element_size);
3777 // No finalizer / external size 0. 3761 // No finalizer / external size 0.
3778 } 3762 }
3779 } 3763 }
3780 3764
3781 private: 3765 private:
3782 const intptr_t cid_; 3766 const intptr_t cid_;
3783 }; 3767 };
3784 3768
3785 3769
3786 #if !defined(DART_PRECOMPILED_RUNTIME) 3770 #if !defined(DART_PRECOMPILED_RUNTIME)
3787 class StacktraceSerializationCluster : public SerializationCluster { 3771 class StacktraceSerializationCluster : public SerializationCluster {
3788 public: 3772 public:
3789 StacktraceSerializationCluster() { } 3773 StacktraceSerializationCluster() {}
3790 virtual ~StacktraceSerializationCluster() { } 3774 virtual ~StacktraceSerializationCluster() {}
3791 3775
3792 void Trace(Serializer* s, RawObject* object) { 3776 void Trace(Serializer* s, RawObject* object) {
3793 RawStacktrace* trace = Stacktrace::RawCast(object); 3777 RawStacktrace* trace = Stacktrace::RawCast(object);
3794 objects_.Add(trace); 3778 objects_.Add(trace);
3795 3779
3796 RawObject** from = trace->from(); 3780 RawObject** from = trace->from();
3797 RawObject** to = trace->to(); 3781 RawObject** to = trace->to();
3798 for (RawObject** p = from; p <= to; p++) { 3782 for (RawObject** p = from; p <= to; p++) {
3799 s->Push(*p); 3783 s->Push(*p);
3800 } 3784 }
(...skipping 22 matching lines...) Expand all
3823 } 3807 }
3824 3808
3825 private: 3809 private:
3826 GrowableArray<RawStacktrace*> objects_; 3810 GrowableArray<RawStacktrace*> objects_;
3827 }; 3811 };
3828 #endif // !DART_PRECOMPILED_RUNTIME 3812 #endif // !DART_PRECOMPILED_RUNTIME
3829 3813
3830 3814
3831 class StacktraceDeserializationCluster : public DeserializationCluster { 3815 class StacktraceDeserializationCluster : public DeserializationCluster {
3832 public: 3816 public:
3833 StacktraceDeserializationCluster() { } 3817 StacktraceDeserializationCluster() {}
3834 virtual ~StacktraceDeserializationCluster() { } 3818 virtual ~StacktraceDeserializationCluster() {}
3835 3819
3836 void ReadAlloc(Deserializer* d) { 3820 void ReadAlloc(Deserializer* d) {
3837 start_index_ = d->next_index(); 3821 start_index_ = d->next_index();
3838 PageSpace* old_space = d->heap()->old_space(); 3822 PageSpace* old_space = d->heap()->old_space();
3839 intptr_t count = d->Read<int32_t>(); 3823 intptr_t count = d->Read<int32_t>();
3840 for (intptr_t i = 0; i < count; i++) { 3824 for (intptr_t i = 0; i < count; i++) {
3841 d->AssignRef(AllocateUninitialized(old_space, 3825 d->AssignRef(
3842 Stacktrace::InstanceSize())); 3826 AllocateUninitialized(old_space, Stacktrace::InstanceSize()));
3843 } 3827 }
3844 stop_index_ = d->next_index(); 3828 stop_index_ = d->next_index();
3845 } 3829 }
3846 3830
3847 void ReadFill(Deserializer* d) { 3831 void ReadFill(Deserializer* d) {
3848 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3832 bool is_vm_object = d->isolate() == Dart::vm_isolate();
3849 3833
3850 for (intptr_t id = start_index_; id < stop_index_; id++) { 3834 for (intptr_t id = start_index_; id < stop_index_; id++) {
3851 RawStacktrace* trace = reinterpret_cast<RawStacktrace*>(d->Ref(id)); 3835 RawStacktrace* trace = reinterpret_cast<RawStacktrace*>(d->Ref(id));
3852 Deserializer::InitializeHeader(trace, kStacktraceCid, 3836 Deserializer::InitializeHeader(trace, kStacktraceCid,
3853 Stacktrace::InstanceSize(), is_vm_object); 3837 Stacktrace::InstanceSize(), is_vm_object);
3854 RawObject** from = trace->from(); 3838 RawObject** from = trace->from();
3855 RawObject** to = trace->to(); 3839 RawObject** to = trace->to();
3856 for (RawObject** p = from; p <= to; p++) { 3840 for (RawObject** p = from; p <= to; p++) {
3857 *p = d->ReadRef(); 3841 *p = d->ReadRef();
3858 } 3842 }
3859 } 3843 }
3860 } 3844 }
3861 }; 3845 };
3862 3846
3863 3847
3864 #if !defined(DART_PRECOMPILED_RUNTIME) 3848 #if !defined(DART_PRECOMPILED_RUNTIME)
3865 class RegExpSerializationCluster : public SerializationCluster { 3849 class RegExpSerializationCluster : public SerializationCluster {
3866 public: 3850 public:
3867 RegExpSerializationCluster() { } 3851 RegExpSerializationCluster() {}
3868 virtual ~RegExpSerializationCluster() { } 3852 virtual ~RegExpSerializationCluster() {}
3869 3853
3870 void Trace(Serializer* s, RawObject* object) { 3854 void Trace(Serializer* s, RawObject* object) {
3871 RawRegExp* regexp = RegExp::RawCast(object); 3855 RawRegExp* regexp = RegExp::RawCast(object);
3872 objects_.Add(regexp); 3856 objects_.Add(regexp);
3873 3857
3874 RawObject** from = regexp->from(); 3858 RawObject** from = regexp->from();
3875 RawObject** to = regexp->to(); 3859 RawObject** to = regexp->to();
3876 for (RawObject** p = from; p <= to; p++) { 3860 for (RawObject** p = from; p <= to; p++) {
3877 s->Push(*p); 3861 s->Push(*p);
3878 } 3862 }
(...skipping 25 matching lines...) Expand all
3904 } 3888 }
3905 3889
3906 private: 3890 private:
3907 GrowableArray<RawRegExp*> objects_; 3891 GrowableArray<RawRegExp*> objects_;
3908 }; 3892 };
3909 #endif // !DART_PRECOMPILED_RUNTIME 3893 #endif // !DART_PRECOMPILED_RUNTIME
3910 3894
3911 3895
3912 class RegExpDeserializationCluster : public DeserializationCluster { 3896 class RegExpDeserializationCluster : public DeserializationCluster {
3913 public: 3897 public:
3914 RegExpDeserializationCluster() { } 3898 RegExpDeserializationCluster() {}
3915 virtual ~RegExpDeserializationCluster() { } 3899 virtual ~RegExpDeserializationCluster() {}
3916 3900
3917 void ReadAlloc(Deserializer* d) { 3901 void ReadAlloc(Deserializer* d) {
3918 start_index_ = d->next_index(); 3902 start_index_ = d->next_index();
3919 PageSpace* old_space = d->heap()->old_space(); 3903 PageSpace* old_space = d->heap()->old_space();
3920 intptr_t count = d->Read<int32_t>(); 3904 intptr_t count = d->Read<int32_t>();
3921 for (intptr_t i = 0; i < count; i++) { 3905 for (intptr_t i = 0; i < count; i++) {
3922 d->AssignRef(AllocateUninitialized(old_space, 3906 d->AssignRef(AllocateUninitialized(old_space, RegExp::InstanceSize()));
3923 RegExp::InstanceSize()));
3924 } 3907 }
3925 stop_index_ = d->next_index(); 3908 stop_index_ = d->next_index();
3926 } 3909 }
3927 3910
3928 void ReadFill(Deserializer* d) { 3911 void ReadFill(Deserializer* d) {
3929 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3912 bool is_vm_object = d->isolate() == Dart::vm_isolate();
3930 3913
3931 for (intptr_t id = start_index_; id < stop_index_; id++) { 3914 for (intptr_t id = start_index_; id < stop_index_; id++) {
3932 RawRegExp* regexp = reinterpret_cast<RawRegExp*>(d->Ref(id)); 3915 RawRegExp* regexp = reinterpret_cast<RawRegExp*>(d->Ref(id));
3933 Deserializer::InitializeHeader(regexp, kRegExpCid, 3916 Deserializer::InitializeHeader(regexp, kRegExpCid, RegExp::InstanceSize(),
3934 RegExp::InstanceSize(), is_vm_object); 3917 is_vm_object);
3935 RawObject** from = regexp->from(); 3918 RawObject** from = regexp->from();
3936 RawObject** to = regexp->to(); 3919 RawObject** to = regexp->to();
3937 for (RawObject** p = from; p <= to; p++) { 3920 for (RawObject** p = from; p <= to; p++) {
3938 *p = d->ReadRef(); 3921 *p = d->ReadRef();
3939 } 3922 }
3940 3923
3941 regexp->ptr()->num_registers_ = d->Read<int32_t>(); 3924 regexp->ptr()->num_registers_ = d->Read<int32_t>();
3942 regexp->ptr()->type_flags_ = d->Read<int8_t>(); 3925 regexp->ptr()->type_flags_ = d->Read<int8_t>();
3943 } 3926 }
3944 } 3927 }
3945 }; 3928 };
3946 3929
3947 3930
3948 #if !defined(DART_PRECOMPILED_RUNTIME) 3931 #if !defined(DART_PRECOMPILED_RUNTIME)
3949 class WeakPropertySerializationCluster : public SerializationCluster { 3932 class WeakPropertySerializationCluster : public SerializationCluster {
3950 public: 3933 public:
3951 WeakPropertySerializationCluster() { } 3934 WeakPropertySerializationCluster() {}
3952 virtual ~WeakPropertySerializationCluster() { } 3935 virtual ~WeakPropertySerializationCluster() {}
3953 3936
3954 void Trace(Serializer* s, RawObject* object) { 3937 void Trace(Serializer* s, RawObject* object) {
3955 RawWeakProperty* property = WeakProperty::RawCast(object); 3938 RawWeakProperty* property = WeakProperty::RawCast(object);
3956 objects_.Add(property); 3939 objects_.Add(property);
3957 3940
3958 RawObject** from = property->from(); 3941 RawObject** from = property->from();
3959 RawObject** to = property->to(); 3942 RawObject** to = property->to();
3960 for (RawObject** p = from; p <= to; p++) { 3943 for (RawObject** p = from; p <= to; p++) {
3961 s->Push(*p); 3944 s->Push(*p);
3962 } 3945 }
(...skipping 22 matching lines...) Expand all
3985 } 3968 }
3986 3969
3987 private: 3970 private:
3988 GrowableArray<RawWeakProperty*> objects_; 3971 GrowableArray<RawWeakProperty*> objects_;
3989 }; 3972 };
3990 #endif // !DART_PRECOMPILED_RUNTIME 3973 #endif // !DART_PRECOMPILED_RUNTIME
3991 3974
3992 3975
3993 class WeakPropertyDeserializationCluster : public DeserializationCluster { 3976 class WeakPropertyDeserializationCluster : public DeserializationCluster {
3994 public: 3977 public:
3995 WeakPropertyDeserializationCluster() { } 3978 WeakPropertyDeserializationCluster() {}
3996 virtual ~WeakPropertyDeserializationCluster() { } 3979 virtual ~WeakPropertyDeserializationCluster() {}
3997 3980
3998 void ReadAlloc(Deserializer* d) { 3981 void ReadAlloc(Deserializer* d) {
3999 start_index_ = d->next_index(); 3982 start_index_ = d->next_index();
4000 PageSpace* old_space = d->heap()->old_space(); 3983 PageSpace* old_space = d->heap()->old_space();
4001 intptr_t count = d->Read<int32_t>(); 3984 intptr_t count = d->Read<int32_t>();
4002 for (intptr_t i = 0; i < count; i++) { 3985 for (intptr_t i = 0; i < count; i++) {
4003 d->AssignRef(AllocateUninitialized(old_space, 3986 d->AssignRef(
4004 WeakProperty::InstanceSize())); 3987 AllocateUninitialized(old_space, WeakProperty::InstanceSize()));
4005 } 3988 }
4006 stop_index_ = d->next_index(); 3989 stop_index_ = d->next_index();
4007 } 3990 }
4008 3991
4009 void ReadFill(Deserializer* d) { 3992 void ReadFill(Deserializer* d) {
4010 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 3993 bool is_vm_object = d->isolate() == Dart::vm_isolate();
4011 3994
4012 for (intptr_t id = start_index_; id < stop_index_; id++) { 3995 for (intptr_t id = start_index_; id < stop_index_; id++) {
4013 RawWeakProperty* property = 3996 RawWeakProperty* property =
4014 reinterpret_cast<RawWeakProperty*>(d->Ref(id)); 3997 reinterpret_cast<RawWeakProperty*>(d->Ref(id));
4015 Deserializer::InitializeHeader(property, kWeakPropertyCid, 3998 Deserializer::InitializeHeader(property, kWeakPropertyCid,
4016 WeakProperty::InstanceSize(), 3999 WeakProperty::InstanceSize(),
4017 is_vm_object); 4000 is_vm_object);
4018 RawObject** from = property->from(); 4001 RawObject** from = property->from();
4019 RawObject** to = property->to(); 4002 RawObject** to = property->to();
4020 for (RawObject** p = from; p <= to; p++) { 4003 for (RawObject** p = from; p <= to; p++) {
4021 *p = d->ReadRef(); 4004 *p = d->ReadRef();
4022 } 4005 }
4023 } 4006 }
4024 } 4007 }
4025 }; 4008 };
4026 4009
4027 4010
4028 #if !defined(DART_PRECOMPILED_RUNTIME) 4011 #if !defined(DART_PRECOMPILED_RUNTIME)
4029 class LinkedHashMapSerializationCluster : public SerializationCluster { 4012 class LinkedHashMapSerializationCluster : public SerializationCluster {
4030 public: 4013 public:
4031 LinkedHashMapSerializationCluster() { } 4014 LinkedHashMapSerializationCluster() {}
4032 virtual ~LinkedHashMapSerializationCluster() { } 4015 virtual ~LinkedHashMapSerializationCluster() {}
4033 4016
4034 void Trace(Serializer* s, RawObject* object) { 4017 void Trace(Serializer* s, RawObject* object) {
4035 RawLinkedHashMap* map = LinkedHashMap::RawCast(object); 4018 RawLinkedHashMap* map = LinkedHashMap::RawCast(object);
4036 objects_.Add(map); 4019 objects_.Add(map);
4037 4020
4038 s->Push(map->ptr()->type_arguments_); 4021 s->Push(map->ptr()->type_arguments_);
4039 4022
4040 intptr_t used_data = Smi::Value(map->ptr()->used_data_); 4023 intptr_t used_data = Smi::Value(map->ptr()->used_data_);
4041 RawArray* data_array = map->ptr()->data_; 4024 RawArray* data_array = map->ptr()->data_;
4042 RawObject** data_elements = data_array->ptr()->data(); 4025 RawObject** data_elements = data_array->ptr()->data();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
4089 } 4072 }
4090 4073
4091 private: 4074 private:
4092 GrowableArray<RawLinkedHashMap*> objects_; 4075 GrowableArray<RawLinkedHashMap*> objects_;
4093 }; 4076 };
4094 #endif // !DART_PRECOMPILED_RUNTIME 4077 #endif // !DART_PRECOMPILED_RUNTIME
4095 4078
4096 4079
4097 class LinkedHashMapDeserializationCluster : public DeserializationCluster { 4080 class LinkedHashMapDeserializationCluster : public DeserializationCluster {
4098 public: 4081 public:
4099 LinkedHashMapDeserializationCluster() { } 4082 LinkedHashMapDeserializationCluster() {}
4100 virtual ~LinkedHashMapDeserializationCluster() { } 4083 virtual ~LinkedHashMapDeserializationCluster() {}
4101 4084
4102 void ReadAlloc(Deserializer* d) { 4085 void ReadAlloc(Deserializer* d) {
4103 start_index_ = d->next_index(); 4086 start_index_ = d->next_index();
4104 PageSpace* old_space = d->heap()->old_space(); 4087 PageSpace* old_space = d->heap()->old_space();
4105 intptr_t count = d->Read<int32_t>(); 4088 intptr_t count = d->Read<int32_t>();
4106 for (intptr_t i = 0; i < count; i++) { 4089 for (intptr_t i = 0; i < count; i++) {
4107 d->AssignRef(AllocateUninitialized(old_space, 4090 d->AssignRef(
4108 LinkedHashMap::InstanceSize())); 4091 AllocateUninitialized(old_space, LinkedHashMap::InstanceSize()));
4109 } 4092 }
4110 stop_index_ = d->next_index(); 4093 stop_index_ = d->next_index();
4111 } 4094 }
4112 4095
4113 void ReadFill(Deserializer* d) { 4096 void ReadFill(Deserializer* d) {
4114 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 4097 bool is_vm_object = d->isolate() == Dart::vm_isolate();
4115 PageSpace* old_space = d->heap()->old_space(); 4098 PageSpace* old_space = d->heap()->old_space();
4116 4099
4117 for (intptr_t id = start_index_; id < stop_index_; id++) { 4100 for (intptr_t id = start_index_; id < stop_index_; id++) {
4118 RawLinkedHashMap* map = reinterpret_cast<RawLinkedHashMap*>(d->Ref(id)); 4101 RawLinkedHashMap* map = reinterpret_cast<RawLinkedHashMap*>(d->Ref(id));
(...skipping 30 matching lines...) Expand all
4149 map->ptr()->used_data_ = Smi::New(used_data); 4132 map->ptr()->used_data_ = Smi::New(used_data);
4150 map->ptr()->deleted_keys_ = Smi::New(0); 4133 map->ptr()->deleted_keys_ = Smi::New(0);
4151 } 4134 }
4152 } 4135 }
4153 }; 4136 };
4154 4137
4155 4138
4156 #if !defined(DART_PRECOMPILED_RUNTIME) 4139 #if !defined(DART_PRECOMPILED_RUNTIME)
4157 class ArraySerializationCluster : public SerializationCluster { 4140 class ArraySerializationCluster : public SerializationCluster {
4158 public: 4141 public:
4159 explicit ArraySerializationCluster(intptr_t cid) : cid_(cid) { } 4142 explicit ArraySerializationCluster(intptr_t cid) : cid_(cid) {}
4160 virtual ~ArraySerializationCluster() { } 4143 virtual ~ArraySerializationCluster() {}
4161 4144
4162 void Trace(Serializer* s, RawObject* object) { 4145 void Trace(Serializer* s, RawObject* object) {
4163 RawArray* array = Array::RawCast(object); 4146 RawArray* array = Array::RawCast(object);
4164 objects_.Add(array); 4147 objects_.Add(array);
4165 4148
4166 s->Push(array->ptr()->type_arguments_); 4149 s->Push(array->ptr()->type_arguments_);
4167 intptr_t length = Smi::Value(array->ptr()->length_); 4150 intptr_t length = Smi::Value(array->ptr()->length_);
4168 for (intptr_t i = 0; i < length; i++) { 4151 for (intptr_t i = 0; i < length; i++) {
4169 s->Push(array->ptr()->data()[i]); 4152 s->Push(array->ptr()->data()[i]);
4170 } 4153 }
(...skipping 27 matching lines...) Expand all
4198 4181
4199 private: 4182 private:
4200 intptr_t cid_; 4183 intptr_t cid_;
4201 GrowableArray<RawArray*> objects_; 4184 GrowableArray<RawArray*> objects_;
4202 }; 4185 };
4203 #endif // !DART_PRECOMPILED_RUNTIME 4186 #endif // !DART_PRECOMPILED_RUNTIME
4204 4187
4205 4188
4206 class ArrayDeserializationCluster : public DeserializationCluster { 4189 class ArrayDeserializationCluster : public DeserializationCluster {
4207 public: 4190 public:
4208 explicit ArrayDeserializationCluster(intptr_t cid) : cid_(cid) { } 4191 explicit ArrayDeserializationCluster(intptr_t cid) : cid_(cid) {}
4209 virtual ~ArrayDeserializationCluster() { } 4192 virtual ~ArrayDeserializationCluster() {}
4210 4193
4211 void ReadAlloc(Deserializer* d) { 4194 void ReadAlloc(Deserializer* d) {
4212 start_index_ = d->next_index(); 4195 start_index_ = d->next_index();
4213 PageSpace* old_space = d->heap()->old_space(); 4196 PageSpace* old_space = d->heap()->old_space();
4214 intptr_t count = d->Read<int32_t>(); 4197 intptr_t count = d->Read<int32_t>();
4215 for (intptr_t i = 0; i < count; i++) { 4198 for (intptr_t i = 0; i < count; i++) {
4216 intptr_t length = d->Read<int32_t>(); 4199 intptr_t length = d->Read<int32_t>();
4217 d->AssignRef(AllocateUninitialized(old_space, 4200 d->AssignRef(
4218 Array::InstanceSize(length))); 4201 AllocateUninitialized(old_space, Array::InstanceSize(length)));
4219 } 4202 }
4220 stop_index_ = d->next_index(); 4203 stop_index_ = d->next_index();
4221 } 4204 }
4222 4205
4223 void ReadFill(Deserializer* d) { 4206 void ReadFill(Deserializer* d) {
4224 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 4207 bool is_vm_object = d->isolate() == Dart::vm_isolate();
4225 4208
4226 for (intptr_t id = start_index_; id < stop_index_; id++) { 4209 for (intptr_t id = start_index_; id < stop_index_; id++) {
4227 RawArray* array = reinterpret_cast<RawArray*>(d->Ref(id)); 4210 RawArray* array = reinterpret_cast<RawArray*>(d->Ref(id));
4228 intptr_t length = d->Read<int32_t>(); 4211 intptr_t length = d->Read<int32_t>();
4229 bool is_canonical = d->Read<bool>(); 4212 bool is_canonical = d->Read<bool>();
4230 Deserializer::InitializeHeader(array, cid_, 4213 Deserializer::InitializeHeader(array, cid_, Array::InstanceSize(length),
4231 Array::InstanceSize(length),
4232 is_vm_object, is_canonical); 4214 is_vm_object, is_canonical);
4233 array->ptr()->type_arguments_ = 4215 array->ptr()->type_arguments_ =
4234 reinterpret_cast<RawTypeArguments*>(d->ReadRef()); 4216 reinterpret_cast<RawTypeArguments*>(d->ReadRef());
4235 array->ptr()->length_ = Smi::New(length); 4217 array->ptr()->length_ = Smi::New(length);
4236 for (intptr_t j = 0; j < length; j++) { 4218 for (intptr_t j = 0; j < length; j++) {
4237 array->ptr()->data()[j] = d->ReadRef(); 4219 array->ptr()->data()[j] = d->ReadRef();
4238 } 4220 }
4239 } 4221 }
4240 } 4222 }
4241 4223
4242 private: 4224 private:
4243 const intptr_t cid_; 4225 const intptr_t cid_;
4244 }; 4226 };
4245 4227
4246 4228
4247 #if !defined(DART_PRECOMPILED_RUNTIME) 4229 #if !defined(DART_PRECOMPILED_RUNTIME)
4248 class OneByteStringSerializationCluster : public SerializationCluster { 4230 class OneByteStringSerializationCluster : public SerializationCluster {
4249 public: 4231 public:
4250 OneByteStringSerializationCluster() { } 4232 OneByteStringSerializationCluster() {}
4251 virtual ~OneByteStringSerializationCluster() { } 4233 virtual ~OneByteStringSerializationCluster() {}
4252 4234
4253 void Trace(Serializer* s, RawObject* object) { 4235 void Trace(Serializer* s, RawObject* object) {
4254 RawOneByteString* str = reinterpret_cast<RawOneByteString*>(object); 4236 RawOneByteString* str = reinterpret_cast<RawOneByteString*>(object);
4255 objects_.Add(str); 4237 objects_.Add(str);
4256 } 4238 }
4257 4239
4258 void WriteAlloc(Serializer* s) { 4240 void WriteAlloc(Serializer* s) {
4259 s->WriteCid(kOneByteStringCid); 4241 s->WriteCid(kOneByteStringCid);
4260 intptr_t count = objects_.length(); 4242 intptr_t count = objects_.length();
4261 s->Write<int32_t>(count); 4243 s->Write<int32_t>(count);
(...skipping 19 matching lines...) Expand all
4281 } 4263 }
4282 4264
4283 private: 4265 private:
4284 GrowableArray<RawOneByteString*> objects_; 4266 GrowableArray<RawOneByteString*> objects_;
4285 }; 4267 };
4286 #endif // !DART_PRECOMPILED_RUNTIME 4268 #endif // !DART_PRECOMPILED_RUNTIME
4287 4269
4288 4270
4289 class OneByteStringDeserializationCluster : public DeserializationCluster { 4271 class OneByteStringDeserializationCluster : public DeserializationCluster {
4290 public: 4272 public:
4291 OneByteStringDeserializationCluster() { } 4273 OneByteStringDeserializationCluster() {}
4292 virtual ~OneByteStringDeserializationCluster() { } 4274 virtual ~OneByteStringDeserializationCluster() {}
4293 4275
4294 void ReadAlloc(Deserializer* d) { 4276 void ReadAlloc(Deserializer* d) {
4295 start_index_ = d->next_index(); 4277 start_index_ = d->next_index();
4296 PageSpace* old_space = d->heap()->old_space(); 4278 PageSpace* old_space = d->heap()->old_space();
4297 intptr_t count = d->Read<int32_t>(); 4279 intptr_t count = d->Read<int32_t>();
4298 for (intptr_t i = 0; i < count; i++) { 4280 for (intptr_t i = 0; i < count; i++) {
4299 intptr_t length = d->Read<int32_t>(); 4281 intptr_t length = d->Read<int32_t>();
4300 d->AssignRef(AllocateUninitialized(old_space, 4282 d->AssignRef(AllocateUninitialized(old_space,
4301 OneByteString::InstanceSize(length))); 4283 OneByteString::InstanceSize(length)));
4302 } 4284 }
(...skipping 16 matching lines...) Expand all
4319 str->ptr()->data()[j] = d->Read<uint8_t>(); 4301 str->ptr()->data()[j] = d->Read<uint8_t>();
4320 } 4302 }
4321 } 4303 }
4322 } 4304 }
4323 }; 4305 };
4324 4306
4325 4307
4326 #if !defined(DART_PRECOMPILED_RUNTIME) 4308 #if !defined(DART_PRECOMPILED_RUNTIME)
4327 class TwoByteStringSerializationCluster : public SerializationCluster { 4309 class TwoByteStringSerializationCluster : public SerializationCluster {
4328 public: 4310 public:
4329 TwoByteStringSerializationCluster() { } 4311 TwoByteStringSerializationCluster() {}
4330 virtual ~TwoByteStringSerializationCluster() { } 4312 virtual ~TwoByteStringSerializationCluster() {}
4331 4313
4332 void Trace(Serializer* s, RawObject* object) { 4314 void Trace(Serializer* s, RawObject* object) {
4333 RawTwoByteString* str = reinterpret_cast<RawTwoByteString*>(object); 4315 RawTwoByteString* str = reinterpret_cast<RawTwoByteString*>(object);
4334 objects_.Add(str); 4316 objects_.Add(str);
4335 } 4317 }
4336 4318
4337 void WriteAlloc(Serializer* s) { 4319 void WriteAlloc(Serializer* s) {
4338 s->WriteCid(kTwoByteStringCid); 4320 s->WriteCid(kTwoByteStringCid);
4339 intptr_t count = objects_.length(); 4321 intptr_t count = objects_.length();
4340 s->Write<int32_t>(count); 4322 s->Write<int32_t>(count);
(...skipping 19 matching lines...) Expand all
4360 } 4342 }
4361 4343
4362 private: 4344 private:
4363 GrowableArray<RawTwoByteString*> objects_; 4345 GrowableArray<RawTwoByteString*> objects_;
4364 }; 4346 };
4365 #endif // !DART_PRECOMPILED_RUNTIME 4347 #endif // !DART_PRECOMPILED_RUNTIME
4366 4348
4367 4349
4368 class TwoByteStringDeserializationCluster : public DeserializationCluster { 4350 class TwoByteStringDeserializationCluster : public DeserializationCluster {
4369 public: 4351 public:
4370 TwoByteStringDeserializationCluster() { } 4352 TwoByteStringDeserializationCluster() {}
4371 virtual ~TwoByteStringDeserializationCluster() { } 4353 virtual ~TwoByteStringDeserializationCluster() {}
4372 4354
4373 void ReadAlloc(Deserializer* d) { 4355 void ReadAlloc(Deserializer* d) {
4374 start_index_ = d->next_index(); 4356 start_index_ = d->next_index();
4375 PageSpace* old_space = d->heap()->old_space(); 4357 PageSpace* old_space = d->heap()->old_space();
4376 intptr_t count = d->Read<int32_t>(); 4358 intptr_t count = d->Read<int32_t>();
4377 for (intptr_t i = 0; i < count; i++) { 4359 for (intptr_t i = 0; i < count; i++) {
4378 intptr_t length = d->Read<int32_t>(); 4360 intptr_t length = d->Read<int32_t>();
4379 d->AssignRef(AllocateUninitialized(old_space, 4361 d->AssignRef(AllocateUninitialized(old_space,
4380 TwoByteString::InstanceSize(length))); 4362 TwoByteString::InstanceSize(length)));
4381 } 4363 }
4382 stop_index_ = d->next_index(); 4364 stop_index_ = d->next_index();
4383 } 4365 }
4384 4366
4385 void ReadFill(Deserializer* d) { 4367 void ReadFill(Deserializer* d) {
4386 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 4368 bool is_vm_object = d->isolate() == Dart::vm_isolate();
4387 4369
4388 for (intptr_t id = start_index_; id < stop_index_; id++) { 4370 for (intptr_t id = start_index_; id < stop_index_; id++) {
4389 RawTwoByteString* str = 4371 RawTwoByteString* str = reinterpret_cast<RawTwoByteString*>(d->Ref(id));
4390 reinterpret_cast<RawTwoByteString*>(d->Ref(id));
4391 intptr_t length = d->Read<int32_t>(); 4372 intptr_t length = d->Read<int32_t>();
4392 bool is_canonical = d->Read<bool>(); 4373 bool is_canonical = d->Read<bool>();
4393 Deserializer::InitializeHeader(str, kTwoByteStringCid, 4374 Deserializer::InitializeHeader(str, kTwoByteStringCid,
4394 TwoByteString::InstanceSize(length), 4375 TwoByteString::InstanceSize(length),
4395 is_vm_object, is_canonical); 4376 is_vm_object, is_canonical);
4396 str->ptr()->length_ = Smi::New(length); 4377 str->ptr()->length_ = Smi::New(length);
4397 str->ptr()->hash_ = Smi::New(d->Read<int32_t>()); 4378 str->ptr()->hash_ = Smi::New(d->Read<int32_t>());
4398 uint8_t* cdata = reinterpret_cast<uint8_t*>(str->ptr()->data()); 4379 uint8_t* cdata = reinterpret_cast<uint8_t*>(str->ptr()->data());
4399 d->ReadBytes(cdata, length * 2); 4380 d->ReadBytes(cdata, length * 2);
4400 } 4381 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
4432 delete[] clusters_by_cid_; 4413 delete[] clusters_by_cid_;
4433 } 4414 }
4434 4415
4435 4416
4436 SerializationCluster* Serializer::NewClusterForClass(intptr_t cid) { 4417 SerializationCluster* Serializer::NewClusterForClass(intptr_t cid) {
4437 #if defined(DART_PRECOMPILED_RUNTIME) 4418 #if defined(DART_PRECOMPILED_RUNTIME)
4438 UNREACHABLE(); 4419 UNREACHABLE();
4439 return NULL; 4420 return NULL;
4440 #else 4421 #else
4441 Zone* Z = zone_; 4422 Zone* Z = zone_;
4442 if ((cid >= kNumPredefinedCids) || 4423 if ((cid >= kNumPredefinedCids) || (cid == kInstanceCid) ||
4443 (cid == kInstanceCid) ||
4444 RawObject::IsTypedDataViewClassId(cid)) { 4424 RawObject::IsTypedDataViewClassId(cid)) {
4445 Push(isolate()->class_table()->At(cid)); 4425 Push(isolate()->class_table()->At(cid));
4446 return new (Z) InstanceSerializationCluster(cid); 4426 return new (Z) InstanceSerializationCluster(cid);
4447 } 4427 }
4448 if (RawObject::IsExternalTypedDataClassId(cid)) { 4428 if (RawObject::IsExternalTypedDataClassId(cid)) {
4449 return new (Z) ExternalTypedDataSerializationCluster(cid); 4429 return new (Z) ExternalTypedDataSerializationCluster(cid);
4450 } 4430 }
4451 if (RawObject::IsTypedDataClassId(cid)) { 4431 if (RawObject::IsTypedDataClassId(cid)) {
4452 return new (Z) TypedDataSerializationCluster(cid); 4432 return new (Z) TypedDataSerializationCluster(cid);
4453 } 4433 }
4454 4434
4455 switch (cid) { 4435 switch (cid) {
4456 case kClassCid: return new (Z) ClassSerializationCluster(num_cids_); 4436 case kClassCid:
4437 return new (Z) ClassSerializationCluster(num_cids_);
4457 case kUnresolvedClassCid: 4438 case kUnresolvedClassCid:
4458 return new (Z) UnresolvedClassSerializationCluster(); 4439 return new (Z) UnresolvedClassSerializationCluster();
4459 case kTypeArgumentsCid: return new (Z) TypeArgumentsSerializationCluster(); 4440 case kTypeArgumentsCid:
4460 case kPatchClassCid: return new (Z) PatchClassSerializationCluster(); 4441 return new (Z) TypeArgumentsSerializationCluster();
4461 case kFunctionCid: return new (Z) FunctionSerializationCluster(); 4442 case kPatchClassCid:
4462 case kClosureDataCid: return new (Z) ClosureDataSerializationCluster(); 4443 return new (Z) PatchClassSerializationCluster();
4444 case kFunctionCid:
4445 return new (Z) FunctionSerializationCluster();
4446 case kClosureDataCid:
4447 return new (Z) ClosureDataSerializationCluster();
4463 case kRedirectionDataCid: 4448 case kRedirectionDataCid:
4464 return new (Z) RedirectionDataSerializationCluster(); 4449 return new (Z) RedirectionDataSerializationCluster();
4465 case kFieldCid: return new (Z) FieldSerializationCluster(); 4450 case kFieldCid:
4466 case kLiteralTokenCid: return new (Z) LiteralTokenSerializationCluster(); 4451 return new (Z) FieldSerializationCluster();
4467 case kTokenStreamCid: return new (Z) TokenStreamSerializationCluster(); 4452 case kLiteralTokenCid:
4468 case kScriptCid: return new (Z) ScriptSerializationCluster(); 4453 return new (Z) LiteralTokenSerializationCluster();
4469 case kLibraryCid: return new (Z) LibrarySerializationCluster(); 4454 case kTokenStreamCid:
4470 case kNamespaceCid: return new (Z) NamespaceSerializationCluster(); 4455 return new (Z) TokenStreamSerializationCluster();
4471 case kCodeCid: return new (Z) CodeSerializationCluster(); 4456 case kScriptCid:
4472 case kObjectPoolCid: return new (Z) ObjectPoolSerializationCluster(); 4457 return new (Z) ScriptSerializationCluster();
4458 case kLibraryCid:
4459 return new (Z) LibrarySerializationCluster();
4460 case kNamespaceCid:
4461 return new (Z) NamespaceSerializationCluster();
4462 case kCodeCid:
4463 return new (Z) CodeSerializationCluster();
4464 case kObjectPoolCid:
4465 return new (Z) ObjectPoolSerializationCluster();
4473 case kPcDescriptorsCid: 4466 case kPcDescriptorsCid:
4474 return new (Z) RODataSerializationCluster(kPcDescriptorsCid); 4467 return new (Z) RODataSerializationCluster(kPcDescriptorsCid);
4475 case kStackmapCid: 4468 case kStackmapCid:
4476 return new (Z) RODataSerializationCluster(kStackmapCid); 4469 return new (Z) RODataSerializationCluster(kStackmapCid);
4477 case kExceptionHandlersCid: 4470 case kExceptionHandlersCid:
4478 return new (Z) ExceptionHandlersSerializationCluster(); 4471 return new (Z) ExceptionHandlersSerializationCluster();
4479 case kContextCid: return new (Z) ContextSerializationCluster(); 4472 case kContextCid:
4480 case kContextScopeCid: return new (Z) ContextScopeSerializationCluster(); 4473 return new (Z) ContextSerializationCluster();
4481 case kUnlinkedCallCid: return new (Z) UnlinkedCallSerializationCluster(); 4474 case kContextScopeCid:
4482 case kICDataCid: return new (Z) ICDataSerializationCluster(); 4475 return new (Z) ContextScopeSerializationCluster();
4476 case kUnlinkedCallCid:
4477 return new (Z) UnlinkedCallSerializationCluster();
4478 case kICDataCid:
4479 return new (Z) ICDataSerializationCluster();
4483 case kMegamorphicCacheCid: 4480 case kMegamorphicCacheCid:
4484 return new (Z) MegamorphicCacheSerializationCluster(); 4481 return new (Z) MegamorphicCacheSerializationCluster();
4485 case kSubtypeTestCacheCid: 4482 case kSubtypeTestCacheCid:
4486 return new (Z) SubtypeTestCacheSerializationCluster(); 4483 return new (Z) SubtypeTestCacheSerializationCluster();
4487 case kLanguageErrorCid: 4484 case kLanguageErrorCid:
4488 return new (Z) LanguageErrorSerializationCluster(); 4485 return new (Z) LanguageErrorSerializationCluster();
4489 case kUnhandledExceptionCid: 4486 case kUnhandledExceptionCid:
4490 return new (Z) UnhandledExceptionSerializationCluster(); 4487 return new (Z) UnhandledExceptionSerializationCluster();
4491 case kLibraryPrefixCid: return new (Z) LibraryPrefixSerializationCluster(); 4488 case kLibraryPrefixCid:
4492 case kTypeCid: return new (Z) TypeSerializationCluster(); 4489 return new (Z) LibraryPrefixSerializationCluster();
4493 case kTypeRefCid: return new (Z) TypeRefSerializationCluster(); 4490 case kTypeCid:
4494 case kTypeParameterCid: return new (Z) TypeParameterSerializationCluster(); 4491 return new (Z) TypeSerializationCluster();
4495 case kBoundedTypeCid: return new (Z) BoundedTypeSerializationCluster(); 4492 case kTypeRefCid:
4496 case kClosureCid: return new (Z) ClosureSerializationCluster(); 4493 return new (Z) TypeRefSerializationCluster();
4497 case kMintCid: return new (Z) MintSerializationCluster(); 4494 case kTypeParameterCid:
4498 case kBigintCid: return new (Z) BigintSerializationCluster(); 4495 return new (Z) TypeParameterSerializationCluster();
4499 case kDoubleCid: return new (Z) DoubleSerializationCluster(); 4496 case kBoundedTypeCid:
4497 return new (Z) BoundedTypeSerializationCluster();
4498 case kClosureCid:
4499 return new (Z) ClosureSerializationCluster();
4500 case kMintCid:
4501 return new (Z) MintSerializationCluster();
4502 case kBigintCid:
4503 return new (Z) BigintSerializationCluster();
4504 case kDoubleCid:
4505 return new (Z) DoubleSerializationCluster();
4500 case kGrowableObjectArrayCid: 4506 case kGrowableObjectArrayCid:
4501 return new (Z) GrowableObjectArraySerializationCluster(); 4507 return new (Z) GrowableObjectArraySerializationCluster();
4502 case kStacktraceCid: return new (Z) StacktraceSerializationCluster(); 4508 case kStacktraceCid:
4503 case kRegExpCid: return new (Z) RegExpSerializationCluster(); 4509 return new (Z) StacktraceSerializationCluster();
4504 case kWeakPropertyCid: return new (Z) WeakPropertySerializationCluster(); 4510 case kRegExpCid:
4505 case kLinkedHashMapCid: return new (Z) LinkedHashMapSerializationCluster(); 4511 return new (Z) RegExpSerializationCluster();
4512 case kWeakPropertyCid:
4513 return new (Z) WeakPropertySerializationCluster();
4514 case kLinkedHashMapCid:
4515 return new (Z) LinkedHashMapSerializationCluster();
4506 case kArrayCid: 4516 case kArrayCid:
4507 return new (Z) ArraySerializationCluster(kArrayCid); 4517 return new (Z) ArraySerializationCluster(kArrayCid);
4508 case kImmutableArrayCid: 4518 case kImmutableArrayCid:
4509 return new (Z) ArraySerializationCluster(kImmutableArrayCid); 4519 return new (Z) ArraySerializationCluster(kImmutableArrayCid);
4510 case kOneByteStringCid: { 4520 case kOneByteStringCid: {
4511 if (Snapshot::IncludesCode(kind_)) { 4521 if (Snapshot::IncludesCode(kind_)) {
4512 return new (Z) RODataSerializationCluster(kOneByteStringCid); 4522 return new (Z) RODataSerializationCluster(kOneByteStringCid);
4513 } else { 4523 } else {
4514 return new (Z) OneByteStringSerializationCluster(); 4524 return new (Z) OneByteStringSerializationCluster();
4515 } 4525 }
4516 } 4526 }
4517 case kTwoByteStringCid: { 4527 case kTwoByteStringCid: {
4518 if (Snapshot::IncludesCode(kind_)) { 4528 if (Snapshot::IncludesCode(kind_)) {
4519 return new (Z) RODataSerializationCluster(kTwoByteStringCid); 4529 return new (Z) RODataSerializationCluster(kTwoByteStringCid);
4520 } else { 4530 } else {
4521 return new (Z) TwoByteStringSerializationCluster(); 4531 return new (Z) TwoByteStringSerializationCluster();
4522 } 4532 }
4523 } 4533 }
4524 default: break; 4534 default:
4535 break;
4525 } 4536 }
4526 4537
4527 FATAL1("No cluster defined for cid %" Pd, cid); 4538 FATAL1("No cluster defined for cid %" Pd, cid);
4528 return NULL; 4539 return NULL;
4529 #endif // !DART_PRECOMPILED_RUNTIME 4540 #endif // !DART_PRECOMPILED_RUNTIME
4530 } 4541 }
4531 4542
4532 4543
4533 void Serializer::Trace(RawObject* object) { 4544 void Serializer::Trace(RawObject* object) {
4534 intptr_t cid; 4545 intptr_t cid;
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
4757 4768
4758 Deserializer::~Deserializer() { 4769 Deserializer::~Deserializer() {
4759 delete[] clusters_; 4770 delete[] clusters_;
4760 } 4771 }
4761 4772
4762 4773
4763 DeserializationCluster* Deserializer::ReadCluster() { 4774 DeserializationCluster* Deserializer::ReadCluster() {
4764 intptr_t cid = ReadCid(); 4775 intptr_t cid = ReadCid();
4765 4776
4766 Zone* Z = zone_; 4777 Zone* Z = zone_;
4767 if ((cid >= kNumPredefinedCids) || 4778 if ((cid >= kNumPredefinedCids) || (cid == kInstanceCid) ||
4768 (cid == kInstanceCid) ||
4769 RawObject::IsTypedDataViewClassId(cid)) { 4779 RawObject::IsTypedDataViewClassId(cid)) {
4770 return new (Z) InstanceDeserializationCluster(cid); 4780 return new (Z) InstanceDeserializationCluster(cid);
4771 } 4781 }
4772 if (RawObject::IsExternalTypedDataClassId(cid)) { 4782 if (RawObject::IsExternalTypedDataClassId(cid)) {
4773 return new (Z) ExternalTypedDataDeserializationCluster(cid); 4783 return new (Z) ExternalTypedDataDeserializationCluster(cid);
4774 } 4784 }
4775 if (RawObject::IsTypedDataClassId(cid)) { 4785 if (RawObject::IsTypedDataClassId(cid)) {
4776 return new (Z) TypedDataDeserializationCluster(cid); 4786 return new (Z) TypedDataDeserializationCluster(cid);
4777 } 4787 }
4778 4788
4779 switch (cid) { 4789 switch (cid) {
4780 case kClassCid: return new (Z) ClassDeserializationCluster(); 4790 case kClassCid:
4791 return new (Z) ClassDeserializationCluster();
4781 case kUnresolvedClassCid: 4792 case kUnresolvedClassCid:
4782 return new (Z) UnresolvedClassDeserializationCluster(); 4793 return new (Z) UnresolvedClassDeserializationCluster();
4783 case kTypeArgumentsCid: 4794 case kTypeArgumentsCid:
4784 return new (Z) TypeArgumentsDeserializationCluster(); 4795 return new (Z) TypeArgumentsDeserializationCluster();
4785 case kPatchClassCid: return new (Z) PatchClassDeserializationCluster(); 4796 case kPatchClassCid:
4786 case kFunctionCid: return new (Z) FunctionDeserializationCluster(); 4797 return new (Z) PatchClassDeserializationCluster();
4787 case kClosureDataCid: return new (Z) ClosureDataDeserializationCluster(); 4798 case kFunctionCid:
4799 return new (Z) FunctionDeserializationCluster();
4800 case kClosureDataCid:
4801 return new (Z) ClosureDataDeserializationCluster();
4788 case kRedirectionDataCid: 4802 case kRedirectionDataCid:
4789 return new (Z) RedirectionDataDeserializationCluster(); 4803 return new (Z) RedirectionDataDeserializationCluster();
4790 case kFieldCid: return new (Z) FieldDeserializationCluster(); 4804 case kFieldCid:
4791 case kLiteralTokenCid: return new (Z) LiteralTokenDeserializationCluster(); 4805 return new (Z) FieldDeserializationCluster();
4792 case kTokenStreamCid: return new (Z) TokenStreamDeserializationCluster(); 4806 case kLiteralTokenCid:
4793 case kScriptCid: return new (Z) ScriptDeserializationCluster(); 4807 return new (Z) LiteralTokenDeserializationCluster();
4794 case kLibraryCid: return new (Z) LibraryDeserializationCluster(); 4808 case kTokenStreamCid:
4795 case kNamespaceCid: return new (Z) NamespaceDeserializationCluster(); 4809 return new (Z) TokenStreamDeserializationCluster();
4796 case kCodeCid: return new (Z) CodeDeserializationCluster(); 4810 case kScriptCid:
4797 case kObjectPoolCid: return new (Z) ObjectPoolDeserializationCluster(); 4811 return new (Z) ScriptDeserializationCluster();
4812 case kLibraryCid:
4813 return new (Z) LibraryDeserializationCluster();
4814 case kNamespaceCid:
4815 return new (Z) NamespaceDeserializationCluster();
4816 case kCodeCid:
4817 return new (Z) CodeDeserializationCluster();
4818 case kObjectPoolCid:
4819 return new (Z) ObjectPoolDeserializationCluster();
4798 case kPcDescriptorsCid: 4820 case kPcDescriptorsCid:
4799 case kStackmapCid: 4821 case kStackmapCid:
4800 return new (Z) RODataDeserializationCluster(); 4822 return new (Z) RODataDeserializationCluster();
4801 case kExceptionHandlersCid: 4823 case kExceptionHandlersCid:
4802 return new (Z) ExceptionHandlersDeserializationCluster(); 4824 return new (Z) ExceptionHandlersDeserializationCluster();
4803 case kContextCid: return new (Z) ContextDeserializationCluster(); 4825 case kContextCid:
4804 case kContextScopeCid: return new (Z) ContextScopeDeserializationCluster(); 4826 return new (Z) ContextDeserializationCluster();
4805 case kUnlinkedCallCid: return new (Z) UnlinkedCallDeserializationCluster(); 4827 case kContextScopeCid:
4806 case kICDataCid: return new (Z) ICDataDeserializationCluster(); 4828 return new (Z) ContextScopeDeserializationCluster();
4829 case kUnlinkedCallCid:
4830 return new (Z) UnlinkedCallDeserializationCluster();
4831 case kICDataCid:
4832 return new (Z) ICDataDeserializationCluster();
4807 case kMegamorphicCacheCid: 4833 case kMegamorphicCacheCid:
4808 return new (Z) MegamorphicCacheDeserializationCluster(); 4834 return new (Z) MegamorphicCacheDeserializationCluster();
4809 case kSubtypeTestCacheCid: 4835 case kSubtypeTestCacheCid:
4810 return new (Z) SubtypeTestCacheDeserializationCluster(); 4836 return new (Z) SubtypeTestCacheDeserializationCluster();
4811 case kLanguageErrorCid: 4837 case kLanguageErrorCid:
4812 return new (Z) LanguageErrorDeserializationCluster(); 4838 return new (Z) LanguageErrorDeserializationCluster();
4813 case kUnhandledExceptionCid: 4839 case kUnhandledExceptionCid:
4814 return new (Z) UnhandledExceptionDeserializationCluster(); 4840 return new (Z) UnhandledExceptionDeserializationCluster();
4815 case kLibraryPrefixCid: 4841 case kLibraryPrefixCid:
4816 return new (Z) LibraryPrefixDeserializationCluster(); 4842 return new (Z) LibraryPrefixDeserializationCluster();
4817 case kTypeCid: return new (Z) TypeDeserializationCluster(); 4843 case kTypeCid:
4818 case kTypeRefCid: return new (Z) TypeRefDeserializationCluster(); 4844 return new (Z) TypeDeserializationCluster();
4845 case kTypeRefCid:
4846 return new (Z) TypeRefDeserializationCluster();
4819 case kTypeParameterCid: 4847 case kTypeParameterCid:
4820 return new (Z) TypeParameterDeserializationCluster(); 4848 return new (Z) TypeParameterDeserializationCluster();
4821 case kBoundedTypeCid: return new (Z) BoundedTypeDeserializationCluster(); 4849 case kBoundedTypeCid:
4822 case kClosureCid: return new (Z) ClosureDeserializationCluster(); 4850 return new (Z) BoundedTypeDeserializationCluster();
4823 case kMintCid: return new (Z) MintDeserializationCluster(); 4851 case kClosureCid:
4824 case kBigintCid: return new (Z) BigintDeserializationCluster(); 4852 return new (Z) ClosureDeserializationCluster();
4825 case kDoubleCid: return new (Z) DoubleDeserializationCluster(); 4853 case kMintCid:
4854 return new (Z) MintDeserializationCluster();
4855 case kBigintCid:
4856 return new (Z) BigintDeserializationCluster();
4857 case kDoubleCid:
4858 return new (Z) DoubleDeserializationCluster();
4826 case kGrowableObjectArrayCid: 4859 case kGrowableObjectArrayCid:
4827 return new (Z) GrowableObjectArrayDeserializationCluster(); 4860 return new (Z) GrowableObjectArrayDeserializationCluster();
4828 case kStacktraceCid: return new (Z) StacktraceDeserializationCluster(); 4861 case kStacktraceCid:
4829 case kRegExpCid: return new (Z) RegExpDeserializationCluster(); 4862 return new (Z) StacktraceDeserializationCluster();
4830 case kWeakPropertyCid: return new (Z) WeakPropertyDeserializationCluster(); 4863 case kRegExpCid:
4864 return new (Z) RegExpDeserializationCluster();
4865 case kWeakPropertyCid:
4866 return new (Z) WeakPropertyDeserializationCluster();
4831 case kLinkedHashMapCid: 4867 case kLinkedHashMapCid:
4832 return new (Z) LinkedHashMapDeserializationCluster(); 4868 return new (Z) LinkedHashMapDeserializationCluster();
4833 case kArrayCid: 4869 case kArrayCid:
4834 return new (Z) ArrayDeserializationCluster(kArrayCid); 4870 return new (Z) ArrayDeserializationCluster(kArrayCid);
4835 case kImmutableArrayCid: 4871 case kImmutableArrayCid:
4836 return new (Z) ArrayDeserializationCluster(kImmutableArrayCid); 4872 return new (Z) ArrayDeserializationCluster(kImmutableArrayCid);
4837 case kOneByteStringCid: { 4873 case kOneByteStringCid: {
4838 if (Snapshot::IncludesCode(kind_)) { 4874 if (Snapshot::IncludesCode(kind_)) {
4839 return new (Z) RODataDeserializationCluster(); 4875 return new (Z) RODataDeserializationCluster();
4840 } else { 4876 } else {
4841 return new (Z) OneByteStringDeserializationCluster(); 4877 return new (Z) OneByteStringDeserializationCluster();
4842 } 4878 }
4843 } 4879 }
4844 case kTwoByteStringCid: { 4880 case kTwoByteStringCid: {
4845 if (Snapshot::IncludesCode(kind_)) { 4881 if (Snapshot::IncludesCode(kind_)) {
4846 return new (Z) RODataDeserializationCluster(); 4882 return new (Z) RODataDeserializationCluster();
4847 } else { 4883 } else {
4848 return new (Z) TwoByteStringDeserializationCluster(); 4884 return new (Z) TwoByteStringDeserializationCluster();
4849 } 4885 }
4850 } 4886 }
4851 default: break; 4887 default:
4888 break;
4852 } 4889 }
4853 FATAL1("No cluster defined for cid %" Pd, cid); 4890 FATAL1("No cluster defined for cid %" Pd, cid);
4854 return NULL; 4891 return NULL;
4855 } 4892 }
4856 4893
4857 4894
4858 RawApiError* Deserializer::VerifyVersionAndFeatures() { 4895 RawApiError* Deserializer::VerifyVersionAndFeatures() {
4859 // If the version string doesn't match, return an error. 4896 // If the version string doesn't match, return an error.
4860 // Note: New things are allocated only if we're going to return an error. 4897 // Note: New things are allocated only if we're going to return an error.
4861 4898
4862 const char* expected_version = Version::SnapshotString(); 4899 const char* expected_version = Version::SnapshotString();
4863 ASSERT(expected_version != NULL); 4900 ASSERT(expected_version != NULL);
4864 const intptr_t version_len = strlen(expected_version); 4901 const intptr_t version_len = strlen(expected_version);
4865 if (PendingBytes() < version_len) { 4902 if (PendingBytes() < version_len) {
4866 const intptr_t kMessageBufferSize = 128; 4903 const intptr_t kMessageBufferSize = 128;
4867 char message_buffer[kMessageBufferSize]; 4904 char message_buffer[kMessageBufferSize];
4868 OS::SNPrint(message_buffer, 4905 OS::SNPrint(message_buffer, kMessageBufferSize,
4869 kMessageBufferSize,
4870 "No full snapshot version found, expected '%s'", 4906 "No full snapshot version found, expected '%s'",
4871 expected_version); 4907 expected_version);
4872 // This can also fail while bringing up the VM isolate, so make sure to 4908 // This can also fail while bringing up the VM isolate, so make sure to
4873 // allocate the error message in old space. 4909 // allocate the error message in old space.
4874 const String& msg = String::Handle(String::New(message_buffer, Heap::kOld)); 4910 const String& msg = String::Handle(String::New(message_buffer, Heap::kOld));
4875 return ApiError::New(msg, Heap::kOld); 4911 return ApiError::New(msg, Heap::kOld);
4876 } 4912 }
4877 4913
4878 const char* version = reinterpret_cast<const char*>(CurrentBufferAddress()); 4914 const char* version = reinterpret_cast<const char*>(CurrentBufferAddress());
4879 ASSERT(version != NULL); 4915 ASSERT(version != NULL);
4880 if (strncmp(version, expected_version, version_len)) { 4916 if (strncmp(version, expected_version, version_len)) {
4881 const intptr_t kMessageBufferSize = 256; 4917 const intptr_t kMessageBufferSize = 256;
4882 char message_buffer[kMessageBufferSize]; 4918 char message_buffer[kMessageBufferSize];
4883 char* actual_version = OS::StrNDup(version, version_len); 4919 char* actual_version = OS::StrNDup(version, version_len);
4884 OS::SNPrint(message_buffer, 4920 OS::SNPrint(message_buffer, kMessageBufferSize,
4885 kMessageBufferSize,
4886 "Wrong %s snapshot version, expected '%s' found '%s'", 4921 "Wrong %s snapshot version, expected '%s' found '%s'",
4887 (Snapshot::IsFull(kind_)) ? "full" : "script", 4922 (Snapshot::IsFull(kind_)) ? "full" : "script", expected_version,
4888 expected_version,
4889 actual_version); 4923 actual_version);
4890 free(actual_version); 4924 free(actual_version);
4891 // This can also fail while bringing up the VM isolate, so make sure to 4925 // This can also fail while bringing up the VM isolate, so make sure to
4892 // allocate the error message in old space. 4926 // allocate the error message in old space.
4893 const String& msg = String::Handle(String::New(message_buffer, Heap::kOld)); 4927 const String& msg = String::Handle(String::New(message_buffer, Heap::kOld));
4894 return ApiError::New(msg, Heap::kOld); 4928 return ApiError::New(msg, Heap::kOld);
4895 } 4929 }
4896 Advance(version_len); 4930 Advance(version_len);
4897 4931
4898 const char* expected_features = Dart::FeaturesString(kind_); 4932 const char* expected_features = Dart::FeaturesString(kind_);
4899 ASSERT(expected_features != NULL); 4933 ASSERT(expected_features != NULL);
4900 const intptr_t expected_len = strlen(expected_features); 4934 const intptr_t expected_len = strlen(expected_features);
4901 4935
4902 const char* features = reinterpret_cast<const char*>(CurrentBufferAddress()); 4936 const char* features = reinterpret_cast<const char*>(CurrentBufferAddress());
4903 ASSERT(features != NULL); 4937 ASSERT(features != NULL);
4904 intptr_t buffer_len = OS::StrNLen(features, PendingBytes()); 4938 intptr_t buffer_len = OS::StrNLen(features, PendingBytes());
4905 if ((buffer_len != expected_len) || 4939 if ((buffer_len != expected_len) ||
4906 strncmp(features, expected_features, expected_len)) { 4940 strncmp(features, expected_features, expected_len)) {
4907 const intptr_t kMessageBufferSize = 256; 4941 const intptr_t kMessageBufferSize = 256;
4908 char message_buffer[kMessageBufferSize]; 4942 char message_buffer[kMessageBufferSize];
4909 char* actual_features = OS::StrNDup(features, buffer_len < 128 ? buffer_len 4943 char* actual_features =
4910 : 128); 4944 OS::StrNDup(features, buffer_len < 128 ? buffer_len : 128);
4911 OS::SNPrint(message_buffer, 4945 OS::SNPrint(message_buffer, kMessageBufferSize,
4912 kMessageBufferSize,
4913 "Wrong features in snapshot, expected '%s' found '%s'", 4946 "Wrong features in snapshot, expected '%s' found '%s'",
4914 expected_features, 4947 expected_features, actual_features);
4915 actual_features);
4916 free(const_cast<char*>(expected_features)); 4948 free(const_cast<char*>(expected_features));
4917 free(actual_features); 4949 free(actual_features);
4918 // This can also fail while bringing up the VM isolate, so make sure to 4950 // This can also fail while bringing up the VM isolate, so make sure to
4919 // allocate the error message in old space. 4951 // allocate the error message in old space.
4920 const String& msg = String::Handle(String::New(message_buffer, Heap::kOld)); 4952 const String& msg = String::Handle(String::New(message_buffer, Heap::kOld));
4921 return ApiError::New(msg, Heap::kOld); 4953 return ApiError::New(msg, Heap::kOld);
4922 } 4954 }
4923 free(const_cast<char*>(expected_features)); 4955 free(const_cast<char*>(expected_features));
4924 Advance(expected_len + 1); 4956 Advance(expected_len + 1);
4925 return ApiError::null(); 4957 return ApiError::null();
4926 } 4958 }
4927 4959
4928 4960
4929 void Deserializer::Prepare() { 4961 void Deserializer::Prepare() {
4930 num_objects_ = Read<int32_t>(); 4962 num_objects_ = Read<int32_t>();
4931 num_clusters_ = Read<int32_t>(); 4963 num_clusters_ = Read<int32_t>();
4932 4964
4933 clusters_ = new DeserializationCluster*[num_clusters_]; 4965 clusters_ = new DeserializationCluster*[num_clusters_];
4934 refs_ = Array::New(num_objects_ + 1, Heap::kOld); 4966 refs_ = Array::New(num_objects_ + 1, Heap::kOld);
4935 } 4967 }
4936 4968
4937 4969
4938 void Deserializer::Deserialize() { 4970 void Deserializer::Deserialize() {
4939 // TODO(rmacnak): Verify num of base objects. 4971 // TODO(rmacnak): Verify num of base objects.
4940 4972
4941 { 4973 {
4942 NOT_IN_PRODUCT(TimelineDurationScope tds(thread(), 4974 NOT_IN_PRODUCT(TimelineDurationScope tds(
4943 Timeline::GetIsolateStream(), "ReadAlloc")); 4975 thread(), Timeline::GetIsolateStream(), "ReadAlloc"));
4944 for (intptr_t i = 0; i < num_clusters_; i++) { 4976 for (intptr_t i = 0; i < num_clusters_; i++) {
4945 clusters_[i] = ReadCluster(); 4977 clusters_[i] = ReadCluster();
4946 clusters_[i]->ReadAlloc(this); 4978 clusters_[i]->ReadAlloc(this);
4947 #if defined(DEBUG) 4979 #if defined(DEBUG)
4948 intptr_t serializers_next_ref_index_ = Read<int32_t>(); 4980 intptr_t serializers_next_ref_index_ = Read<int32_t>();
4949 ASSERT(serializers_next_ref_index_ == next_ref_index_); 4981 ASSERT(serializers_next_ref_index_ == next_ref_index_);
4950 #endif 4982 #endif
4951 } 4983 }
4952 } 4984 }
4953 4985
4954 // We should have completely filled the ref array. 4986 // We should have completely filled the ref array.
4955 ASSERT((next_ref_index_ - 1) == num_objects_); 4987 ASSERT((next_ref_index_ - 1) == num_objects_);
4956 4988
4957 { 4989 {
4958 NOT_IN_PRODUCT(TimelineDurationScope tds(thread(), 4990 NOT_IN_PRODUCT(TimelineDurationScope tds(
4959 Timeline::GetIsolateStream(), "ReadFill")); 4991 thread(), Timeline::GetIsolateStream(), "ReadFill"));
4960 for (intptr_t i = 0; i < num_clusters_; i++) { 4992 for (intptr_t i = 0; i < num_clusters_; i++) {
4961 clusters_[i]->ReadFill(this); 4993 clusters_[i]->ReadFill(this);
4962 #if defined(DEBUG) 4994 #if defined(DEBUG)
4963 int32_t section_marker = Read<int32_t>(); 4995 int32_t section_marker = Read<int32_t>();
4964 ASSERT(section_marker == kSectionMarker); 4996 ASSERT(section_marker == kSectionMarker);
4965 #endif 4997 #endif
4966 } 4998 }
4967 } 4999 }
4968 } 5000 }
4969 5001
4970 class HeapLocker : public StackResource { 5002 class HeapLocker : public StackResource {
4971 public: 5003 public:
4972 HeapLocker(Thread* thread, PageSpace* page_space) 5004 HeapLocker(Thread* thread, PageSpace* page_space)
4973 : StackResource(thread), page_space_(page_space) { 5005 : StackResource(thread), page_space_(page_space) {
4974 page_space_->AcquireDataLock(); 5006 page_space_->AcquireDataLock();
4975 } 5007 }
4976 ~HeapLocker() { 5008 ~HeapLocker() { page_space_->ReleaseDataLock(); }
4977 page_space_->ReleaseDataLock();
4978 }
4979 5009
4980 private: 5010 private:
4981 PageSpace* page_space_; 5011 PageSpace* page_space_;
4982 }; 5012 };
4983 5013
4984 5014
4985 void Deserializer::AddVMIsolateBaseObjects() { 5015 void Deserializer::AddVMIsolateBaseObjects() {
4986 // These objects are always allocated by Object::InitOnce, so they are not 5016 // These objects are always allocated by Object::InitOnce, so they are not
4987 // written into the snapshot. 5017 // written into the snapshot.
4988 5018
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
5093 refs_ = NULL; 5123 refs_ = NULL;
5094 } 5124 }
5095 5125
5096 #if defined(DEBUG) 5126 #if defined(DEBUG)
5097 Isolate* isolate = thread()->isolate(); 5127 Isolate* isolate = thread()->isolate();
5098 isolate->ValidateClassTable(); 5128 isolate->ValidateClassTable();
5099 isolate->heap()->Verify(); 5129 isolate->heap()->Verify();
5100 #endif 5130 #endif
5101 5131
5102 { 5132 {
5103 NOT_IN_PRODUCT(TimelineDurationScope tds(thread(), 5133 NOT_IN_PRODUCT(TimelineDurationScope tds(
5104 Timeline::GetIsolateStream(), "PostLoad")); 5134 thread(), Timeline::GetIsolateStream(), "PostLoad"));
5105 for (intptr_t i = 0; i < num_clusters_; i++) { 5135 for (intptr_t i = 0; i < num_clusters_; i++) {
5106 clusters_[i]->PostLoad(refs, kind_, zone_); 5136 clusters_[i]->PostLoad(refs, kind_, zone_);
5107 } 5137 }
5108 } 5138 }
5109 5139
5110 // Setup native resolver for bootstrap impl. 5140 // Setup native resolver for bootstrap impl.
5111 Bootstrap::SetupNativeResolver(); 5141 Bootstrap::SetupNativeResolver();
5112 } 5142 }
5113 5143
5114 5144
5115 // An object visitor which will iterate over all the token stream objects in the 5145 // An object visitor which will iterate over all the token stream objects in the
5116 // heap and either count them or collect them into an array. This is used during 5146 // heap and either count them or collect them into an array. This is used during
5117 // full snapshot generation of the VM isolate to write out all token streams so 5147 // full snapshot generation of the VM isolate to write out all token streams so
5118 // they will be shared across all isolates. 5148 // they will be shared across all isolates.
5119 class SnapshotTokenStreamVisitor : public ObjectVisitor { 5149 class SnapshotTokenStreamVisitor : public ObjectVisitor {
5120 public: 5150 public:
5121 explicit SnapshotTokenStreamVisitor(Thread* thread) : 5151 explicit SnapshotTokenStreamVisitor(Thread* thread)
5122 objHandle_(Object::Handle(thread->zone())), 5152 : objHandle_(Object::Handle(thread->zone())),
5123 count_(0), 5153 count_(0),
5124 token_streams_(NULL) {} 5154 token_streams_(NULL) {}
5125 5155
5126 SnapshotTokenStreamVisitor(Thread* thread, const Array* token_streams) : 5156 SnapshotTokenStreamVisitor(Thread* thread, const Array* token_streams)
5127 objHandle_(Object::Handle(thread->zone())), 5157 : objHandle_(Object::Handle(thread->zone())),
5128 count_(0), 5158 count_(0),
5129 token_streams_(token_streams) {} 5159 token_streams_(token_streams) {}
5130 5160
5131 void VisitObject(RawObject* obj) { 5161 void VisitObject(RawObject* obj) {
5132 if (obj->IsTokenStream()) { 5162 if (obj->IsTokenStream()) {
5133 if (token_streams_ != NULL) { 5163 if (token_streams_ != NULL) {
5134 objHandle_ = obj; 5164 objHandle_ = obj;
5135 token_streams_->SetAt(count_, objHandle_); 5165 token_streams_->SetAt(count_, objHandle_);
5136 } 5166 }
5137 count_ += 1; 5167 count_ += 1;
5138 } 5168 }
5139 } 5169 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
5173 ASSERT(object_store != NULL); 5203 ASSERT(object_store != NULL);
5174 5204
5175 #if defined(DEBUG) 5205 #if defined(DEBUG)
5176 // Ensure the class table is valid. 5206 // Ensure the class table is valid.
5177 isolate()->ValidateClassTable(); 5207 isolate()->ValidateClassTable();
5178 #endif 5208 #endif
5179 // Can't have any mutation happening while we're serializing. 5209 // Can't have any mutation happening while we're serializing.
5180 ASSERT(isolate()->background_compiler() == NULL); 5210 ASSERT(isolate()->background_compiler() == NULL);
5181 5211
5182 if (vm_isolate_snapshot_buffer != NULL) { 5212 if (vm_isolate_snapshot_buffer != NULL) {
5183 NOT_IN_PRODUCT(TimelineDurationScope tds(thread(), 5213 NOT_IN_PRODUCT(TimelineDurationScope tds(
5184 Timeline::GetIsolateStream(), "PrepareNewVMIsolate")); 5214 thread(), Timeline::GetIsolateStream(), "PrepareNewVMIsolate"));
5185 5215
5186 // Collect all the token stream objects into an array so that we can write 5216 // Collect all the token stream objects into an array so that we can write
5187 // it out as part of the VM isolate snapshot. We first count the number of 5217 // it out as part of the VM isolate snapshot. We first count the number of
5188 // token streams, allocate an array and then fill it up with the token 5218 // token streams, allocate an array and then fill it up with the token
5189 // streams. 5219 // streams.
5190 SnapshotTokenStreamVisitor token_streams_counter(thread()); 5220 SnapshotTokenStreamVisitor token_streams_counter(thread());
5191 heap()->IterateOldObjects(&token_streams_counter); 5221 heap()->IterateOldObjects(&token_streams_counter);
5192 Dart::vm_isolate()->heap()->IterateOldObjects(&token_streams_counter); 5222 Dart::vm_isolate()->heap()->IterateOldObjects(&token_streams_counter);
5193 intptr_t count = token_streams_counter.count(); 5223 intptr_t count = token_streams_counter.count();
5194 token_streams_ = Array::New(count, Heap::kOld); 5224 token_streams_ = Array::New(count, Heap::kOld);
(...skipping 22 matching lines...) Expand all
5217 if (!saved_symbol_table_.IsNull()) { 5247 if (!saved_symbol_table_.IsNull()) {
5218 isolate()->object_store()->set_symbol_table(saved_symbol_table_); 5248 isolate()->object_store()->set_symbol_table(saved_symbol_table_);
5219 saved_symbol_table_ = Array::null(); 5249 saved_symbol_table_ = Array::null();
5220 } 5250 }
5221 new_vm_symbol_table_ = Array::null(); 5251 new_vm_symbol_table_ = Array::null();
5222 token_streams_ = Array::null(); 5252 token_streams_ = Array::null();
5223 } 5253 }
5224 5254
5225 5255
5226 intptr_t FullSnapshotWriter::WriteVmIsolateSnapshot() { 5256 intptr_t FullSnapshotWriter::WriteVmIsolateSnapshot() {
5227 NOT_IN_PRODUCT(TimelineDurationScope tds(thread(), 5257 NOT_IN_PRODUCT(TimelineDurationScope tds(
5228 Timeline::GetIsolateStream(), "WriteVmIsolateSnapshot")); 5258 thread(), Timeline::GetIsolateStream(), "WriteVmIsolateSnapshot"));
5229 5259
5230 ASSERT(vm_isolate_snapshot_buffer_ != NULL); 5260 ASSERT(vm_isolate_snapshot_buffer_ != NULL);
5231 Serializer serializer(thread(), 5261 Serializer serializer(thread(), kind_, vm_isolate_snapshot_buffer_, alloc_,
5232 kind_, 5262 kInitialSize, instructions_writer_);
5233 vm_isolate_snapshot_buffer_,
5234 alloc_,
5235 kInitialSize,
5236 instructions_writer_);
5237 5263
5238 serializer.ReserveHeader(); 5264 serializer.ReserveHeader();
5239 serializer.WriteVersionAndFeatures(); 5265 serializer.WriteVersionAndFeatures();
5240 /* 5266 /*
5241 * Now Write out the following 5267 * Now Write out the following
5242 * - the symbol table 5268 * - the symbol table
5243 * - all the token streams 5269 * - all the token streams
5244 * - the stub code (precompiled snapshots only) 5270 * - the stub code (precompiled snapshots only)
5245 **/ 5271 **/
5246 intptr_t num_objects = serializer.WriteVMSnapshot(new_vm_symbol_table_, 5272 intptr_t num_objects =
5247 token_streams_); 5273 serializer.WriteVMSnapshot(new_vm_symbol_table_, token_streams_);
5248 serializer.FillHeader(serializer.kind()); 5274 serializer.FillHeader(serializer.kind());
5249 5275
5250 vm_isolate_snapshot_size_ = serializer.bytes_written(); 5276 vm_isolate_snapshot_size_ = serializer.bytes_written();
5251 return num_objects; 5277 return num_objects;
5252 } 5278 }
5253 5279
5254 5280
5255 void FullSnapshotWriter::WriteIsolateFullSnapshot( 5281 void FullSnapshotWriter::WriteIsolateFullSnapshot(intptr_t num_base_objects) {
5256 intptr_t num_base_objects) { 5282 NOT_IN_PRODUCT(TimelineDurationScope tds(
5257 NOT_IN_PRODUCT(TimelineDurationScope tds(thread(), 5283 thread(), Timeline::GetIsolateStream(), "WriteIsolateFullSnapshot"));
5258 Timeline::GetIsolateStream(), "WriteIsolateFullSnapshot"));
5259 5284
5260 Serializer serializer(thread(), 5285 Serializer serializer(thread(), kind_, isolate_snapshot_buffer_, alloc_,
5261 kind_, 5286 kInitialSize, instructions_writer_);
5262 isolate_snapshot_buffer_,
5263 alloc_,
5264 kInitialSize,
5265 instructions_writer_);
5266 ObjectStore* object_store = isolate()->object_store(); 5287 ObjectStore* object_store = isolate()->object_store();
5267 ASSERT(object_store != NULL); 5288 ASSERT(object_store != NULL);
5268 5289
5269 serializer.ReserveHeader(); 5290 serializer.ReserveHeader();
5270 serializer.WriteVersionAndFeatures(); 5291 serializer.WriteVersionAndFeatures();
5271 serializer.WriteFullSnapshot(num_base_objects, object_store); 5292 serializer.WriteFullSnapshot(num_base_objects, object_store);
5272 serializer.FillHeader(serializer.kind()); 5293 serializer.FillHeader(serializer.kind());
5273 5294
5274 isolate_snapshot_size_ = serializer.bytes_written(); 5295 isolate_snapshot_size_ = serializer.bytes_written();
5275 } 5296 }
5276 5297
5277 5298
5278 void FullSnapshotWriter::WriteFullSnapshot() { 5299 void FullSnapshotWriter::WriteFullSnapshot() {
5279 intptr_t num_base_objects; 5300 intptr_t num_base_objects;
5280 if (vm_isolate_snapshot_buffer() != NULL) { 5301 if (vm_isolate_snapshot_buffer() != NULL) {
5281 num_base_objects = WriteVmIsolateSnapshot(); 5302 num_base_objects = WriteVmIsolateSnapshot();
5282 ASSERT(num_base_objects != 0); 5303 ASSERT(num_base_objects != 0);
5283 } else { 5304 } else {
5284 num_base_objects = 0; 5305 num_base_objects = 0;
5285 } 5306 }
5286 5307
5287 WriteIsolateFullSnapshot(num_base_objects); 5308 WriteIsolateFullSnapshot(num_base_objects);
5288 5309
5289 if (Snapshot::IncludesCode(kind_)) { 5310 if (Snapshot::IncludesCode(kind_)) {
5290 instructions_writer_->Write(*vm_isolate_snapshot_buffer_, 5311 instructions_writer_->Write(
5291 vm_isolate_snapshot_size_, 5312 *vm_isolate_snapshot_buffer_, vm_isolate_snapshot_size_,
5292 *isolate_snapshot_buffer_, 5313 *isolate_snapshot_buffer_, isolate_snapshot_size_);
5293 isolate_snapshot_size_);
5294 5314
5295 OS::Print("VMIsolate(CodeSize): %" Pd "\n", VmIsolateSnapshotSize()); 5315 OS::Print("VMIsolate(CodeSize): %" Pd "\n", VmIsolateSnapshotSize());
5296 OS::Print("Isolate(CodeSize): %" Pd "\n", IsolateSnapshotSize()); 5316 OS::Print("Isolate(CodeSize): %" Pd "\n", IsolateSnapshotSize());
5297 OS::Print("ReadOnlyData(CodeSize): %" Pd "\n", 5317 OS::Print("ReadOnlyData(CodeSize): %" Pd "\n",
5298 instructions_writer_->data_size()); 5318 instructions_writer_->data_size());
5299 OS::Print("Instructions(CodeSize): %" Pd "\n", 5319 OS::Print("Instructions(CodeSize): %" Pd "\n",
5300 instructions_writer_->text_size()); 5320 instructions_writer_->text_size());
5301 intptr_t total = VmIsolateSnapshotSize() + 5321 intptr_t total = VmIsolateSnapshotSize() + IsolateSnapshotSize() +
5302 IsolateSnapshotSize() +
5303 instructions_writer_->data_size() + 5322 instructions_writer_->data_size() +
5304 instructions_writer_->text_size(); 5323 instructions_writer_->text_size();
5305 OS::Print("Total(CodeSize): %" Pd "\n", total); 5324 OS::Print("Total(CodeSize): %" Pd "\n", total);
5306 } 5325 }
5307 } 5326 }
5308 5327
5309 5328
5310 RawApiError* IsolateSnapshotReader::ReadFullSnapshot() { 5329 RawApiError* IsolateSnapshotReader::ReadFullSnapshot() {
5311 Deserializer deserializer(thread_, 5330 Deserializer deserializer(thread_, kind_, buffer_, size_,
5312 kind_, 5331 instructions_buffer_, data_buffer_);
5313 buffer_,
5314 size_,
5315 instructions_buffer_,
5316 data_buffer_);
5317 5332
5318 RawApiError* error = deserializer.VerifyVersionAndFeatures(); 5333 RawApiError* error = deserializer.VerifyVersionAndFeatures();
5319 if (error != ApiError::null()) { 5334 if (error != ApiError::null()) {
5320 return error; 5335 return error;
5321 } 5336 }
5322 5337
5323 deserializer.ReadFullSnapshot(thread_->isolate()->object_store()); 5338 deserializer.ReadFullSnapshot(thread_->isolate()->object_store());
5324 5339
5325 return ApiError::null(); 5340 return ApiError::null();
5326 } 5341 }
5327 5342
5328 5343
5329 RawApiError* VmIsolateSnapshotReader::ReadVmIsolateSnapshot() { 5344 RawApiError* VmIsolateSnapshotReader::ReadVmIsolateSnapshot() {
5330 Deserializer deserializer(thread_, 5345 Deserializer deserializer(thread_, kind_, buffer_, size_,
5331 kind_, 5346 instructions_buffer_, data_buffer_);
5332 buffer_,
5333 size_,
5334 instructions_buffer_,
5335 data_buffer_);
5336 5347
5337 RawApiError* error = deserializer.VerifyVersionAndFeatures(); 5348 RawApiError* error = deserializer.VerifyVersionAndFeatures();
5338 if (error != ApiError::null()) { 5349 if (error != ApiError::null()) {
5339 return error; 5350 return error;
5340 } 5351 }
5341 5352
5342 deserializer.ReadVMSnapshot(); 5353 deserializer.ReadVMSnapshot();
5343 5354
5344 Dart::set_instructions_snapshot_buffer(instructions_buffer_); 5355 Dart::set_instructions_snapshot_buffer(instructions_buffer_);
5345 Dart::set_data_snapshot_buffer(data_buffer_); 5356 Dart::set_data_snapshot_buffer(data_buffer_);
5346 5357
5347 return ApiError::null(); 5358 return ApiError::null();
5348 } 5359 }
5349 5360
5350 } // namespace dart 5361 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/clustered_snapshot.h ('k') | runtime/vm/code_descriptors.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698