OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 #ifndef VM_SNAPSHOT_H_ | 5 #ifndef VM_SNAPSHOT_H_ |
6 #define VM_SNAPSHOT_H_ | 6 #define VM_SNAPSHOT_H_ |
7 | 7 |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/allocation.h" | 9 #include "vm/allocation.h" |
10 #include "vm/bitfield.h" | 10 #include "vm/bitfield.h" |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 Object* reference_; | 291 Object* reference_; |
292 DeserializeState state_; | 292 DeserializeState state_; |
293 bool defer_canonicalization_; | 293 bool defer_canonicalization_; |
294 ZoneGrowableArray<intptr_t>* patch_records_; | 294 ZoneGrowableArray<intptr_t>* patch_records_; |
295 }; | 295 }; |
296 | 296 |
297 | 297 |
298 // Reads a snapshot into objects. | 298 // Reads a snapshot into objects. |
299 class SnapshotReader : public BaseReader { | 299 class SnapshotReader : public BaseReader { |
300 public: | 300 public: |
| 301 Thread* thread() const { return thread_; } |
301 Zone* zone() const { return zone_; } | 302 Zone* zone() const { return zone_; } |
302 Isolate* isolate() const { return isolate_; } | 303 Isolate* isolate() const { return thread_->isolate(); } |
303 Heap* heap() const { return heap_; } | 304 Heap* heap() const { return heap_; } |
304 ObjectStore* object_store() const { return isolate_->object_store(); } | 305 ObjectStore* object_store() const { return isolate()->object_store(); } |
305 ClassTable* class_table() const { return isolate_->class_table(); } | 306 ClassTable* class_table() const { return isolate()->class_table(); } |
306 PassiveObject* PassiveObjectHandle() { return &pobj_; } | 307 PassiveObject* PassiveObjectHandle() { return &pobj_; } |
307 Array* ArrayHandle() { return &array_; } | 308 Array* ArrayHandle() { return &array_; } |
308 String* StringHandle() { return &str_; } | 309 String* StringHandle() { return &str_; } |
309 AbstractType* TypeHandle() { return &type_; } | 310 AbstractType* TypeHandle() { return &type_; } |
310 TypeArguments* TypeArgumentsHandle() { return &type_arguments_; } | 311 TypeArguments* TypeArgumentsHandle() { return &type_arguments_; } |
311 Array* TokensHandle() { return &tokens_; } | 312 Array* TokensHandle() { return &tokens_; } |
312 TokenStream* StreamHandle() { return &stream_; } | 313 TokenStream* StreamHandle() { return &stream_; } |
313 ExternalTypedData* DataHandle() { return &data_; } | 314 ExternalTypedData* DataHandle() { return &data_; } |
314 TypedData* TypedDataHandle() { return &typed_data_; } | 315 TypedData* TypedDataHandle() { return &typed_data_; } |
315 Snapshot::Kind kind() const { return kind_; } | 316 Snapshot::Kind kind() const { return kind_; } |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 RawObject* NewInteger(int64_t value); | 384 RawObject* NewInteger(int64_t value); |
384 RawStacktrace* NewStacktrace(); | 385 RawStacktrace* NewStacktrace(); |
385 | 386 |
386 RawInstructions* GetInstructionsById(int32_t id); | 387 RawInstructions* GetInstructionsById(int32_t id); |
387 | 388 |
388 protected: | 389 protected: |
389 SnapshotReader(const uint8_t* buffer, | 390 SnapshotReader(const uint8_t* buffer, |
390 intptr_t size, | 391 intptr_t size, |
391 Snapshot::Kind kind, | 392 Snapshot::Kind kind, |
392 ZoneGrowableArray<BackRefNode>* backward_references, | 393 ZoneGrowableArray<BackRefNode>* backward_references, |
393 Isolate* isolate, | 394 Thread* thread); |
394 Zone* zone); | |
395 ~SnapshotReader() { } | 395 ~SnapshotReader() { } |
396 | 396 |
397 ZoneGrowableArray<BackRefNode>* GetBackwardReferenceTable() const { | 397 ZoneGrowableArray<BackRefNode>* GetBackwardReferenceTable() const { |
398 return backward_references_; | 398 return backward_references_; |
399 } | 399 } |
400 void ResetBackwardReferenceTable() { backward_references_ = NULL; } | 400 void ResetBackwardReferenceTable() { backward_references_ = NULL; } |
401 PageSpace* old_space() const { return old_space_; } | 401 PageSpace* old_space() const { return old_space_; } |
402 | 402 |
403 private: | 403 private: |
404 // Allocate uninitialized objects, this is used when reading a full snapshot. | 404 // Allocate uninitialized objects, this is used when reading a full snapshot. |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 intptr_t NextAvailableObjectId() const; | 459 intptr_t NextAvailableObjectId() const; |
460 | 460 |
461 void SetReadException(const char* msg); | 461 void SetReadException(const char* msg); |
462 | 462 |
463 RawObject* VmIsolateSnapshotObject(intptr_t index) const; | 463 RawObject* VmIsolateSnapshotObject(intptr_t index) const; |
464 | 464 |
465 bool is_vm_isolate() const; | 465 bool is_vm_isolate() const; |
466 | 466 |
467 Snapshot::Kind kind_; // Indicates type of snapshot(full, script, message). | 467 Snapshot::Kind kind_; // Indicates type of snapshot(full, script, message). |
468 bool snapshot_code_; | 468 bool snapshot_code_; |
469 Isolate* isolate_; // Current isolate. | 469 Thread* thread_; // Current thread. |
470 Zone* zone_; // Zone for allocations while reading snapshot. | 470 Zone* zone_; // Zone for allocations while reading snapshot. |
471 Heap* heap_; // Heap of the current isolate. | 471 Heap* heap_; // Heap of the current isolate. |
472 PageSpace* old_space_; // Old space of the current isolate. | 472 PageSpace* old_space_; // Old space of the current isolate. |
473 Class& cls_; // Temporary Class handle. | 473 Class& cls_; // Temporary Class handle. |
474 Object& obj_; // Temporary Object handle. | 474 Object& obj_; // Temporary Object handle. |
475 PassiveObject& pobj_; // Temporary PassiveObject handle. | 475 PassiveObject& pobj_; // Temporary PassiveObject handle. |
476 Array& array_; // Temporary Array handle. | 476 Array& array_; // Temporary Array handle. |
477 Field& field_; // Temporary Field handle. | 477 Field& field_; // Temporary Field handle. |
478 String& str_; // Temporary String handle. | 478 String& str_; // Temporary String handle. |
479 Library& library_; // Temporary library handle. | 479 Library& library_; // Temporary library handle. |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 friend class TypeRef; | 526 friend class TypeRef; |
527 friend class UnhandledException; | 527 friend class UnhandledException; |
528 friend class UnresolvedClass; | 528 friend class UnresolvedClass; |
529 friend class WeakProperty; | 529 friend class WeakProperty; |
530 DISALLOW_COPY_AND_ASSIGN(SnapshotReader); | 530 DISALLOW_COPY_AND_ASSIGN(SnapshotReader); |
531 }; | 531 }; |
532 | 532 |
533 | 533 |
534 class VmIsolateSnapshotReader : public SnapshotReader { | 534 class VmIsolateSnapshotReader : public SnapshotReader { |
535 public: | 535 public: |
536 VmIsolateSnapshotReader(const uint8_t* buffer, intptr_t size, Zone* zone); | 536 VmIsolateSnapshotReader(const uint8_t* buffer, intptr_t size, Thread* thread); |
537 ~VmIsolateSnapshotReader(); | 537 ~VmIsolateSnapshotReader(); |
538 | 538 |
539 RawApiError* ReadVmIsolateSnapshot(); | 539 RawApiError* ReadVmIsolateSnapshot(); |
540 | 540 |
541 private: | 541 private: |
542 DISALLOW_COPY_AND_ASSIGN(VmIsolateSnapshotReader); | 542 DISALLOW_COPY_AND_ASSIGN(VmIsolateSnapshotReader); |
543 }; | 543 }; |
544 | 544 |
545 | 545 |
546 class IsolateSnapshotReader : public SnapshotReader { | 546 class IsolateSnapshotReader : public SnapshotReader { |
547 public: | 547 public: |
548 IsolateSnapshotReader(const uint8_t* buffer, | 548 IsolateSnapshotReader(const uint8_t* buffer, |
549 intptr_t size, | 549 intptr_t size, |
550 Isolate* isolate, | 550 Thread* thread); |
551 Zone* zone); | |
552 ~IsolateSnapshotReader(); | 551 ~IsolateSnapshotReader(); |
553 | 552 |
554 private: | 553 private: |
555 DISALLOW_COPY_AND_ASSIGN(IsolateSnapshotReader); | 554 DISALLOW_COPY_AND_ASSIGN(IsolateSnapshotReader); |
556 }; | 555 }; |
557 | 556 |
558 | 557 |
559 class ScriptSnapshotReader : public SnapshotReader { | 558 class ScriptSnapshotReader : public SnapshotReader { |
560 public: | 559 public: |
561 ScriptSnapshotReader(const uint8_t* buffer, | 560 ScriptSnapshotReader(const uint8_t* buffer, |
562 intptr_t size, | 561 intptr_t size, |
563 Isolate* isolate, | 562 Thread* thread); |
564 Zone* zone); | |
565 ~ScriptSnapshotReader(); | 563 ~ScriptSnapshotReader(); |
566 | 564 |
567 private: | 565 private: |
568 DISALLOW_COPY_AND_ASSIGN(ScriptSnapshotReader); | 566 DISALLOW_COPY_AND_ASSIGN(ScriptSnapshotReader); |
569 }; | 567 }; |
570 | 568 |
571 | 569 |
572 class MessageSnapshotReader : public SnapshotReader { | 570 class MessageSnapshotReader : public SnapshotReader { |
573 public: | 571 public: |
574 MessageSnapshotReader(const uint8_t* buffer, | 572 MessageSnapshotReader(const uint8_t* buffer, |
575 intptr_t size, | 573 intptr_t size, |
576 Isolate* isolate, | 574 Thread* thread); |
577 Zone* zone); | |
578 ~MessageSnapshotReader(); | 575 ~MessageSnapshotReader(); |
579 | 576 |
580 private: | 577 private: |
581 DISALLOW_COPY_AND_ASSIGN(MessageSnapshotReader); | 578 DISALLOW_COPY_AND_ASSIGN(MessageSnapshotReader); |
582 }; | 579 }; |
583 | 580 |
584 | 581 |
585 class BaseWriter : public StackResource { | 582 class BaseWriter : public StackResource { |
586 public: | 583 public: |
587 // Size of the snapshot. | 584 // Size of the snapshot. |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 | 809 |
813 void InitializeForwardList(ForwardList* forward_list) { | 810 void InitializeForwardList(ForwardList* forward_list) { |
814 ASSERT(forward_list_ == NULL); | 811 ASSERT(forward_list_ == NULL); |
815 forward_list_ = forward_list; | 812 forward_list_ = forward_list; |
816 } | 813 } |
817 void ResetForwardList() { | 814 void ResetForwardList() { |
818 ASSERT(forward_list_ != NULL); | 815 ASSERT(forward_list_ != NULL); |
819 forward_list_ = NULL; | 816 forward_list_ = NULL; |
820 } | 817 } |
821 | 818 |
822 Isolate* isolate() const { return isolate_; } | 819 Thread* thread() const { return thread_; } |
| 820 Isolate* isolate() const { return thread_->isolate(); } |
823 ObjectStore* object_store() const { return object_store_; } | 821 ObjectStore* object_store() const { return object_store_; } |
824 | 822 |
825 private: | 823 private: |
826 Snapshot::Kind kind_; | 824 Snapshot::Kind kind_; |
827 Isolate* isolate_; | 825 Thread* thread_; |
828 ObjectStore* object_store_; // Object store for common classes. | 826 ObjectStore* object_store_; // Object store for common classes. |
829 ClassTable* class_table_; // Class table for the class index to class lookup. | 827 ClassTable* class_table_; // Class table for the class index to class lookup. |
830 ForwardList* forward_list_; | 828 ForwardList* forward_list_; |
831 Exceptions::ExceptionType exception_type_; // Exception type. | 829 Exceptions::ExceptionType exception_type_; // Exception type. |
832 const char* exception_msg_; // Message associated with exception. | 830 const char* exception_msg_; // Message associated with exception. |
833 bool unmarked_objects_; // True if marked objects have been unmarked. | 831 bool unmarked_objects_; // True if marked objects have been unmarked. |
834 bool can_send_any_object_; // True if any Dart instance can be sent. | 832 bool can_send_any_object_; // True if any Dart instance can be sent. |
835 bool snapshot_code_; | 833 bool snapshot_code_; |
836 | 834 |
837 friend class FullSnapshotWriter; | 835 friend class FullSnapshotWriter; |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
971 private: | 969 private: |
972 SnapshotWriter* writer_; | 970 SnapshotWriter* writer_; |
973 bool as_references_; | 971 bool as_references_; |
974 | 972 |
975 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); | 973 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); |
976 }; | 974 }; |
977 | 975 |
978 } // namespace dart | 976 } // namespace dart |
979 | 977 |
980 #endif // VM_SNAPSHOT_H_ | 978 #endif // VM_SNAPSHOT_H_ |
OLD | NEW |