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

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

Issue 1123813002: Move symbol table from per isolate snapshot to vm isolate snapshot, this reduces the per isolate in… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 7 months 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/object_store.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) 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/object.h" 5 #include "vm/object.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/cpu.h" 10 #include "vm/cpu.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 Array* Object::extractor_parameter_names_ = NULL; 102 Array* Object::extractor_parameter_names_ = NULL;
103 Instance* Object::sentinel_ = NULL; 103 Instance* Object::sentinel_ = NULL;
104 Instance* Object::transition_sentinel_ = NULL; 104 Instance* Object::transition_sentinel_ = NULL;
105 Instance* Object::unknown_constant_ = NULL; 105 Instance* Object::unknown_constant_ = NULL;
106 Instance* Object::non_constant_ = NULL; 106 Instance* Object::non_constant_ = NULL;
107 Bool* Object::bool_true_ = NULL; 107 Bool* Object::bool_true_ = NULL;
108 Bool* Object::bool_false_ = NULL; 108 Bool* Object::bool_false_ = NULL;
109 Smi* Object::smi_illegal_cid_ = NULL; 109 Smi* Object::smi_illegal_cid_ = NULL;
110 LanguageError* Object::snapshot_writer_error_ = NULL; 110 LanguageError* Object::snapshot_writer_error_ = NULL;
111 LanguageError* Object::branch_offset_error_ = NULL; 111 LanguageError* Object::branch_offset_error_ = NULL;
112 Array* Object::vm_isolate_snapshot_object_table_ = NULL;
112 113
113 RawObject* Object::null_ = reinterpret_cast<RawObject*>(RAW_NULL); 114 RawObject* Object::null_ = reinterpret_cast<RawObject*>(RAW_NULL);
114 RawClass* Object::class_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 115 RawClass* Object::class_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
115 RawClass* Object::dynamic_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 116 RawClass* Object::dynamic_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
116 RawClass* Object::void_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 117 RawClass* Object::void_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
117 RawType* Object::dynamic_type_ = reinterpret_cast<RawType*>(RAW_NULL); 118 RawType* Object::dynamic_type_ = reinterpret_cast<RawType*>(RAW_NULL);
118 RawType* Object::void_type_ = reinterpret_cast<RawType*>(RAW_NULL); 119 RawType* Object::void_type_ = reinterpret_cast<RawType*>(RAW_NULL);
119 RawClass* Object::unresolved_class_class_ = 120 RawClass* Object::unresolved_class_class_ =
120 reinterpret_cast<RawClass*>(RAW_NULL); 121 reinterpret_cast<RawClass*>(RAW_NULL);
121 RawClass* Object::type_arguments_class_ = reinterpret_cast<RawClass*>(RAW_NULL); 122 RawClass* Object::type_arguments_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 extractor_parameter_names_ = Array::ReadOnlyHandle(); 410 extractor_parameter_names_ = Array::ReadOnlyHandle();
410 sentinel_ = Instance::ReadOnlyHandle(); 411 sentinel_ = Instance::ReadOnlyHandle();
411 transition_sentinel_ = Instance::ReadOnlyHandle(); 412 transition_sentinel_ = Instance::ReadOnlyHandle();
412 unknown_constant_ = Instance::ReadOnlyHandle(); 413 unknown_constant_ = Instance::ReadOnlyHandle();
413 non_constant_ = Instance::ReadOnlyHandle(); 414 non_constant_ = Instance::ReadOnlyHandle();
414 bool_true_ = Bool::ReadOnlyHandle(); 415 bool_true_ = Bool::ReadOnlyHandle();
415 bool_false_ = Bool::ReadOnlyHandle(); 416 bool_false_ = Bool::ReadOnlyHandle();
416 smi_illegal_cid_ = Smi::ReadOnlyHandle(); 417 smi_illegal_cid_ = Smi::ReadOnlyHandle();
417 snapshot_writer_error_ = LanguageError::ReadOnlyHandle(); 418 snapshot_writer_error_ = LanguageError::ReadOnlyHandle();
418 branch_offset_error_ = LanguageError::ReadOnlyHandle(); 419 branch_offset_error_ = LanguageError::ReadOnlyHandle();
420 vm_isolate_snapshot_object_table_ = Array::ReadOnlyHandle();
419 421
420 422
421 // Allocate and initialize the null instance. 423 // Allocate and initialize the null instance.
422 // 'null_' must be the first object allocated as it is used in allocation to 424 // 'null_' must be the first object allocated as it is used in allocation to
423 // clear the object. 425 // clear the object.
424 { 426 {
425 uword address = heap->Allocate(Instance::InstanceSize(), Heap::kOld); 427 uword address = heap->Allocate(Instance::InstanceSize(), Heap::kOld);
426 null_ = reinterpret_cast<RawInstance*>(address + kHeapObjectTag); 428 null_ = reinterpret_cast<RawInstance*>(address + kHeapObjectTag);
427 // The call below is using 'null_' to initialize itself. 429 // The call below is using 'null_' to initialize itself.
428 InitializeObject(address, kNullCid, Instance::InstanceSize()); 430 InitializeObject(address, kNullCid, Instance::InstanceSize());
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 InitializeObject(address, 662 InitializeObject(address,
661 kExceptionHandlersCid, 663 kExceptionHandlersCid,
662 ExceptionHandlers::InstanceSize(0)); 664 ExceptionHandlers::InstanceSize(0));
663 ExceptionHandlers::initializeHandle( 665 ExceptionHandlers::initializeHandle(
664 empty_exception_handlers_, 666 empty_exception_handlers_,
665 reinterpret_cast<RawExceptionHandlers*>(address + kHeapObjectTag)); 667 reinterpret_cast<RawExceptionHandlers*>(address + kHeapObjectTag));
666 empty_exception_handlers_->StoreNonPointer( 668 empty_exception_handlers_->StoreNonPointer(
667 &empty_exception_handlers_->raw_ptr()->num_entries_, 0); 669 &empty_exception_handlers_->raw_ptr()->num_entries_, 0);
668 } 670 }
669 671
672 // The VM isolate snapshot object table is initialized to an empty array
673 // as we do not have any VM isolate snapshot at this time.
674 *vm_isolate_snapshot_object_table_ = Object::empty_array().raw();
675
670 cls = Class::New<Instance>(kDynamicCid); 676 cls = Class::New<Instance>(kDynamicCid);
671 cls.set_is_abstract(); 677 cls.set_is_abstract();
672 cls.set_num_type_arguments(0); 678 cls.set_num_type_arguments(0);
673 cls.set_num_own_type_arguments(0); 679 cls.set_num_own_type_arguments(0);
674 cls.set_is_type_finalized(); 680 cls.set_is_type_finalized();
675 cls.set_is_finalized(); 681 cls.set_is_finalized();
676 dynamic_class_ = cls.raw(); 682 dynamic_class_ = cls.raw();
677 683
678 cls = Class::New<Instance>(kVoidCid); 684 cls = Class::New<Instance>(kVoidCid);
679 cls.set_num_type_arguments(0); 685 cls.set_num_type_arguments(0);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 ASSERT(non_constant_->IsInstance()); 745 ASSERT(non_constant_->IsInstance());
740 ASSERT(!bool_true_->IsSmi()); 746 ASSERT(!bool_true_->IsSmi());
741 ASSERT(bool_true_->IsBool()); 747 ASSERT(bool_true_->IsBool());
742 ASSERT(!bool_false_->IsSmi()); 748 ASSERT(!bool_false_->IsSmi());
743 ASSERT(bool_false_->IsBool()); 749 ASSERT(bool_false_->IsBool());
744 ASSERT(smi_illegal_cid_->IsSmi()); 750 ASSERT(smi_illegal_cid_->IsSmi());
745 ASSERT(!snapshot_writer_error_->IsSmi()); 751 ASSERT(!snapshot_writer_error_->IsSmi());
746 ASSERT(snapshot_writer_error_->IsLanguageError()); 752 ASSERT(snapshot_writer_error_->IsLanguageError());
747 ASSERT(!branch_offset_error_->IsSmi()); 753 ASSERT(!branch_offset_error_->IsSmi());
748 ASSERT(branch_offset_error_->IsLanguageError()); 754 ASSERT(branch_offset_error_->IsLanguageError());
755 ASSERT(!vm_isolate_snapshot_object_table_->IsSmi());
756 ASSERT(vm_isolate_snapshot_object_table_->IsArray());
749 } 757 }
750 758
751 759
752 // An object visitor which will mark all visited objects. This is used to 760 // An object visitor which will mark all visited objects. This is used to
753 // premark all objects in the vm_isolate_ heap. 761 // premark all objects in the vm_isolate_ heap.
754 class PremarkingVisitor : public ObjectVisitor { 762 class PremarkingVisitor : public ObjectVisitor {
755 public: 763 public:
756 explicit PremarkingVisitor(Isolate* isolate) : ObjectVisitor(isolate) {} 764 explicit PremarkingVisitor(Isolate* isolate) : ObjectVisitor(isolate) {}
757 765
758 void VisitObject(RawObject* obj) { 766 void VisitObject(RawObject* obj) {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 836
829 // Make the VM isolate read-only after setting all objects as marked. 837 // Make the VM isolate read-only after setting all objects as marked.
830 PremarkingVisitor premarker(isolate); 838 PremarkingVisitor premarker(isolate);
831 isolate->heap()->WriteProtect(false); 839 isolate->heap()->WriteProtect(false);
832 ASSERT(isolate->heap()->UsedInWords(Heap::kNew) == 0); 840 ASSERT(isolate->heap()->UsedInWords(Heap::kNew) == 0);
833 isolate->heap()->old_space()->VisitObjects(&premarker); 841 isolate->heap()->old_space()->VisitObjects(&premarker);
834 isolate->heap()->WriteProtect(true); 842 isolate->heap()->WriteProtect(true);
835 } 843 }
836 844
837 845
846 void Object::InitVmIsolateSnapshotObjectTable(intptr_t len) {
847 ASSERT(Isolate::Current() == Dart::vm_isolate());
848 *vm_isolate_snapshot_object_table_ = Array::New(len, Heap::kOld);
849 }
850
851
838 // Make unused space in an object whose type has been transformed safe 852 // Make unused space in an object whose type has been transformed safe
839 // for traversing during GC. 853 // for traversing during GC.
840 // The unused part of the transformed object is marked as an TypedDataInt8Array 854 // The unused part of the transformed object is marked as an TypedDataInt8Array
841 // object. 855 // object.
842 void Object::MakeUnusedSpaceTraversable(const Object& obj, 856 void Object::MakeUnusedSpaceTraversable(const Object& obj,
843 intptr_t original_size, 857 intptr_t original_size,
844 intptr_t used_size) { 858 intptr_t used_size) {
845 ASSERT(Isolate::Current()->no_safepoint_scope_depth() > 0); 859 ASSERT(Isolate::Current()->no_safepoint_scope_depth() > 0);
846 ASSERT(!obj.IsNull()); 860 ASSERT(!obj.IsNull());
847 ASSERT(original_size >= used_size); 861 ASSERT(original_size >= used_size);
(...skipping 19857 matching lines...) Expand 10 before | Expand all | Expand 10 after
20705 return tag_label.ToCString(); 20719 return tag_label.ToCString();
20706 } 20720 }
20707 20721
20708 20722
20709 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 20723 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
20710 Instance::PrintJSONImpl(stream, ref); 20724 Instance::PrintJSONImpl(stream, ref);
20711 } 20725 }
20712 20726
20713 20727
20714 } // namespace dart 20728 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/object_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698