| 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 22 matching lines...) Expand all Loading... |
| 33 class PageSpace; | 33 class PageSpace; |
| 34 class RawApiError; | 34 class RawApiError; |
| 35 class RawArray; | 35 class RawArray; |
| 36 class RawBigint; | 36 class RawBigint; |
| 37 class RawBoundedType; | 37 class RawBoundedType; |
| 38 class RawCapability; | 38 class RawCapability; |
| 39 class RawClass; | 39 class RawClass; |
| 40 class RawClosureData; | 40 class RawClosureData; |
| 41 class RawContext; | 41 class RawContext; |
| 42 class RawDouble; | 42 class RawDouble; |
| 43 class RawExceptionHandlers; |
| 43 class RawField; | 44 class RawField; |
| 44 class RawFloat32x4; | 45 class RawFloat32x4; |
| 45 class RawFloat64x2; | 46 class RawFloat64x2; |
| 46 class RawFunction; | 47 class RawFunction; |
| 47 class RawGrowableObjectArray; | 48 class RawGrowableObjectArray; |
| 48 class RawICData; | 49 class RawICData; |
| 49 class RawImmutableArray; | 50 class RawImmutableArray; |
| 50 class RawInstructions; | 51 class RawInstructions; |
| 51 class RawInt32x4; | 52 class RawInt32x4; |
| 52 class RawLanguageError; | 53 class RawLanguageError; |
| 53 class RawLibrary; | 54 class RawLibrary; |
| 54 class RawLibraryPrefix; | 55 class RawLibraryPrefix; |
| 55 class RawLinkedHashMap; | 56 class RawLinkedHashMap; |
| 56 class RawLiteralToken; | 57 class RawLiteralToken; |
| 58 class RawLocalVarDescriptors; |
| 57 class RawMegamorphicCache; | 59 class RawMegamorphicCache; |
| 58 class RawMint; | 60 class RawMint; |
| 59 class RawMixinAppType; | 61 class RawMixinAppType; |
| 60 class RawBigint; | 62 class RawBigint; |
| 61 class RawNamespace; | 63 class RawNamespace; |
| 62 class RawObject; | 64 class RawObject; |
| 63 class RawObjectPool; | 65 class RawObjectPool; |
| 64 class RawOneByteString; | 66 class RawOneByteString; |
| 65 class RawPatchClass; | 67 class RawPatchClass; |
| 68 class RawPcDescriptors; |
| 66 class RawReceivePort; | 69 class RawReceivePort; |
| 67 class RawRedirectionData; | 70 class RawRedirectionData; |
| 68 class RawScript; | 71 class RawScript; |
| 69 class RawSendPort; | 72 class RawSendPort; |
| 70 class RawSmi; | 73 class RawSmi; |
| 74 class RawStackmap; |
| 71 class RawStacktrace; | 75 class RawStacktrace; |
| 72 class RawSubtypeTestCache; | 76 class RawSubtypeTestCache; |
| 73 class RawTokenStream; | 77 class RawTokenStream; |
| 74 class RawTwoByteString; | 78 class RawTwoByteString; |
| 75 class RawType; | 79 class RawType; |
| 76 class RawTypeArguments; | 80 class RawTypeArguments; |
| 77 class RawTypedData; | 81 class RawTypedData; |
| 78 class RawTypeParameter; | 82 class RawTypeParameter; |
| 79 class RawTypeRef; | 83 class RawTypeRef; |
| 80 class RawUnhandledException; | 84 class RawUnhandledException; |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 } | 292 } |
| 289 | 293 |
| 290 private: | 294 private: |
| 291 Object* reference_; | 295 Object* reference_; |
| 292 DeserializeState state_; | 296 DeserializeState state_; |
| 293 bool defer_canonicalization_; | 297 bool defer_canonicalization_; |
| 294 ZoneGrowableArray<intptr_t>* patch_records_; | 298 ZoneGrowableArray<intptr_t>* patch_records_; |
| 295 }; | 299 }; |
| 296 | 300 |
| 297 | 301 |
| 302 class InstructionsReader : public ZoneAllocated { |
| 303 public: |
| 304 explicit InstructionsReader(const uint8_t* buffer) |
| 305 : buffer_(buffer) { |
| 306 ASSERT(buffer != NULL); |
| 307 ASSERT(Utils::IsAligned(reinterpret_cast<uword>(buffer), |
| 308 OS::PreferredCodeAlignment())); |
| 309 } |
| 310 |
| 311 RawInstructions* GetInstructionsAt(int32_t offset, uword expected_tags); |
| 312 |
| 313 private: |
| 314 const uint8_t* buffer_; |
| 315 |
| 316 DISALLOW_COPY_AND_ASSIGN(InstructionsReader); |
| 317 }; |
| 318 |
| 319 |
| 298 // Reads a snapshot into objects. | 320 // Reads a snapshot into objects. |
| 299 class SnapshotReader : public BaseReader { | 321 class SnapshotReader : public BaseReader { |
| 300 public: | 322 public: |
| 301 Zone* zone() const { return zone_; } | 323 Zone* zone() const { return zone_; } |
| 302 Isolate* isolate() const { return isolate_; } | 324 Isolate* isolate() const { return isolate_; } |
| 303 Heap* heap() const { return heap_; } | 325 Heap* heap() const { return heap_; } |
| 304 ObjectStore* object_store() const { return isolate_->object_store(); } | 326 ObjectStore* object_store() const { return isolate_->object_store(); } |
| 305 ClassTable* class_table() const { return isolate_->class_table(); } | 327 ClassTable* class_table() const { return isolate_->class_table(); } |
| 306 PassiveObject* PassiveObjectHandle() { return &pobj_; } | 328 PassiveObject* PassiveObjectHandle() { return &pobj_; } |
| 307 Array* ArrayHandle() { return &array_; } | 329 Array* ArrayHandle() { return &array_; } |
| 308 String* StringHandle() { return &str_; } | 330 String* StringHandle() { return &str_; } |
| 309 AbstractType* TypeHandle() { return &type_; } | 331 AbstractType* TypeHandle() { return &type_; } |
| 310 TypeArguments* TypeArgumentsHandle() { return &type_arguments_; } | 332 TypeArguments* TypeArgumentsHandle() { return &type_arguments_; } |
| 311 Array* TokensHandle() { return &tokens_; } | 333 Array* TokensHandle() { return &tokens_; } |
| 312 TokenStream* StreamHandle() { return &stream_; } | 334 TokenStream* StreamHandle() { return &stream_; } |
| 313 ExternalTypedData* DataHandle() { return &data_; } | 335 ExternalTypedData* DataHandle() { return &data_; } |
| 314 TypedData* TypedDataHandle() { return &typed_data_; } | 336 TypedData* TypedDataHandle() { return &typed_data_; } |
| 337 Code* CodeHandle() { return &code_; } |
| 315 Snapshot::Kind kind() const { return kind_; } | 338 Snapshot::Kind kind() const { return kind_; } |
| 316 bool snapshot_code() const { return snapshot_code_; } | 339 bool snapshot_code() const { return snapshot_code_; } |
| 317 | 340 |
| 318 // Reads an object. | 341 // Reads an object. |
| 319 RawObject* ReadObject(); | 342 RawObject* ReadObject(); |
| 320 | 343 |
| 321 // Add object to backward references. | 344 // Add object to backward references. |
| 322 void AddBackRef(intptr_t id, | 345 void AddBackRef(intptr_t id, |
| 323 Object* obj, | 346 Object* obj, |
| 324 DeserializeState state, | 347 DeserializeState state, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 RawTypeRef* NewTypeRef(); | 380 RawTypeRef* NewTypeRef(); |
| 358 RawTypeParameter* NewTypeParameter(); | 381 RawTypeParameter* NewTypeParameter(); |
| 359 RawBoundedType* NewBoundedType(); | 382 RawBoundedType* NewBoundedType(); |
| 360 RawMixinAppType* NewMixinAppType(); | 383 RawMixinAppType* NewMixinAppType(); |
| 361 RawPatchClass* NewPatchClass(); | 384 RawPatchClass* NewPatchClass(); |
| 362 RawClosureData* NewClosureData(); | 385 RawClosureData* NewClosureData(); |
| 363 RawRedirectionData* NewRedirectionData(); | 386 RawRedirectionData* NewRedirectionData(); |
| 364 RawFunction* NewFunction(); | 387 RawFunction* NewFunction(); |
| 365 RawCode* NewCode(intptr_t pointer_offsets_length); | 388 RawCode* NewCode(intptr_t pointer_offsets_length); |
| 366 RawObjectPool* NewObjectPool(intptr_t length); | 389 RawObjectPool* NewObjectPool(intptr_t length); |
| 390 RawPcDescriptors* NewPcDescriptors(intptr_t length); |
| 391 RawLocalVarDescriptors* NewLocalVarDescriptors(intptr_t num_entries); |
| 392 RawExceptionHandlers* NewExceptionHandlers(intptr_t num_entries); |
| 393 RawStackmap* NewStackmap(intptr_t length); |
| 367 RawICData* NewICData(); | 394 RawICData* NewICData(); |
| 368 RawMegamorphicCache* NewMegamorphicCache(); | 395 RawMegamorphicCache* NewMegamorphicCache(); |
| 369 RawSubtypeTestCache* NewSubtypeTestCache(); | 396 RawSubtypeTestCache* NewSubtypeTestCache(); |
| 397 RawLinkedHashMap* NewLinkedHashMap(); |
| 370 RawField* NewField(); | 398 RawField* NewField(); |
| 371 RawLibrary* NewLibrary(); | 399 RawLibrary* NewLibrary(); |
| 372 RawLibraryPrefix* NewLibraryPrefix(); | 400 RawLibraryPrefix* NewLibraryPrefix(); |
| 373 RawNamespace* NewNamespace(); | 401 RawNamespace* NewNamespace(); |
| 374 RawScript* NewScript(); | 402 RawScript* NewScript(); |
| 375 RawLiteralToken* NewLiteralToken(); | 403 RawLiteralToken* NewLiteralToken(); |
| 376 RawGrowableObjectArray* NewGrowableObjectArray(); | 404 RawGrowableObjectArray* NewGrowableObjectArray(); |
| 377 RawFloat32x4* NewFloat32x4(float v0, float v1, float v2, float v3); | 405 RawFloat32x4* NewFloat32x4(float v0, float v1, float v2, float v3); |
| 378 RawInt32x4* NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3); | 406 RawInt32x4* NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3); |
| 379 RawFloat64x2* NewFloat64x2(double v0, double v1); | 407 RawFloat64x2* NewFloat64x2(double v0, double v1); |
| 380 RawApiError* NewApiError(); | 408 RawApiError* NewApiError(); |
| 381 RawLanguageError* NewLanguageError(); | 409 RawLanguageError* NewLanguageError(); |
| 382 RawUnhandledException* NewUnhandledException(); | 410 RawUnhandledException* NewUnhandledException(); |
| 383 RawObject* NewInteger(int64_t value); | 411 RawObject* NewInteger(int64_t value); |
| 384 RawStacktrace* NewStacktrace(); | 412 RawStacktrace* NewStacktrace(); |
| 385 | 413 |
| 386 RawInstructions* GetInstructionsById(int32_t id); | 414 RawInstructions* GetInstructionsAt(int32_t offset, uword expected_tags) { |
| 415 return instructions_reader_->GetInstructionsAt(offset, expected_tags); |
| 416 } |
| 417 |
| 418 const uint8_t* instructions_buffer_; |
| 387 | 419 |
| 388 protected: | 420 protected: |
| 389 SnapshotReader(const uint8_t* buffer, | 421 SnapshotReader(const uint8_t* buffer, |
| 390 intptr_t size, | 422 intptr_t size, |
| 423 const uint8_t* instructions_buffer, |
| 391 Snapshot::Kind kind, | 424 Snapshot::Kind kind, |
| 392 ZoneGrowableArray<BackRefNode>* backward_references, | 425 ZoneGrowableArray<BackRefNode>* backward_references, |
| 393 Isolate* isolate, | 426 Isolate* isolate, |
| 394 Zone* zone); | 427 Zone* zone); |
| 395 ~SnapshotReader() { } | 428 ~SnapshotReader() { } |
| 396 | 429 |
| 397 ZoneGrowableArray<BackRefNode>* GetBackwardReferenceTable() const { | 430 ZoneGrowableArray<BackRefNode>* GetBackwardReferenceTable() const { |
| 398 return backward_references_; | 431 return backward_references_; |
| 399 } | 432 } |
| 400 void ResetBackwardReferenceTable() { backward_references_ = NULL; } | 433 void ResetBackwardReferenceTable() { backward_references_ = NULL; } |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 Array& array_; // Temporary Array handle. | 509 Array& array_; // Temporary Array handle. |
| 477 Field& field_; // Temporary Field handle. | 510 Field& field_; // Temporary Field handle. |
| 478 String& str_; // Temporary String handle. | 511 String& str_; // Temporary String handle. |
| 479 Library& library_; // Temporary library handle. | 512 Library& library_; // Temporary library handle. |
| 480 AbstractType& type_; // Temporary type handle. | 513 AbstractType& type_; // Temporary type handle. |
| 481 TypeArguments& type_arguments_; // Temporary type argument handle. | 514 TypeArguments& type_arguments_; // Temporary type argument handle. |
| 482 Array& tokens_; // Temporary tokens handle. | 515 Array& tokens_; // Temporary tokens handle. |
| 483 TokenStream& stream_; // Temporary token stream handle. | 516 TokenStream& stream_; // Temporary token stream handle. |
| 484 ExternalTypedData& data_; // Temporary stream data handle. | 517 ExternalTypedData& data_; // Temporary stream data handle. |
| 485 TypedData& typed_data_; // Temporary typed data handle. | 518 TypedData& typed_data_; // Temporary typed data handle. |
| 519 Code& code_; // Temporary code handle. |
| 486 UnhandledException& error_; // Error handle. | 520 UnhandledException& error_; // Error handle. |
| 487 intptr_t max_vm_isolate_object_id_; | 521 intptr_t max_vm_isolate_object_id_; |
| 488 ZoneGrowableArray<BackRefNode>* backward_references_; | 522 ZoneGrowableArray<BackRefNode>* backward_references_; |
| 523 InstructionsReader* instructions_reader_; |
| 489 | 524 |
| 490 friend class ApiError; | 525 friend class ApiError; |
| 491 friend class Array; | 526 friend class Array; |
| 492 friend class Bigint; | 527 friend class Bigint; |
| 493 friend class BoundedType; | 528 friend class BoundedType; |
| 494 friend class Class; | 529 friend class Class; |
| 495 friend class ClosureData; | 530 friend class ClosureData; |
| 496 friend class Code; | 531 friend class Code; |
| 497 friend class Context; | 532 friend class Context; |
| 498 friend class ContextScope; | 533 friend class ContextScope; |
| 499 friend class ExceptionHandlers; | 534 friend class ExceptionHandlers; |
| 500 friend class Field; | 535 friend class Field; |
| 501 friend class Function; | 536 friend class Function; |
| 502 friend class GrowableObjectArray; | 537 friend class GrowableObjectArray; |
| 503 friend class ICData; | 538 friend class ICData; |
| 504 friend class ImmutableArray; | 539 friend class ImmutableArray; |
| 540 friend class Instructions; |
| 505 friend class JSRegExp; | 541 friend class JSRegExp; |
| 506 friend class LanguageError; | 542 friend class LanguageError; |
| 507 friend class Library; | 543 friend class Library; |
| 508 friend class LibraryPrefix; | 544 friend class LibraryPrefix; |
| 509 friend class LinkedHashMap; | 545 friend class LinkedHashMap; |
| 510 friend class LiteralToken; | 546 friend class LiteralToken; |
| 511 friend class LocalVarDescriptors; | 547 friend class LocalVarDescriptors; |
| 512 friend class MegamorphicCache; | 548 friend class MegamorphicCache; |
| 513 friend class MirrorReference; | 549 friend class MirrorReference; |
| 514 friend class MixinAppType; | 550 friend class MixinAppType; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 526 friend class TypeRef; | 562 friend class TypeRef; |
| 527 friend class UnhandledException; | 563 friend class UnhandledException; |
| 528 friend class UnresolvedClass; | 564 friend class UnresolvedClass; |
| 529 friend class WeakProperty; | 565 friend class WeakProperty; |
| 530 DISALLOW_COPY_AND_ASSIGN(SnapshotReader); | 566 DISALLOW_COPY_AND_ASSIGN(SnapshotReader); |
| 531 }; | 567 }; |
| 532 | 568 |
| 533 | 569 |
| 534 class VmIsolateSnapshotReader : public SnapshotReader { | 570 class VmIsolateSnapshotReader : public SnapshotReader { |
| 535 public: | 571 public: |
| 536 VmIsolateSnapshotReader(const uint8_t* buffer, intptr_t size, Zone* zone); | 572 VmIsolateSnapshotReader(const uint8_t* buffer, |
| 573 intptr_t size, |
| 574 const uint8_t* instructions_buffer, |
| 575 Zone* zone); |
| 537 ~VmIsolateSnapshotReader(); | 576 ~VmIsolateSnapshotReader(); |
| 538 | 577 |
| 539 RawApiError* ReadVmIsolateSnapshot(); | 578 RawApiError* ReadVmIsolateSnapshot(); |
| 540 | 579 |
| 541 private: | 580 private: |
| 542 DISALLOW_COPY_AND_ASSIGN(VmIsolateSnapshotReader); | 581 DISALLOW_COPY_AND_ASSIGN(VmIsolateSnapshotReader); |
| 543 }; | 582 }; |
| 544 | 583 |
| 545 | 584 |
| 546 class IsolateSnapshotReader : public SnapshotReader { | 585 class IsolateSnapshotReader : public SnapshotReader { |
| 547 public: | 586 public: |
| 548 IsolateSnapshotReader(const uint8_t* buffer, | 587 IsolateSnapshotReader(const uint8_t* buffer, |
| 549 intptr_t size, | 588 intptr_t size, |
| 589 const uint8_t* instructions_buffer, |
| 550 Isolate* isolate, | 590 Isolate* isolate, |
| 551 Zone* zone); | 591 Zone* zone); |
| 552 ~IsolateSnapshotReader(); | 592 ~IsolateSnapshotReader(); |
| 553 | 593 |
| 554 private: | 594 private: |
| 555 DISALLOW_COPY_AND_ASSIGN(IsolateSnapshotReader); | 595 DISALLOW_COPY_AND_ASSIGN(IsolateSnapshotReader); |
| 556 }; | 596 }; |
| 557 | 597 |
| 558 | 598 |
| 559 class ScriptSnapshotReader : public SnapshotReader { | 599 class ScriptSnapshotReader : public SnapshotReader { |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 726 | 766 |
| 727 const intptr_t first_object_id_; | 767 const intptr_t first_object_id_; |
| 728 GrowableArray<Node*> nodes_; | 768 GrowableArray<Node*> nodes_; |
| 729 intptr_t first_unprocessed_object_id_; | 769 intptr_t first_unprocessed_object_id_; |
| 730 | 770 |
| 731 friend class FullSnapshotWriter; | 771 friend class FullSnapshotWriter; |
| 732 DISALLOW_COPY_AND_ASSIGN(ForwardList); | 772 DISALLOW_COPY_AND_ASSIGN(ForwardList); |
| 733 }; | 773 }; |
| 734 | 774 |
| 735 | 775 |
| 776 class InstructionsWriter : public ZoneAllocated { |
| 777 public: |
| 778 InstructionsWriter(uint8_t** buffer, |
| 779 ReAlloc alloc, |
| 780 intptr_t initial_size) |
| 781 : stream_(buffer, alloc, initial_size) { |
| 782 ASSERT(buffer != NULL); |
| 783 ASSERT(alloc != NULL); |
| 784 } |
| 785 |
| 786 // Size of the snapshot. |
| 787 intptr_t BytesWritten() const { return stream_.bytes_written(); } |
| 788 |
| 789 int32_t GetOffsetFor(RawInstructions* instructions); |
| 790 |
| 791 private: |
| 792 WriteStream stream_; |
| 793 |
| 794 DISALLOW_COPY_AND_ASSIGN(InstructionsWriter); |
| 795 }; |
| 796 |
| 797 |
| 736 class SnapshotWriter : public BaseWriter { | 798 class SnapshotWriter : public BaseWriter { |
| 737 protected: | 799 protected: |
| 738 SnapshotWriter(Snapshot::Kind kind, | 800 SnapshotWriter(Snapshot::Kind kind, |
| 739 uint8_t** buffer, | 801 uint8_t** buffer, |
| 740 ReAlloc alloc, | 802 ReAlloc alloc, |
| 741 intptr_t initial_size, | 803 intptr_t initial_size, |
| 742 ForwardList* forward_list, | 804 ForwardList* forward_list, |
| 805 InstructionsWriter* instructions_writer, |
| 743 bool can_send_any_object, | 806 bool can_send_any_object, |
| 744 bool snapshot_code); | 807 bool snapshot_code, |
| 808 bool vm_isolate_is_symbolic); |
| 745 | 809 |
| 746 public: | 810 public: |
| 747 // Snapshot kind. | 811 // Snapshot kind. |
| 748 Snapshot::Kind kind() const { return kind_; } | 812 Snapshot::Kind kind() const { return kind_; } |
| 749 | 813 |
| 750 // Serialize an object into the buffer. | 814 // Serialize an object into the buffer. |
| 751 void WriteObject(RawObject* raw); | 815 void WriteObject(RawObject* raw); |
| 752 | 816 |
| 753 uword GetObjectTags(RawObject* raw); | 817 uword GetObjectTags(RawObject* raw); |
| 754 | 818 |
| 755 Exceptions::ExceptionType exception_type() const { | 819 Exceptions::ExceptionType exception_type() const { |
| 756 return exception_type_; | 820 return exception_type_; |
| 757 } | 821 } |
| 758 void set_exception_type(Exceptions::ExceptionType type) { | 822 void set_exception_type(Exceptions::ExceptionType type) { |
| 759 exception_type_ = type; | 823 exception_type_ = type; |
| 760 } | 824 } |
| 761 const char* exception_msg() const { return exception_msg_; } | 825 const char* exception_msg() const { return exception_msg_; } |
| 762 void set_exception_msg(const char* msg) { | 826 void set_exception_msg(const char* msg) { |
| 763 exception_msg_ = msg; | 827 exception_msg_ = msg; |
| 764 } | 828 } |
| 765 bool can_send_any_object() const { return can_send_any_object_; } | 829 bool can_send_any_object() const { return can_send_any_object_; } |
| 766 bool snapshot_code() const { return snapshot_code_; } | 830 bool snapshot_code() const { return snapshot_code_; } |
| 831 bool vm_isolate_is_symbolic() const { return vm_isolate_is_symbolic_; } |
| 767 void ThrowException(Exceptions::ExceptionType type, const char* msg); | 832 void ThrowException(Exceptions::ExceptionType type, const char* msg); |
| 768 | 833 |
| 769 // Write a version string for the snapshot. | 834 // Write a version string for the snapshot. |
| 770 void WriteVersion(); | 835 void WriteVersion(); |
| 771 | 836 |
| 772 static intptr_t FirstObjectId(); | 837 static intptr_t FirstObjectId(); |
| 773 | 838 |
| 774 int32_t GetInstructionsId(RawInstructions* instructions) { return 0; } | 839 int32_t GetInstructionsId(RawInstructions* instructions) { |
| 840 return instructions_writer_->GetOffsetFor(instructions); |
| 841 } |
| 775 | 842 |
| 776 protected: | 843 protected: |
| 777 void UnmarkAll() { | 844 void UnmarkAll() { |
| 778 if (!unmarked_objects_ && forward_list_ != NULL) { | 845 if (!unmarked_objects_ && forward_list_ != NULL) { |
| 779 forward_list_->UnmarkAll(); | 846 forward_list_->UnmarkAll(); |
| 780 unmarked_objects_ = true; | 847 unmarked_objects_ = true; |
| 781 } | 848 } |
| 782 } | 849 } |
| 783 | 850 |
| 784 bool CheckAndWritePredefinedObject(RawObject* raw); | 851 bool CheckAndWritePredefinedObject(RawObject* raw); |
| 785 void HandleVMIsolateObject(RawObject* raw); | 852 bool HandleVMIsolateObject(RawObject* raw); |
| 786 | 853 |
| 787 void WriteClassId(RawClass* cls); | 854 void WriteClassId(RawClass* cls); |
| 788 void WriteStaticImplicitClosure(intptr_t object_id, | 855 void WriteStaticImplicitClosure(intptr_t object_id, |
| 789 RawFunction* func, | 856 RawFunction* func, |
| 790 intptr_t tags); | 857 intptr_t tags); |
| 791 void WriteObjectImpl(RawObject* raw, bool as_reference); | 858 void WriteObjectImpl(RawObject* raw, bool as_reference); |
| 792 void WriteObjectRef(RawObject* raw); | 859 void WriteObjectRef(RawObject* raw); |
| 793 void WriteInlinedObject(RawObject* raw); | 860 void WriteInlinedObject(RawObject* raw); |
| 794 void WriteForwardedObjects(); | 861 void WriteForwardedObjects(); |
| 795 void ArrayWriteTo(intptr_t object_id, | 862 void ArrayWriteTo(intptr_t object_id, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 821 | 888 |
| 822 Isolate* isolate() const { return isolate_; } | 889 Isolate* isolate() const { return isolate_; } |
| 823 ObjectStore* object_store() const { return object_store_; } | 890 ObjectStore* object_store() const { return object_store_; } |
| 824 | 891 |
| 825 private: | 892 private: |
| 826 Snapshot::Kind kind_; | 893 Snapshot::Kind kind_; |
| 827 Isolate* isolate_; | 894 Isolate* isolate_; |
| 828 ObjectStore* object_store_; // Object store for common classes. | 895 ObjectStore* object_store_; // Object store for common classes. |
| 829 ClassTable* class_table_; // Class table for the class index to class lookup. | 896 ClassTable* class_table_; // Class table for the class index to class lookup. |
| 830 ForwardList* forward_list_; | 897 ForwardList* forward_list_; |
| 898 InstructionsWriter* instructions_writer_; |
| 831 Exceptions::ExceptionType exception_type_; // Exception type. | 899 Exceptions::ExceptionType exception_type_; // Exception type. |
| 832 const char* exception_msg_; // Message associated with exception. | 900 const char* exception_msg_; // Message associated with exception. |
| 833 bool unmarked_objects_; // True if marked objects have been unmarked. | 901 bool unmarked_objects_; // True if marked objects have been unmarked. |
| 834 bool can_send_any_object_; // True if any Dart instance can be sent. | 902 bool can_send_any_object_; // True if any Dart instance can be sent. |
| 835 bool snapshot_code_; | 903 bool snapshot_code_; |
| 904 bool vm_isolate_is_symbolic_; |
| 836 | 905 |
| 837 friend class FullSnapshotWriter; | 906 friend class FullSnapshotWriter; |
| 838 friend class RawArray; | 907 friend class RawArray; |
| 839 friend class RawClass; | 908 friend class RawClass; |
| 840 friend class RawClosureData; | 909 friend class RawClosureData; |
| 841 friend class RawExceptionHandlers; | 910 friend class RawExceptionHandlers; |
| 842 friend class RawGrowableObjectArray; | 911 friend class RawGrowableObjectArray; |
| 843 friend class RawImmutableArray; | 912 friend class RawImmutableArray; |
| 844 friend class RawInstructions; | 913 friend class RawInstructions; |
| 845 friend class RawJSRegExp; | 914 friend class RawJSRegExp; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 860 friend class WriteInlinedObjectVisitor; | 929 friend class WriteInlinedObjectVisitor; |
| 861 DISALLOW_COPY_AND_ASSIGN(SnapshotWriter); | 930 DISALLOW_COPY_AND_ASSIGN(SnapshotWriter); |
| 862 }; | 931 }; |
| 863 | 932 |
| 864 | 933 |
| 865 class FullSnapshotWriter { | 934 class FullSnapshotWriter { |
| 866 public: | 935 public: |
| 867 static const intptr_t kInitialSize = 64 * KB; | 936 static const intptr_t kInitialSize = 64 * KB; |
| 868 FullSnapshotWriter(uint8_t** vm_isolate_snapshot_buffer, | 937 FullSnapshotWriter(uint8_t** vm_isolate_snapshot_buffer, |
| 869 uint8_t** isolate_snapshot_buffer, | 938 uint8_t** isolate_snapshot_buffer, |
| 939 uint8_t** instructions_snapshot_buffer, |
| 870 ReAlloc alloc, | 940 ReAlloc alloc, |
| 871 bool snapshot_code); | 941 bool snapshot_code, |
| 942 bool vm_isolate_is_symbolic); |
| 872 ~FullSnapshotWriter(); | 943 ~FullSnapshotWriter(); |
| 873 | 944 |
| 874 uint8_t** vm_isolate_snapshot_buffer() { | 945 uint8_t** vm_isolate_snapshot_buffer() { |
| 875 return vm_isolate_snapshot_buffer_; | 946 return vm_isolate_snapshot_buffer_; |
| 876 } | 947 } |
| 877 | 948 |
| 878 uint8_t** isolate_snapshot_buffer() { | 949 uint8_t** isolate_snapshot_buffer() { |
| 879 return isolate_snapshot_buffer_; | 950 return isolate_snapshot_buffer_; |
| 880 } | 951 } |
| 881 | 952 |
| 882 // Writes a full snapshot of the Isolate. | 953 // Writes a full snapshot of the Isolate. |
| 883 void WriteFullSnapshot(); | 954 void WriteFullSnapshot(); |
| 884 | 955 |
| 885 intptr_t VmIsolateSnapshotSize() const { | 956 intptr_t VmIsolateSnapshotSize() const { |
| 886 return vm_isolate_snapshot_size_; | 957 return vm_isolate_snapshot_size_; |
| 887 } | 958 } |
| 888 intptr_t IsolateSnapshotSize() const { | 959 intptr_t IsolateSnapshotSize() const { |
| 889 return isolate_snapshot_size_; | 960 return isolate_snapshot_size_; |
| 890 } | 961 } |
| 962 intptr_t InstructionsSnapshotSize() const { |
| 963 return instructions_snapshot_size_; |
| 964 } |
| 891 | 965 |
| 892 private: | 966 private: |
| 893 // Writes a snapshot of the VM Isolate. | 967 // Writes a snapshot of the VM Isolate. |
| 894 void WriteVmIsolateSnapshot(); | 968 void WriteVmIsolateSnapshot(); |
| 895 | 969 |
| 896 // Writes a full snapshot of a regular Dart Isolate. | 970 // Writes a full snapshot of a regular Dart Isolate. |
| 897 void WriteIsolateFullSnapshot(); | 971 void WriteIsolateFullSnapshot(); |
| 898 | 972 |
| 899 Isolate* isolate_; | 973 Isolate* isolate_; |
| 900 uint8_t** vm_isolate_snapshot_buffer_; | 974 uint8_t** vm_isolate_snapshot_buffer_; |
| 901 uint8_t** isolate_snapshot_buffer_; | 975 uint8_t** isolate_snapshot_buffer_; |
| 976 uint8_t** instructions_snapshot_buffer_; |
| 902 ReAlloc alloc_; | 977 ReAlloc alloc_; |
| 903 intptr_t vm_isolate_snapshot_size_; | 978 intptr_t vm_isolate_snapshot_size_; |
| 904 intptr_t isolate_snapshot_size_; | 979 intptr_t isolate_snapshot_size_; |
| 980 intptr_t instructions_snapshot_size_; |
| 905 ForwardList* forward_list_; | 981 ForwardList* forward_list_; |
| 982 InstructionsWriter* instructions_writer_; |
| 906 Array& scripts_; | 983 Array& scripts_; |
| 907 Array& symbol_table_; | 984 Array& symbol_table_; |
| 908 bool snapshot_code_; | 985 bool snapshot_code_; |
| 986 bool vm_isolate_is_symbolic_; |
| 909 | 987 |
| 910 DISALLOW_COPY_AND_ASSIGN(FullSnapshotWriter); | 988 DISALLOW_COPY_AND_ASSIGN(FullSnapshotWriter); |
| 911 }; | 989 }; |
| 912 | 990 |
| 913 | 991 |
| 914 class PrecompiledSnapshotWriter : public FullSnapshotWriter { | 992 class PrecompiledSnapshotWriter : public FullSnapshotWriter { |
| 915 public: | 993 public: |
| 916 PrecompiledSnapshotWriter(uint8_t** vm_isolate_snapshot_buffer, | 994 PrecompiledSnapshotWriter(uint8_t** vm_isolate_snapshot_buffer, |
| 917 uint8_t** isolate_snapshot_buffer, | 995 uint8_t** isolate_snapshot_buffer, |
| 996 uint8_t** instructions_snapshot_buffer, |
| 918 ReAlloc alloc); | 997 ReAlloc alloc); |
| 919 ~PrecompiledSnapshotWriter(); | 998 ~PrecompiledSnapshotWriter(); |
| 920 }; | 999 }; |
| 921 | 1000 |
| 922 | 1001 |
| 923 class ScriptSnapshotWriter : public SnapshotWriter { | 1002 class ScriptSnapshotWriter : public SnapshotWriter { |
| 924 public: | 1003 public: |
| 925 static const intptr_t kInitialSize = 64 * KB; | 1004 static const intptr_t kInitialSize = 64 * KB; |
| 926 ScriptSnapshotWriter(uint8_t** buffer, ReAlloc alloc); | 1005 ScriptSnapshotWriter(uint8_t** buffer, ReAlloc alloc); |
| 927 ~ScriptSnapshotWriter() { } | 1006 ~ScriptSnapshotWriter() { } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 970 private: | 1049 private: |
| 971 SnapshotWriter* writer_; | 1050 SnapshotWriter* writer_; |
| 972 bool as_references_; | 1051 bool as_references_; |
| 973 | 1052 |
| 974 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); | 1053 DISALLOW_COPY_AND_ASSIGN(SnapshotWriterVisitor); |
| 975 }; | 1054 }; |
| 976 | 1055 |
| 977 } // namespace dart | 1056 } // namespace dart |
| 978 | 1057 |
| 979 #endif // VM_SNAPSHOT_H_ | 1058 #endif // VM_SNAPSHOT_H_ |
| OLD | NEW |