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

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

Issue 2622053002: Refactor snapshots pieces to include a section for loading instructions into the heap of a regular … (Closed)
Patch Set: Restore --print-snapshot-sizes Created 3 years, 11 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
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/become.h" 10 #include "vm/become.h"
(...skipping 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 cls = isolate->class_table()->At(kFreeListElement); 1043 cls = isolate->class_table()->At(kFreeListElement);
1044 cls.set_name(Symbols::FreeListElement()); 1044 cls.set_name(Symbols::FreeListElement());
1045 cls = isolate->class_table()->At(kForwardingCorpse); 1045 cls = isolate->class_table()->At(kForwardingCorpse);
1046 cls.set_name(Symbols::ForwardingCorpse()); 1046 cls.set_name(Symbols::ForwardingCorpse());
1047 1047
1048 { 1048 {
1049 ASSERT(isolate == Dart::vm_isolate()); 1049 ASSERT(isolate == Dart::vm_isolate());
1050 WritableVMIsolateScope scope(Thread::Current()); 1050 WritableVMIsolateScope scope(Thread::Current());
1051 PremarkingVisitor premarker; 1051 PremarkingVisitor premarker;
1052 ASSERT(isolate->heap()->UsedInWords(Heap::kNew) == 0); 1052 ASSERT(isolate->heap()->UsedInWords(Heap::kNew) == 0);
1053 isolate->heap()->IterateOldObjectsNoEmbedderPages(&premarker); 1053 isolate->heap()->IterateOldObjectsNoExternalPages(&premarker);
1054 // Make the VM isolate read-only again after setting all objects as marked. 1054 // Make the VM isolate read-only again after setting all objects as marked.
1055 } 1055 }
1056 } 1056 }
1057 1057
1058 1058
1059 void Object::set_vm_isolate_snapshot_object_table(const Array& table) { 1059 void Object::set_vm_isolate_snapshot_object_table(const Array& table) {
1060 ASSERT(Isolate::Current() == Dart::vm_isolate()); 1060 ASSERT(Isolate::Current() == Dart::vm_isolate());
1061 *vm_isolate_snapshot_object_table_ = table.raw(); 1061 *vm_isolate_snapshot_object_table_ = table.raw();
1062 } 1062 }
1063 1063
(...skipping 2429 matching lines...) Expand 10 before | Expand all | Expand 10 after
3493 if (largest_seen < function.end_token_pos()) { 3493 if (largest_seen < function.end_token_pos()) {
3494 largest_seen = function.end_token_pos(); 3494 largest_seen = function.end_token_pos();
3495 } 3495 }
3496 } 3496 }
3497 } 3497 }
3498 return TokenPosition(largest_seen); 3498 return TokenPosition(largest_seen);
3499 } 3499 }
3500 3500
3501 const TokenStream& tkns = TokenStream::Handle(zone, scr.tokens()); 3501 const TokenStream& tkns = TokenStream::Handle(zone, scr.tokens());
3502 if (tkns.IsNull()) { 3502 if (tkns.IsNull()) {
3503 ASSERT(Dart::snapshot_kind() == Snapshot::kAppAOT); 3503 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT);
3504 return TokenPosition::kNoSource; 3504 return TokenPosition::kNoSource;
3505 } 3505 }
3506 TokenStream::Iterator tkit(zone, tkns, token_pos(), 3506 TokenStream::Iterator tkit(zone, tkns, token_pos(),
3507 TokenStream::Iterator::kNoNewlines); 3507 TokenStream::Iterator::kNoNewlines);
3508 intptr_t level = 0; 3508 intptr_t level = 0;
3509 while (tkit.CurrentTokenKind() != Token::kEOS) { 3509 while (tkit.CurrentTokenKind() != Token::kEOS) {
3510 if (tkit.CurrentTokenKind() == Token::kLBRACE) { 3510 if (tkit.CurrentTokenKind() == Token::kLBRACE) {
3511 level++; 3511 level++;
3512 } else if (tkit.CurrentTokenKind() == Token::kRBRACE) { 3512 } else if (tkit.CurrentTokenKind() == Token::kRBRACE) {
3513 if (--level == 0) { 3513 if (--level == 0) {
(...skipping 4140 matching lines...) Expand 10 before | Expand all | Expand 10 after
7654 } 7654 }
7655 7655
7656 7656
7657 RawString* Field::InitializingExpression() const { 7657 RawString* Field::InitializingExpression() const {
7658 Thread* thread = Thread::Current(); 7658 Thread* thread = Thread::Current();
7659 Zone* zone = thread->zone(); 7659 Zone* zone = thread->zone();
7660 const class Script& scr = Script::Handle(zone, Script()); 7660 const class Script& scr = Script::Handle(zone, Script());
7661 ASSERT(!scr.IsNull()); 7661 ASSERT(!scr.IsNull());
7662 const TokenStream& tkns = TokenStream::Handle(zone, scr.tokens()); 7662 const TokenStream& tkns = TokenStream::Handle(zone, scr.tokens());
7663 if (tkns.IsNull()) { 7663 if (tkns.IsNull()) {
7664 ASSERT(Dart::snapshot_kind() == Snapshot::kAppAOT); 7664 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT);
7665 return String::null(); 7665 return String::null();
7666 } 7666 }
7667 TokenStream::Iterator tkit(zone, tkns, token_pos()); 7667 TokenStream::Iterator tkit(zone, tkns, token_pos());
7668 ASSERT(Token::IsIdentifier(tkit.CurrentTokenKind())); 7668 ASSERT(Token::IsIdentifier(tkit.CurrentTokenKind()));
7669 #if defined(DEBUG) 7669 #if defined(DEBUG)
7670 const String& literal = String::Handle(zone, tkit.CurrentLiteral()); 7670 const String& literal = String::Handle(zone, tkit.CurrentLiteral());
7671 ASSERT(literal.raw() == name()); 7671 ASSERT(literal.raw() == name());
7672 #endif 7672 #endif
7673 tkit.Advance(); 7673 tkit.Advance();
7674 if (tkit.CurrentTokenKind() != Token::kASSIGN) { 7674 if (tkit.CurrentTokenKind() != Token::kASSIGN) {
(...skipping 1132 matching lines...) Expand 10 before | Expand all | Expand 10 after
8807 8807
8808 8808
8809 RawString* Script::GenerateSource() const { 8809 RawString* Script::GenerateSource() const {
8810 if (kind() == RawScript::kKernelTag) { 8810 if (kind() == RawScript::kKernelTag) {
8811 // In kernel it's embedded. 8811 // In kernel it's embedded.
8812 return raw_ptr()->source_; 8812 return raw_ptr()->source_;
8813 } 8813 }
8814 8814
8815 const TokenStream& token_stream = TokenStream::Handle(tokens()); 8815 const TokenStream& token_stream = TokenStream::Handle(tokens());
8816 if (token_stream.IsNull()) { 8816 if (token_stream.IsNull()) {
8817 ASSERT(Dart::snapshot_kind() == Snapshot::kAppAOT); 8817 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT);
8818 return String::null(); 8818 return String::null();
8819 } 8819 }
8820 return token_stream.GenerateSource(); 8820 return token_stream.GenerateSource();
8821 } 8821 }
8822 8822
8823 8823
8824 void Script::set_compile_time_constants(const Array& value) const { 8824 void Script::set_compile_time_constants(const Array& value) const {
8825 StorePointer(&raw_ptr()->compile_time_constants_, value.raw()); 8825 StorePointer(&raw_ptr()->compile_time_constants_, value.raw());
8826 } 8826 }
8827 8827
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
9064 *column = offset - smi.Value() + 1; 9064 *column = offset - smi.Value() + 1;
9065 } 9065 }
9066 if (token_len != NULL) { 9066 if (token_len != NULL) {
9067 *token_len = 1; 9067 *token_len = 1;
9068 } 9068 }
9069 return; 9069 return;
9070 } 9070 }
9071 9071
9072 const TokenStream& tkns = TokenStream::Handle(zone, tokens()); 9072 const TokenStream& tkns = TokenStream::Handle(zone, tokens());
9073 if (tkns.IsNull()) { 9073 if (tkns.IsNull()) {
9074 ASSERT((Dart::snapshot_kind() == Snapshot::kAppAOT)); 9074 ASSERT((Dart::vm_snapshot_kind() == Snapshot::kAppAOT));
9075 *line = -1; 9075 *line = -1;
9076 if (column != NULL) { 9076 if (column != NULL) {
9077 *column = -1; 9077 *column = -1;
9078 } 9078 }
9079 if (token_len != NULL) { 9079 if (token_len != NULL) {
9080 *token_len = 1; 9080 *token_len = 1;
9081 } 9081 }
9082 return; 9082 return;
9083 } 9083 }
9084 if (column == NULL) { 9084 if (column == NULL) {
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
9222 } 9222 }
9223 result = result & ((static_cast<uint32_t>(1) << 31) - 1); 9223 result = result & ((static_cast<uint32_t>(1) << 31) - 1);
9224 ASSERT(result <= static_cast<uint32_t>(kMaxInt32)); 9224 ASSERT(result <= static_cast<uint32_t>(kMaxInt32));
9225 return result; 9225 return result;
9226 } 9226 }
9227 9227
9228 9228
9229 RawString* Script::GetLine(intptr_t line_number, Heap::Space space) const { 9229 RawString* Script::GetLine(intptr_t line_number, Heap::Space space) const {
9230 const String& src = String::Handle(Source()); 9230 const String& src = String::Handle(Source());
9231 if (src.IsNull()) { 9231 if (src.IsNull()) {
9232 ASSERT(Dart::snapshot_kind() == Snapshot::kAppAOT); 9232 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT);
9233 return Symbols::OptimizedOut().raw(); 9233 return Symbols::OptimizedOut().raw();
9234 } 9234 }
9235 intptr_t relative_line_number = line_number - line_offset(); 9235 intptr_t relative_line_number = line_number - line_offset();
9236 intptr_t current_line = 1; 9236 intptr_t current_line = 1;
9237 intptr_t line_start_idx = -1; 9237 intptr_t line_start_idx = -1;
9238 intptr_t last_char_idx = -1; 9238 intptr_t last_char_idx = -1;
9239 for (intptr_t ix = 0; 9239 for (intptr_t ix = 0;
9240 (ix < src.Length()) && (current_line <= relative_line_number); ix++) { 9240 (ix < src.Length()) && (current_line <= relative_line_number); ix++) {
9241 if ((current_line == relative_line_number) && (line_start_idx < 0)) { 9241 if ((current_line == relative_line_number) && (line_start_idx < 0)) {
9242 line_start_idx = ix; 9242 line_start_idx = ix;
(...skipping 29 matching lines...) Expand all
9272 return GetSnippet(from_line, from_column, to_line, to_column); 9272 return GetSnippet(from_line, from_column, to_line, to_column);
9273 } 9273 }
9274 9274
9275 9275
9276 RawString* Script::GetSnippet(intptr_t from_line, 9276 RawString* Script::GetSnippet(intptr_t from_line,
9277 intptr_t from_column, 9277 intptr_t from_column,
9278 intptr_t to_line, 9278 intptr_t to_line,
9279 intptr_t to_column) const { 9279 intptr_t to_column) const {
9280 const String& src = String::Handle(Source()); 9280 const String& src = String::Handle(Source());
9281 if (src.IsNull()) { 9281 if (src.IsNull()) {
9282 ASSERT(Dart::snapshot_kind() == Snapshot::kAppAOT); 9282 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT);
9283 return Symbols::OptimizedOut().raw(); 9283 return Symbols::OptimizedOut().raw();
9284 } 9284 }
9285 intptr_t length = src.Length(); 9285 intptr_t length = src.Length();
9286 intptr_t line = 1 + line_offset(); 9286 intptr_t line = 1 + line_offset();
9287 intptr_t column = 1; 9287 intptr_t column = 1;
9288 intptr_t scan_position = 0; 9288 intptr_t scan_position = 0;
9289 intptr_t snippet_start = -1; 9289 intptr_t snippet_start = -1;
9290 intptr_t snippet_end = -1; 9290 intptr_t snippet_end = -1;
9291 if (from_line - line_offset() == 1) { 9291 if (from_line - line_offset() == 1) {
9292 column += col_offset(); 9292 column += col_offset();
(...skipping 1893 matching lines...) Expand 10 before | Expand all | Expand 10 after
11186 11186
11187 11187
11188 bool LibraryPrefix::LoadLibrary() const { 11188 bool LibraryPrefix::LoadLibrary() const {
11189 // Non-deferred prefixes are loaded. 11189 // Non-deferred prefixes are loaded.
11190 ASSERT(is_deferred_load() || is_loaded()); 11190 ASSERT(is_deferred_load() || is_loaded());
11191 if (is_loaded()) { 11191 if (is_loaded()) {
11192 return true; // Load request has already completed. 11192 return true; // Load request has already completed.
11193 } 11193 }
11194 ASSERT(is_deferred_load()); 11194 ASSERT(is_deferred_load());
11195 ASSERT(num_imports() == 1); 11195 ASSERT(num_imports() == 1);
11196 if (Dart::snapshot_kind() == Snapshot::kAppAOT) { 11196 if (Dart::vm_snapshot_kind() == Snapshot::kAppAOT) {
11197 // The library list was tree-shaken away. 11197 // The library list was tree-shaken away.
11198 this->set_is_loaded(); 11198 this->set_is_loaded();
11199 return true; 11199 return true;
11200 } 11200 }
11201 // This is a prefix for a deferred library. If the library is not loaded 11201 // This is a prefix for a deferred library. If the library is not loaded
11202 // yet and isn't being loaded, call the library tag handler to schedule 11202 // yet and isn't being loaded, call the library tag handler to schedule
11203 // loading. Once all outstanding load requests have completed, the embedder 11203 // loading. Once all outstanding load requests have completed, the embedder
11204 // will call the core library to: 11204 // will call the core library to:
11205 // - invalidate dependent code of this prefix; 11205 // - invalidate dependent code of this prefix;
11206 // - mark this prefixes as loaded; 11206 // - mark this prefixes as loaded;
(...skipping 1582 matching lines...) Expand 10 before | Expand all | Expand 10 after
12789 const intptr_t num_checks = NumberOfChecks(); 12789 const intptr_t num_checks = NumberOfChecks();
12790 return OS::SCreate(Thread::Current()->zone(), 12790 return OS::SCreate(Thread::Current()->zone(),
12791 "ICData target:'%s' num-args: %" Pd " num-checks: %" Pd "", 12791 "ICData target:'%s' num-args: %" Pd " num-checks: %" Pd "",
12792 name.ToCString(), num_args, num_checks); 12792 name.ToCString(), num_args, num_checks);
12793 } 12793 }
12794 12794
12795 12795
12796 RawFunction* ICData::Owner() const { 12796 RawFunction* ICData::Owner() const {
12797 Object& obj = Object::Handle(raw_ptr()->owner_); 12797 Object& obj = Object::Handle(raw_ptr()->owner_);
12798 if (obj.IsNull()) { 12798 if (obj.IsNull()) {
12799 ASSERT(Dart::snapshot_kind() == Snapshot::kAppAOT); 12799 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT);
12800 return Function::null(); 12800 return Function::null();
12801 } else if (obj.IsFunction()) { 12801 } else if (obj.IsFunction()) {
12802 return Function::Cast(obj).raw(); 12802 return Function::Cast(obj).raw();
12803 } else { 12803 } else {
12804 ICData& original = ICData::Handle(); 12804 ICData& original = ICData::Handle();
12805 original ^= obj.raw(); 12805 original ^= obj.raw();
12806 return original.Owner(); 12806 return original.Owner();
12807 } 12807 }
12808 } 12808 }
12809 12809
(...skipping 1167 matching lines...) Expand 10 before | Expand all | Expand 10 after
13977 13977
13978 13978
13979 RawTypedData* Code::GetDeoptInfoAtPc(uword pc, 13979 RawTypedData* Code::GetDeoptInfoAtPc(uword pc,
13980 ICData::DeoptReasonId* deopt_reason, 13980 ICData::DeoptReasonId* deopt_reason,
13981 uint32_t* deopt_flags) const { 13981 uint32_t* deopt_flags) const {
13982 ASSERT(is_optimized()); 13982 ASSERT(is_optimized());
13983 const Instructions& instrs = Instructions::Handle(instructions()); 13983 const Instructions& instrs = Instructions::Handle(instructions());
13984 uword code_entry = instrs.PayloadStart(); 13984 uword code_entry = instrs.PayloadStart();
13985 const Array& table = Array::Handle(deopt_info_array()); 13985 const Array& table = Array::Handle(deopt_info_array());
13986 if (table.IsNull()) { 13986 if (table.IsNull()) {
13987 ASSERT(Dart::snapshot_kind() == Snapshot::kAppAOT); 13987 ASSERT(Dart::vm_snapshot_kind() == Snapshot::kAppAOT);
13988 return TypedData::null(); 13988 return TypedData::null();
13989 } 13989 }
13990 // Linear search for the PC offset matching the target PC. 13990 // Linear search for the PC offset matching the target PC.
13991 intptr_t length = DeoptTable::GetLength(table); 13991 intptr_t length = DeoptTable::GetLength(table);
13992 Smi& offset = Smi::Handle(); 13992 Smi& offset = Smi::Handle();
13993 Smi& reason_and_flags = Smi::Handle(); 13993 Smi& reason_and_flags = Smi::Handle();
13994 TypedData& info = TypedData::Handle(); 13994 TypedData& info = TypedData::Handle();
13995 for (intptr_t i = 0; i < length; ++i) { 13995 for (intptr_t i = 0; i < length; ++i) {
13996 DeoptTable::GetEntry(table, i, &offset, &info, &reason_and_flags); 13996 DeoptTable::GetEntry(table, i, &offset, &info, &reason_and_flags);
13997 if (pc == (code_entry + offset.Value())) { 13997 if (pc == (code_entry + offset.Value())) {
(...skipping 9001 matching lines...) Expand 10 before | Expand all | Expand 10 after
22999 return UserTag::null(); 22999 return UserTag::null();
23000 } 23000 }
23001 23001
23002 23002
23003 const char* UserTag::ToCString() const { 23003 const char* UserTag::ToCString() const {
23004 const String& tag_label = String::Handle(label()); 23004 const String& tag_label = String::Handle(label());
23005 return tag_label.ToCString(); 23005 return tag_label.ToCString();
23006 } 23006 }
23007 23007
23008 } // namespace dart 23008 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698