Chromium Code Reviews| 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 #include "vm/snapshot.h" | 5 #include "vm/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" |
| (...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 602 const String& msg = String::Handle(String::New(message_buffer, Heap::kOld)); | 602 const String& msg = String::Handle(String::New(message_buffer, Heap::kOld)); |
| 603 return ApiError::New(msg, Heap::kOld); | 603 return ApiError::New(msg, Heap::kOld); |
| 604 } | 604 } |
| 605 Advance(version_len); | 605 Advance(version_len); |
| 606 return ApiError::null(); | 606 return ApiError::null(); |
| 607 } | 607 } |
| 608 | 608 |
| 609 | 609 |
| 610 #define ALLOC_NEW_OBJECT_WITH_LEN(type, length) \ | 610 #define ALLOC_NEW_OBJECT_WITH_LEN(type, length) \ |
| 611 ASSERT(kind_ == Snapshot::kFull); \ | 611 ASSERT(kind_ == Snapshot::kFull); \ |
| 612 ASSERT(isolate()->no_safepoint_scope_depth() != 0); \ | 612 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); \ |
|
siva
2015/07/22 17:52:49
Ditto comment about Thread::Current() in this file
koda
2015/07/22 19:55:47
Done.
| |
| 613 Raw##type* obj = reinterpret_cast<Raw##type*>( \ | 613 Raw##type* obj = reinterpret_cast<Raw##type*>( \ |
| 614 AllocateUninitialized(k##type##Cid, type::InstanceSize(length))); \ | 614 AllocateUninitialized(k##type##Cid, type::InstanceSize(length))); \ |
| 615 obj->StoreSmi(&(obj->ptr()->length_), Smi::New(length)); \ | 615 obj->StoreSmi(&(obj->ptr()->length_), Smi::New(length)); \ |
| 616 return obj; \ | 616 return obj; \ |
| 617 | 617 |
| 618 | 618 |
| 619 RawArray* SnapshotReader::NewArray(intptr_t len) { | 619 RawArray* SnapshotReader::NewArray(intptr_t len) { |
| 620 ALLOC_NEW_OBJECT_WITH_LEN(Array, len); | 620 ALLOC_NEW_OBJECT_WITH_LEN(Array, len); |
| 621 } | 621 } |
| 622 | 622 |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 636 } | 636 } |
| 637 | 637 |
| 638 | 638 |
| 639 RawTypeArguments* SnapshotReader::NewTypeArguments(intptr_t len) { | 639 RawTypeArguments* SnapshotReader::NewTypeArguments(intptr_t len) { |
| 640 ALLOC_NEW_OBJECT_WITH_LEN(TypeArguments, len); | 640 ALLOC_NEW_OBJECT_WITH_LEN(TypeArguments, len); |
| 641 } | 641 } |
| 642 | 642 |
| 643 | 643 |
| 644 RawTokenStream* SnapshotReader::NewTokenStream(intptr_t len) { | 644 RawTokenStream* SnapshotReader::NewTokenStream(intptr_t len) { |
| 645 ASSERT(kind_ == Snapshot::kFull); | 645 ASSERT(kind_ == Snapshot::kFull); |
| 646 ASSERT(isolate()->no_safepoint_scope_depth() != 0); | 646 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); |
| 647 stream_ = reinterpret_cast<RawTokenStream*>( | 647 stream_ = reinterpret_cast<RawTokenStream*>( |
| 648 AllocateUninitialized(kTokenStreamCid, TokenStream::InstanceSize())); | 648 AllocateUninitialized(kTokenStreamCid, TokenStream::InstanceSize())); |
| 649 uint8_t* array = const_cast<uint8_t*>(CurrentBufferAddress()); | 649 uint8_t* array = const_cast<uint8_t*>(CurrentBufferAddress()); |
| 650 ASSERT(array != NULL); | 650 ASSERT(array != NULL); |
| 651 Advance(len); | 651 Advance(len); |
| 652 data_ = reinterpret_cast<RawExternalTypedData*>( | 652 data_ = reinterpret_cast<RawExternalTypedData*>( |
| 653 AllocateUninitialized(kExternalTypedDataUint8ArrayCid, | 653 AllocateUninitialized(kExternalTypedDataUint8ArrayCid, |
| 654 ExternalTypedData::InstanceSize())); | 654 ExternalTypedData::InstanceSize())); |
| 655 data_.SetData(array); | 655 data_.SetData(array); |
| 656 data_.SetLength(len); | 656 data_.SetLength(len); |
| 657 stream_.SetStream(data_); | 657 stream_.SetStream(data_); |
| 658 return stream_.raw(); | 658 return stream_.raw(); |
| 659 } | 659 } |
| 660 | 660 |
| 661 | 661 |
| 662 RawContext* SnapshotReader::NewContext(intptr_t num_variables) { | 662 RawContext* SnapshotReader::NewContext(intptr_t num_variables) { |
| 663 ASSERT(kind_ == Snapshot::kFull); | 663 ASSERT(kind_ == Snapshot::kFull); |
| 664 ASSERT(isolate()->no_safepoint_scope_depth() != 0); | 664 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); |
| 665 RawContext* obj = reinterpret_cast<RawContext*>( | 665 RawContext* obj = reinterpret_cast<RawContext*>( |
| 666 AllocateUninitialized(kContextCid, Context::InstanceSize(num_variables))); | 666 AllocateUninitialized(kContextCid, Context::InstanceSize(num_variables))); |
| 667 obj->ptr()->num_variables_ = num_variables; | 667 obj->ptr()->num_variables_ = num_variables; |
| 668 return obj; | 668 return obj; |
| 669 } | 669 } |
| 670 | 670 |
| 671 | 671 |
| 672 RawClass* SnapshotReader::NewClass(intptr_t class_id) { | 672 RawClass* SnapshotReader::NewClass(intptr_t class_id) { |
| 673 ASSERT(kind_ == Snapshot::kFull); | 673 ASSERT(kind_ == Snapshot::kFull); |
| 674 ASSERT(isolate()->no_safepoint_scope_depth() != 0); | 674 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); |
| 675 if (class_id < kNumPredefinedCids) { | 675 if (class_id < kNumPredefinedCids) { |
| 676 ASSERT((class_id >= kInstanceCid) && | 676 ASSERT((class_id >= kInstanceCid) && |
| 677 (class_id <= kNullCid)); | 677 (class_id <= kNullCid)); |
| 678 return isolate()->class_table()->At(class_id); | 678 return isolate()->class_table()->At(class_id); |
| 679 } | 679 } |
| 680 RawClass* obj = reinterpret_cast<RawClass*>( | 680 RawClass* obj = reinterpret_cast<RawClass*>( |
| 681 AllocateUninitialized(kClassCid, Class::InstanceSize())); | 681 AllocateUninitialized(kClassCid, Class::InstanceSize())); |
| 682 Instance fake; | 682 Instance fake; |
| 683 obj->ptr()->handle_vtable_ = fake.vtable(); | 683 obj->ptr()->handle_vtable_ = fake.vtable(); |
| 684 cls_ = obj; | 684 cls_ = obj; |
| 685 cls_.set_id(class_id); | 685 cls_.set_id(class_id); |
| 686 isolate()->RegisterClassAt(class_id, cls_); | 686 isolate()->RegisterClassAt(class_id, cls_); |
| 687 return cls_.raw(); | 687 return cls_.raw(); |
| 688 } | 688 } |
| 689 | 689 |
| 690 | 690 |
| 691 RawInstance* SnapshotReader::NewInstance() { | 691 RawInstance* SnapshotReader::NewInstance() { |
| 692 ASSERT(kind_ == Snapshot::kFull); | 692 ASSERT(kind_ == Snapshot::kFull); |
| 693 ASSERT(isolate()->no_safepoint_scope_depth() != 0); | 693 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); |
| 694 RawInstance* obj = reinterpret_cast<RawInstance*>( | 694 RawInstance* obj = reinterpret_cast<RawInstance*>( |
| 695 AllocateUninitialized(kObjectCid, Instance::InstanceSize())); | 695 AllocateUninitialized(kObjectCid, Instance::InstanceSize())); |
| 696 return obj; | 696 return obj; |
| 697 } | 697 } |
| 698 | 698 |
| 699 | 699 |
| 700 RawMint* SnapshotReader::NewMint(int64_t value) { | 700 RawMint* SnapshotReader::NewMint(int64_t value) { |
| 701 ASSERT(kind_ == Snapshot::kFull); | 701 ASSERT(kind_ == Snapshot::kFull); |
| 702 ASSERT(isolate()->no_safepoint_scope_depth() != 0); | 702 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); |
| 703 RawMint* obj = reinterpret_cast<RawMint*>( | 703 RawMint* obj = reinterpret_cast<RawMint*>( |
| 704 AllocateUninitialized(kMintCid, Mint::InstanceSize())); | 704 AllocateUninitialized(kMintCid, Mint::InstanceSize())); |
| 705 obj->ptr()->value_ = value; | 705 obj->ptr()->value_ = value; |
| 706 return obj; | 706 return obj; |
| 707 } | 707 } |
| 708 | 708 |
| 709 | 709 |
| 710 RawDouble* SnapshotReader::NewDouble(double value) { | 710 RawDouble* SnapshotReader::NewDouble(double value) { |
| 711 ASSERT(kind_ == Snapshot::kFull); | 711 ASSERT(kind_ == Snapshot::kFull); |
| 712 ASSERT(isolate()->no_safepoint_scope_depth() != 0); | 712 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); |
| 713 RawDouble* obj = reinterpret_cast<RawDouble*>( | 713 RawDouble* obj = reinterpret_cast<RawDouble*>( |
| 714 AllocateUninitialized(kDoubleCid, Double::InstanceSize())); | 714 AllocateUninitialized(kDoubleCid, Double::InstanceSize())); |
| 715 obj->ptr()->value_ = value; | 715 obj->ptr()->value_ = value; |
| 716 return obj; | 716 return obj; |
| 717 } | 717 } |
| 718 | 718 |
| 719 | 719 |
| 720 RawTypedData* SnapshotReader::NewTypedData(intptr_t class_id, intptr_t len) { | 720 RawTypedData* SnapshotReader::NewTypedData(intptr_t class_id, intptr_t len) { |
| 721 ASSERT(kind_ == Snapshot::kFull); | 721 ASSERT(kind_ == Snapshot::kFull); |
| 722 ASSERT(isolate()->no_safepoint_scope_depth() != 0); | 722 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); |
| 723 const intptr_t lengthInBytes = len * TypedData::ElementSizeInBytes(class_id); | 723 const intptr_t lengthInBytes = len * TypedData::ElementSizeInBytes(class_id); |
| 724 RawTypedData* obj = reinterpret_cast<RawTypedData*>( | 724 RawTypedData* obj = reinterpret_cast<RawTypedData*>( |
| 725 AllocateUninitialized(class_id, TypedData::InstanceSize(lengthInBytes))); | 725 AllocateUninitialized(class_id, TypedData::InstanceSize(lengthInBytes))); |
| 726 obj->StoreSmi(&(obj->ptr()->length_), Smi::New(len)); | 726 obj->StoreSmi(&(obj->ptr()->length_), Smi::New(len)); |
| 727 return obj; | 727 return obj; |
| 728 } | 728 } |
| 729 | 729 |
| 730 | 730 |
| 731 #define ALLOC_NEW_OBJECT(type) \ | 731 #define ALLOC_NEW_OBJECT(type) \ |
| 732 ASSERT(kind_ == Snapshot::kFull); \ | 732 ASSERT(kind_ == Snapshot::kFull); \ |
| 733 ASSERT(isolate()->no_safepoint_scope_depth() != 0); \ | 733 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); \ |
| 734 return reinterpret_cast<Raw##type*>( \ | 734 return reinterpret_cast<Raw##type*>( \ |
| 735 AllocateUninitialized(k##type##Cid, type::InstanceSize())); \ | 735 AllocateUninitialized(k##type##Cid, type::InstanceSize())); \ |
| 736 | 736 |
| 737 | 737 |
| 738 RawBigint* SnapshotReader::NewBigint() { | 738 RawBigint* SnapshotReader::NewBigint() { |
| 739 ALLOC_NEW_OBJECT(Bigint); | 739 ALLOC_NEW_OBJECT(Bigint); |
| 740 } | 740 } |
| 741 | 741 |
| 742 | 742 |
| 743 RawUnresolvedClass* SnapshotReader::NewUnresolvedClass() { | 743 RawUnresolvedClass* SnapshotReader::NewUnresolvedClass() { |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 821 | 821 |
| 822 | 822 |
| 823 RawGrowableObjectArray* SnapshotReader::NewGrowableObjectArray() { | 823 RawGrowableObjectArray* SnapshotReader::NewGrowableObjectArray() { |
| 824 ALLOC_NEW_OBJECT(GrowableObjectArray); | 824 ALLOC_NEW_OBJECT(GrowableObjectArray); |
| 825 } | 825 } |
| 826 | 826 |
| 827 | 827 |
| 828 RawFloat32x4* SnapshotReader::NewFloat32x4(float v0, float v1, float v2, | 828 RawFloat32x4* SnapshotReader::NewFloat32x4(float v0, float v1, float v2, |
| 829 float v3) { | 829 float v3) { |
| 830 ASSERT(kind_ == Snapshot::kFull); | 830 ASSERT(kind_ == Snapshot::kFull); |
| 831 ASSERT(isolate()->no_safepoint_scope_depth() != 0); | 831 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); |
| 832 RawFloat32x4* obj = reinterpret_cast<RawFloat32x4*>( | 832 RawFloat32x4* obj = reinterpret_cast<RawFloat32x4*>( |
| 833 AllocateUninitialized(kFloat32x4Cid, Float32x4::InstanceSize())); | 833 AllocateUninitialized(kFloat32x4Cid, Float32x4::InstanceSize())); |
| 834 obj->ptr()->value_[0] = v0; | 834 obj->ptr()->value_[0] = v0; |
| 835 obj->ptr()->value_[1] = v1; | 835 obj->ptr()->value_[1] = v1; |
| 836 obj->ptr()->value_[2] = v2; | 836 obj->ptr()->value_[2] = v2; |
| 837 obj->ptr()->value_[3] = v3; | 837 obj->ptr()->value_[3] = v3; |
| 838 return obj; | 838 return obj; |
| 839 } | 839 } |
| 840 | 840 |
| 841 | 841 |
| 842 RawInt32x4* SnapshotReader::NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2, | 842 RawInt32x4* SnapshotReader::NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2, |
| 843 uint32_t v3) { | 843 uint32_t v3) { |
| 844 ASSERT(kind_ == Snapshot::kFull); | 844 ASSERT(kind_ == Snapshot::kFull); |
| 845 ASSERT(isolate()->no_safepoint_scope_depth() != 0); | 845 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); |
| 846 RawInt32x4* obj = reinterpret_cast<RawInt32x4*>( | 846 RawInt32x4* obj = reinterpret_cast<RawInt32x4*>( |
| 847 AllocateUninitialized(kInt32x4Cid, Int32x4::InstanceSize())); | 847 AllocateUninitialized(kInt32x4Cid, Int32x4::InstanceSize())); |
| 848 obj->ptr()->value_[0] = v0; | 848 obj->ptr()->value_[0] = v0; |
| 849 obj->ptr()->value_[1] = v1; | 849 obj->ptr()->value_[1] = v1; |
| 850 obj->ptr()->value_[2] = v2; | 850 obj->ptr()->value_[2] = v2; |
| 851 obj->ptr()->value_[3] = v3; | 851 obj->ptr()->value_[3] = v3; |
| 852 return obj; | 852 return obj; |
| 853 } | 853 } |
| 854 | 854 |
| 855 | 855 |
| 856 RawFloat64x2* SnapshotReader::NewFloat64x2(double v0, double v1) { | 856 RawFloat64x2* SnapshotReader::NewFloat64x2(double v0, double v1) { |
| 857 ASSERT(kind_ == Snapshot::kFull); | 857 ASSERT(kind_ == Snapshot::kFull); |
| 858 ASSERT(isolate()->no_safepoint_scope_depth() != 0); | 858 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); |
| 859 RawFloat64x2* obj = reinterpret_cast<RawFloat64x2*>( | 859 RawFloat64x2* obj = reinterpret_cast<RawFloat64x2*>( |
| 860 AllocateUninitialized(kFloat64x2Cid, Float64x2::InstanceSize())); | 860 AllocateUninitialized(kFloat64x2Cid, Float64x2::InstanceSize())); |
| 861 obj->ptr()->value_[0] = v0; | 861 obj->ptr()->value_[0] = v0; |
| 862 obj->ptr()->value_[1] = v1; | 862 obj->ptr()->value_[1] = v1; |
| 863 return obj; | 863 return obj; |
| 864 } | 864 } |
| 865 | 865 |
| 866 | 866 |
| 867 RawApiError* SnapshotReader::NewApiError() { | 867 RawApiError* SnapshotReader::NewApiError() { |
| 868 ALLOC_NEW_OBJECT(ApiError); | 868 ALLOC_NEW_OBJECT(ApiError); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 907 } | 907 } |
| 908 ASSERT(SerializedHeaderTag::decode(class_header) == kObjectId); | 908 ASSERT(SerializedHeaderTag::decode(class_header) == kObjectId); |
| 909 intptr_t class_id = SerializedHeaderData::decode(class_header); | 909 intptr_t class_id = SerializedHeaderData::decode(class_header); |
| 910 ASSERT(IsObjectStoreClassId(class_id)); | 910 ASSERT(IsObjectStoreClassId(class_id)); |
| 911 return class_id; | 911 return class_id; |
| 912 } | 912 } |
| 913 | 913 |
| 914 | 914 |
| 915 RawObject* SnapshotReader::AllocateUninitialized(intptr_t class_id, | 915 RawObject* SnapshotReader::AllocateUninitialized(intptr_t class_id, |
| 916 intptr_t size) { | 916 intptr_t size) { |
| 917 ASSERT(isolate()->no_safepoint_scope_depth() != 0); | 917 ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0); |
| 918 ASSERT(Utils::IsAligned(size, kObjectAlignment)); | 918 ASSERT(Utils::IsAligned(size, kObjectAlignment)); |
| 919 | 919 |
| 920 // Allocate memory where all words look like smis. This is currently | 920 // Allocate memory where all words look like smis. This is currently |
| 921 // only needed for DEBUG-mode validation in StorePointer/StoreSmi, but will | 921 // only needed for DEBUG-mode validation in StorePointer/StoreSmi, but will |
| 922 // be essential with the upcoming deletion barrier. | 922 // be essential with the upcoming deletion barrier. |
| 923 uword address = | 923 uword address = |
| 924 old_space()->TryAllocateSmiInitializedLocked(size, | 924 old_space()->TryAllocateSmiInitializedLocked(size, |
| 925 PageSpace::kForceGrowth); | 925 PageSpace::kForceGrowth); |
| 926 if (address == 0) { | 926 if (address == 0) { |
| 927 // Use the preallocated out of memory exception to avoid calling | 927 // Use the preallocated out of memory exception to avoid calling |
| (...skipping 768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1696 } | 1696 } |
| 1697 } | 1697 } |
| 1698 | 1698 |
| 1699 | 1699 |
| 1700 ForwardList::ForwardList(intptr_t first_object_id) | 1700 ForwardList::ForwardList(intptr_t first_object_id) |
| 1701 : first_object_id_(first_object_id), | 1701 : first_object_id_(first_object_id), |
| 1702 nodes_(), | 1702 nodes_(), |
| 1703 first_unprocessed_object_id_(first_object_id) { | 1703 first_unprocessed_object_id_(first_object_id) { |
| 1704 // The ForwardList encodes information in the header tag word. There cannot | 1704 // The ForwardList encodes information in the header tag word. There cannot |
| 1705 // be any concurrent GC tasks while it is in use. | 1705 // be any concurrent GC tasks while it is in use. |
| 1706 Isolate* isolate = Isolate::Current(); | 1706 Thread* thread = Thread::Current(); |
| 1707 Isolate* isolate = thread->isolate(); | |
| 1707 PageSpace* page_space = isolate->heap()->old_space(); | 1708 PageSpace* page_space = isolate->heap()->old_space(); |
| 1708 MonitorLocker ml(page_space->tasks_lock()); | 1709 MonitorLocker ml(page_space->tasks_lock()); |
| 1709 while (page_space->tasks() > 0) { | 1710 while (page_space->tasks() > 0) { |
| 1710 ml.Wait(); | 1711 ml.Wait(); |
| 1711 } | 1712 } |
| 1712 // Ensure that no GC happens while we are writing out the full snapshot. | 1713 // Ensure that no GC happens while we are writing out the full snapshot. |
| 1713 isolate->IncrementNoSafepointScopeDepth(); | 1714 thread->IncrementNoSafepointScopeDepth(); |
| 1714 } | 1715 } |
| 1715 | 1716 |
| 1716 | 1717 |
| 1717 ForwardList::~ForwardList() { | 1718 ForwardList::~ForwardList() { |
| 1718 } | 1719 } |
| 1719 | 1720 |
| 1720 | 1721 |
| 1721 intptr_t ForwardList::MarkAndAddObject(RawObject* raw, SerializeState state) { | 1722 intptr_t ForwardList::MarkAndAddObject(RawObject* raw, SerializeState state) { |
| 1722 NoSafepointScope no_safepoint; | 1723 NoSafepointScope no_safepoint; |
| 1723 intptr_t object_id = next_object_id(); | 1724 intptr_t object_id = next_object_id(); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1762 | 1763 |
| 1763 | 1764 |
| 1764 void ForwardList::UnmarkAll() const { | 1765 void ForwardList::UnmarkAll() const { |
| 1765 for (intptr_t id = first_object_id(); id < next_object_id(); ++id) { | 1766 for (intptr_t id = first_object_id(); id < next_object_id(); ++id) { |
| 1766 const Node* node = NodeForObjectId(id); | 1767 const Node* node = NodeForObjectId(id); |
| 1767 RawObject* raw = node->raw(); | 1768 RawObject* raw = node->raw(); |
| 1768 if (SerializedHeaderTag::decode(raw->ptr()->tags_) == kObjectId) { | 1769 if (SerializedHeaderTag::decode(raw->ptr()->tags_) == kObjectId) { |
| 1769 raw->ptr()->tags_ = node->tags(); // Restore original tags. | 1770 raw->ptr()->tags_ = node->tags(); // Restore original tags. |
| 1770 } | 1771 } |
| 1771 } | 1772 } |
| 1772 Isolate::Current()->DecrementNoSafepointScopeDepth(); | 1773 Thread::Current()->DecrementNoSafepointScopeDepth(); |
| 1773 } | 1774 } |
| 1774 | 1775 |
| 1775 | 1776 |
| 1776 bool SnapshotWriter::CheckAndWritePredefinedObject(RawObject* rawobj) { | 1777 bool SnapshotWriter::CheckAndWritePredefinedObject(RawObject* rawobj) { |
| 1777 // Check if object can be written in one of the following ways: | 1778 // Check if object can be written in one of the following ways: |
| 1778 // - Smi: the Smi value is written as is (last bit is not tagged). | 1779 // - Smi: the Smi value is written as is (last bit is not tagged). |
| 1779 // - VM internal class (from VM isolate): (index of class in vm isolate | 0x3) | 1780 // - VM internal class (from VM isolate): (index of class in vm isolate | 0x3) |
| 1780 // - Object that has already been written: (negative id in stream | 0x3) | 1781 // - Object that has already been written: (negative id in stream | 0x3) |
| 1781 | 1782 |
| 1782 NoSafepointScope no_safepoint; | 1783 NoSafepointScope no_safepoint; |
| (...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2342 NoSafepointScope no_safepoint; | 2343 NoSafepointScope no_safepoint; |
| 2343 WriteObject(obj.raw()); | 2344 WriteObject(obj.raw()); |
| 2344 UnmarkAll(); | 2345 UnmarkAll(); |
| 2345 } else { | 2346 } else { |
| 2346 ThrowException(exception_type(), exception_msg()); | 2347 ThrowException(exception_type(), exception_msg()); |
| 2347 } | 2348 } |
| 2348 } | 2349 } |
| 2349 | 2350 |
| 2350 | 2351 |
| 2351 } // namespace dart | 2352 } // namespace dart |
| OLD | NEW |