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

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

Issue 2993613002: [kernel] Make snapshotting work. (Closed)
Patch Set: Created 3 years, 4 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
« no previous file with comments | « runtime/tests/vm/vm.status ('k') | runtime/vm/raw_object.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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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/clustered_snapshot.h" 5 #include "vm/clustered_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 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 } else if (s->kind() == Snapshot::kFullJIT) { 544 } else if (s->kind() == Snapshot::kFullJIT) {
545 NOT_IN_PRECOMPILED(s->WriteRef(func->ptr()->unoptimized_code_)); 545 NOT_IN_PRECOMPILED(s->WriteRef(func->ptr()->unoptimized_code_));
546 s->WriteRef(func->ptr()->code_); 546 s->WriteRef(func->ptr()->code_);
547 s->WriteRef(func->ptr()->ic_data_array_); 547 s->WriteRef(func->ptr()->ic_data_array_);
548 } 548 }
549 549
550 #if !defined(DART_PRECOMPILED_RUNTIME) 550 #if !defined(DART_PRECOMPILED_RUNTIME)
551 if (kind != Snapshot::kFullAOT) { 551 if (kind != Snapshot::kFullAOT) {
552 s->WriteTokenPosition(func->ptr()->token_pos_); 552 s->WriteTokenPosition(func->ptr()->token_pos_);
553 s->WriteTokenPosition(func->ptr()->end_token_pos_); 553 s->WriteTokenPosition(func->ptr()->end_token_pos_);
554 s->Write<int32_t>(func->ptr()->kernel_offset_);
554 } 555 }
555 #endif 556 #endif
556 s->Write<int16_t>(func->ptr()->num_fixed_parameters_); 557 s->Write<int16_t>(func->ptr()->num_fixed_parameters_);
557 s->Write<int16_t>(func->ptr()->num_optional_parameters_); 558 s->Write<int16_t>(func->ptr()->num_optional_parameters_);
558 s->Write<uint32_t>(func->ptr()->kind_tag_); 559 s->Write<uint32_t>(func->ptr()->kind_tag_);
559 if (kind == Snapshot::kFullAOT) { 560 if (kind == Snapshot::kFullAOT) {
560 // Omit fields used to support de/reoptimization. 561 // Omit fields used to support de/reoptimization.
561 } else if (!Snapshot::IncludesCode(kind)) { 562 } else if (!Snapshot::IncludesCode(kind)) {
562 #if !defined(DART_PRECOMPILED_RUNTIME) 563 #if !defined(DART_PRECOMPILED_RUNTIME)
563 bool is_optimized = Code::IsOptimized(func->ptr()->code_); 564 bool is_optimized = Code::IsOptimized(func->ptr()->code_);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 } 619 }
619 620
620 #if defined(DEBUG) 621 #if defined(DEBUG)
621 func->ptr()->entry_point_ = 0; 622 func->ptr()->entry_point_ = 0;
622 #endif 623 #endif
623 624
624 #if !defined(DART_PRECOMPILED_RUNTIME) 625 #if !defined(DART_PRECOMPILED_RUNTIME)
625 if (kind != Snapshot::kFullAOT) { 626 if (kind != Snapshot::kFullAOT) {
626 func->ptr()->token_pos_ = d->ReadTokenPosition(); 627 func->ptr()->token_pos_ = d->ReadTokenPosition();
627 func->ptr()->end_token_pos_ = d->ReadTokenPosition(); 628 func->ptr()->end_token_pos_ = d->ReadTokenPosition();
629 func->ptr()->kernel_offset_ = d->Read<int32_t>();
628 } 630 }
629 #endif 631 #endif
630 func->ptr()->num_fixed_parameters_ = d->Read<int16_t>(); 632 func->ptr()->num_fixed_parameters_ = d->Read<int16_t>();
631 func->ptr()->num_optional_parameters_ = d->Read<int16_t>(); 633 func->ptr()->num_optional_parameters_ = d->Read<int16_t>();
632 func->ptr()->kind_tag_ = d->Read<uint32_t>(); 634 func->ptr()->kind_tag_ = d->Read<uint32_t>();
633 if (kind == Snapshot::kFullAOT) { 635 if (kind == Snapshot::kFullAOT) {
634 // Omit fields used to support de/reoptimization. 636 // Omit fields used to support de/reoptimization.
635 } else { 637 } else {
636 #if !defined(DART_PRECOMPILED_RUNTIME) 638 #if !defined(DART_PRECOMPILED_RUNTIME)
637 if (Snapshot::IncludesCode(kind)) { 639 if (Snapshot::IncludesCode(kind)) {
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 s->WriteRef(field->ptr()->guarded_list_length_); 1018 s->WriteRef(field->ptr()->guarded_list_length_);
1017 } 1019 }
1018 if (kind == Snapshot::kFullJIT) { 1020 if (kind == Snapshot::kFullJIT) {
1019 s->WriteRef(field->ptr()->dependent_code_); 1021 s->WriteRef(field->ptr()->dependent_code_);
1020 } 1022 }
1021 1023
1022 if (kind != Snapshot::kFullAOT) { 1024 if (kind != Snapshot::kFullAOT) {
1023 s->WriteTokenPosition(field->ptr()->token_pos_); 1025 s->WriteTokenPosition(field->ptr()->token_pos_);
1024 s->WriteCid(field->ptr()->guarded_cid_); 1026 s->WriteCid(field->ptr()->guarded_cid_);
1025 s->WriteCid(field->ptr()->is_nullable_); 1027 s->WriteCid(field->ptr()->is_nullable_);
1028 #if !defined(DART_PRECOMPILED_RUNTIME)
1029 s->Write<int32_t>(field->ptr()->kernel_offset_);
1030 #endif
1026 } 1031 }
1027 s->Write<uint8_t>(field->ptr()->kind_bits_); 1032 s->Write<uint8_t>(field->ptr()->kind_bits_);
1028 } 1033 }
1029 } 1034 }
1030 1035
1031 private: 1036 private:
1032 GrowableArray<RawField*> objects_; 1037 GrowableArray<RawField*> objects_;
1033 }; 1038 };
1034 #endif // !DART_PRECOMPILED_RUNTIME 1039 #endif // !DART_PRECOMPILED_RUNTIME
1035 1040
(...skipping 27 matching lines...) Expand all
1063 *p = d->ReadRef(); 1068 *p = d->ReadRef();
1064 } 1069 }
1065 for (RawObject** p = to_snapshot + 1; p <= to; p++) { 1070 for (RawObject** p = to_snapshot + 1; p <= to; p++) {
1066 *p = Object::null(); 1071 *p = Object::null();
1067 } 1072 }
1068 1073
1069 if (kind != Snapshot::kFullAOT) { 1074 if (kind != Snapshot::kFullAOT) {
1070 field->ptr()->token_pos_ = d->ReadTokenPosition(); 1075 field->ptr()->token_pos_ = d->ReadTokenPosition();
1071 field->ptr()->guarded_cid_ = d->ReadCid(); 1076 field->ptr()->guarded_cid_ = d->ReadCid();
1072 field->ptr()->is_nullable_ = d->ReadCid(); 1077 field->ptr()->is_nullable_ = d->ReadCid();
1078 #if !defined(DART_PRECOMPILED_RUNTIME)
1079 field->ptr()->kernel_offset_ = d->Read<int32_t>();
1080 #endif
1073 } 1081 }
1074 field->ptr()->kind_bits_ = d->Read<uint8_t>(); 1082 field->ptr()->kind_bits_ = d->Read<uint8_t>();
1075 } 1083 }
1076 } 1084 }
1077 1085
1078 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) { 1086 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) {
1079 NOT_IN_PRODUCT(TimelineDurationScope tds( 1087 NOT_IN_PRODUCT(TimelineDurationScope tds(
1080 Thread::Current(), Timeline::GetIsolateStream(), "PostLoadField")); 1088 Thread::Current(), Timeline::GetIsolateStream(), "PostLoadField"));
1081 1089
1082 Field& field = Field::Handle(zone); 1090 Field& field = Field::Handle(zone);
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 RawScript* script = objects_[i]; 1294 RawScript* script = objects_[i];
1287 RawObject** from = script->from(); 1295 RawObject** from = script->from();
1288 RawObject** to = script->to_snapshot(kind); 1296 RawObject** to = script->to_snapshot(kind);
1289 for (RawObject** p = from; p <= to; p++) { 1297 for (RawObject** p = from; p <= to; p++) {
1290 s->WriteRef(*p); 1298 s->WriteRef(*p);
1291 } 1299 }
1292 1300
1293 s->Write<int32_t>(script->ptr()->line_offset_); 1301 s->Write<int32_t>(script->ptr()->line_offset_);
1294 s->Write<int32_t>(script->ptr()->col_offset_); 1302 s->Write<int32_t>(script->ptr()->col_offset_);
1295 s->Write<int8_t>(script->ptr()->kind_); 1303 s->Write<int8_t>(script->ptr()->kind_);
1304 s->Write<int32_t>(script->ptr()->kernel_script_index_);
1296 } 1305 }
1297 } 1306 }
1298 1307
1299 private: 1308 private:
1300 GrowableArray<RawScript*> objects_; 1309 GrowableArray<RawScript*> objects_;
1301 }; 1310 };
1302 #endif // !DART_PRECOMPILED_RUNTIME 1311 #endif // !DART_PRECOMPILED_RUNTIME
1303 1312
1304 class ScriptDeserializationCluster : public DeserializationCluster { 1313 class ScriptDeserializationCluster : public DeserializationCluster {
1305 public: 1314 public:
(...skipping 24 matching lines...) Expand all
1330 for (RawObject** p = from; p <= to_snapshot; p++) { 1339 for (RawObject** p = from; p <= to_snapshot; p++) {
1331 *p = d->ReadRef(); 1340 *p = d->ReadRef();
1332 } 1341 }
1333 for (RawObject** p = to_snapshot + 1; p <= to; p++) { 1342 for (RawObject** p = to_snapshot + 1; p <= to; p++) {
1334 *p = Object::null(); 1343 *p = Object::null();
1335 } 1344 }
1336 1345
1337 script->ptr()->line_offset_ = d->Read<int32_t>(); 1346 script->ptr()->line_offset_ = d->Read<int32_t>();
1338 script->ptr()->col_offset_ = d->Read<int32_t>(); 1347 script->ptr()->col_offset_ = d->Read<int32_t>();
1339 script->ptr()->kind_ = d->Read<int8_t>(); 1348 script->ptr()->kind_ = d->Read<int8_t>();
1349 script->ptr()->kernel_script_index_ = d->Read<int32_t>();
1340 script->ptr()->load_timestamp_ = 0; 1350 script->ptr()->load_timestamp_ = 0;
1341 } 1351 }
1342 } 1352 }
1343 }; 1353 };
1344 1354
1345 #if !defined(DART_PRECOMPILED_RUNTIME) 1355 #if !defined(DART_PRECOMPILED_RUNTIME)
1346 class LibrarySerializationCluster : public SerializationCluster { 1356 class LibrarySerializationCluster : public SerializationCluster {
1347 public: 1357 public:
1348 LibrarySerializationCluster() {} 1358 LibrarySerializationCluster() {}
1349 virtual ~LibrarySerializationCluster() {} 1359 virtual ~LibrarySerializationCluster() {}
(...skipping 4181 matching lines...) Expand 10 before | Expand all | Expand 10 after
5531 thread_->isolate()->SetupImagePage(data_buffer_, 5541 thread_->isolate()->SetupImagePage(data_buffer_,
5532 /* is_executable */ false); 5542 /* is_executable */ false);
5533 } 5543 }
5534 5544
5535 deserializer.ReadIsolateSnapshot(thread_->isolate()->object_store()); 5545 deserializer.ReadIsolateSnapshot(thread_->isolate()->object_store());
5536 5546
5537 return ApiError::null(); 5547 return ApiError::null();
5538 } 5548 }
5539 5549
5540 } // namespace dart 5550 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/tests/vm/vm.status ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698