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

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

Issue 2326483005: Shrink AOT snapshot size and memory usage. (Closed)
Patch Set: . Created 4 years, 3 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) 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 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 objects_.Add(func); 504 objects_.Add(func);
505 505
506 RawObject** from = func->from(); 506 RawObject** from = func->from();
507 RawObject** to = func->to_snapshot(); 507 RawObject** to = func->to_snapshot();
508 for (RawObject** p = from; p <= to; p++) { 508 for (RawObject** p = from; p <= to; p++) {
509 s->Push(*p); 509 s->Push(*p);
510 } 510 }
511 if (s->kind() == Snapshot::kAppNoJIT) { 511 if (s->kind() == Snapshot::kAppNoJIT) {
512 s->Push(func->ptr()->code_); 512 s->Push(func->ptr()->code_);
513 } else if (s->kind() == Snapshot::kAppWithJIT) { 513 } else if (s->kind() == Snapshot::kAppWithJIT) {
514 s->Push(func->ptr()->unoptimized_code_); 514 NOT_IN_PRECOMPILED(s->Push(func->ptr()->unoptimized_code_));
515 s->Push(func->ptr()->ic_data_array_); 515 s->Push(func->ptr()->ic_data_array_);
516 } 516 }
517 } 517 }
518 518
519 void WriteAlloc(Serializer* s) { 519 void WriteAlloc(Serializer* s) {
520 s->WriteCid(kFunctionCid); 520 s->WriteCid(kFunctionCid);
521 intptr_t count = objects_.length(); 521 intptr_t count = objects_.length();
522 s->Write<int32_t>(count); 522 s->Write<int32_t>(count);
523 for (intptr_t i = 0; i < count; i++) { 523 for (intptr_t i = 0; i < count; i++) {
524 RawFunction* func = objects_[i]; 524 RawFunction* func = objects_[i];
525 s->AssignRef(func); 525 s->AssignRef(func);
526 } 526 }
527 } 527 }
528 528
529 void WriteFill(Serializer* s) { 529 void WriteFill(Serializer* s) {
530 Snapshot::Kind kind = s->kind(); 530 Snapshot::Kind kind = s->kind();
531 intptr_t count = objects_.length(); 531 intptr_t count = objects_.length();
532 for (intptr_t i = 0; i < count; i++) { 532 for (intptr_t i = 0; i < count; i++) {
533 RawFunction* func = objects_[i]; 533 RawFunction* func = objects_[i];
534 RawObject** from = func->from(); 534 RawObject** from = func->from();
535 RawObject** to = func->to_snapshot(); 535 RawObject** to = func->to_snapshot();
536 for (RawObject** p = from; p <= to; p++) { 536 for (RawObject** p = from; p <= to; p++) {
537 s->WriteRef(*p); 537 s->WriteRef(*p);
538 } 538 }
539 if (kind == Snapshot::kAppNoJIT) { 539 if (kind == Snapshot::kAppNoJIT) {
540 s->WriteRef(func->ptr()->code_); 540 s->WriteRef(func->ptr()->code_);
541 } else if (s->kind() == Snapshot::kAppWithJIT) { 541 } else if (s->kind() == Snapshot::kAppWithJIT) {
542 s->WriteRef(func->ptr()->unoptimized_code_); 542 NOT_IN_PRECOMPILED(s->WriteRef(func->ptr()->unoptimized_code_));
543 s->WriteRef(func->ptr()->ic_data_array_); 543 s->WriteRef(func->ptr()->ic_data_array_);
544 } 544 }
545 545
546 s->WriteTokenPosition(func->ptr()->token_pos_); 546 #if !defined(DART_PRECOMPILED_RUNTIME)
Florian Schneider 2016/09/14 21:32:52 The reading code will be needed at startup, But wo
rmacnak 2016/09/15 17:01:22 Done.
547 s->WriteTokenPosition(func->ptr()->end_token_pos_); 547 if (kind != Snapshot::kAppNoJIT) {
548 s->WriteTokenPosition(func->ptr()->token_pos_);
549 s->WriteTokenPosition(func->ptr()->end_token_pos_);
550 }
551 #endif
548 s->Write<int16_t>(func->ptr()->num_fixed_parameters_); 552 s->Write<int16_t>(func->ptr()->num_fixed_parameters_);
549 s->Write<int16_t>(func->ptr()->num_optional_parameters_); 553 s->Write<int16_t>(func->ptr()->num_optional_parameters_);
550 s->Write<uint32_t>(func->ptr()->kind_tag_); 554 s->Write<uint32_t>(func->ptr()->kind_tag_);
551 if (kind == Snapshot::kAppNoJIT) { 555 if (kind == Snapshot::kAppNoJIT) {
552 // Omit fields used to support de/reoptimization. 556 // Omit fields used to support de/reoptimization.
553 } else { 557 } else {
558 #if !defined(DART_PRECOMPILED_RUNTIME)
554 bool is_optimized = Code::IsOptimized(func->ptr()->code_); 559 bool is_optimized = Code::IsOptimized(func->ptr()->code_);
555 if (is_optimized) { 560 if (is_optimized) {
556 s->Write<int32_t>(FLAG_optimization_counter_threshold); 561 s->Write<int32_t>(FLAG_optimization_counter_threshold);
557 } else { 562 } else {
558 s->Write<int32_t>(0); 563 s->Write<int32_t>(0);
559 } 564 }
560 s->Write<int8_t>(func->ptr()->deoptimization_counter_); 565 s->Write<int8_t>(func->ptr()->deoptimization_counter_);
561 s->Write<uint16_t>(func->ptr()->optimized_instruction_count_); 566 s->Write<uint16_t>(func->ptr()->optimized_instruction_count_);
562 s->Write<uint16_t>(func->ptr()->optimized_call_site_count_); 567 s->Write<uint16_t>(func->ptr()->optimized_call_site_count_);
568 #endif
563 } 569 }
564 } 570 }
565 } 571 }
566 572
567 private: 573 private:
568 GrowableArray<RawFunction*> objects_; 574 GrowableArray<RawFunction*> objects_;
569 }; 575 };
570 576
571 577
572 class FunctionDeserializationCluster : public DeserializationCluster { 578 class FunctionDeserializationCluster : public DeserializationCluster {
(...skipping 25 matching lines...) Expand all
598 RawObject** to = func->to(); 604 RawObject** to = func->to();
599 for (RawObject** p = from; p <= to_snapshot; p++) { 605 for (RawObject** p = from; p <= to_snapshot; p++) {
600 *p = d->ReadRef(); 606 *p = d->ReadRef();
601 } 607 }
602 for (RawObject** p = to_snapshot + 1; p <= to; p++) { 608 for (RawObject** p = to_snapshot + 1; p <= to; p++) {
603 *p = Object::null(); 609 *p = Object::null();
604 } 610 }
605 if (kind == Snapshot::kAppNoJIT) { 611 if (kind == Snapshot::kAppNoJIT) {
606 func->ptr()->code_ = reinterpret_cast<RawCode*>(d->ReadRef()); 612 func->ptr()->code_ = reinterpret_cast<RawCode*>(d->ReadRef());
607 } else if (kind == Snapshot::kAppWithJIT) { 613 } else if (kind == Snapshot::kAppWithJIT) {
608 func->ptr()->unoptimized_code_ = 614 NOT_IN_PRECOMPILED(func->ptr()->unoptimized_code_ =
609 reinterpret_cast<RawCode*>(d->ReadRef()); 615 reinterpret_cast<RawCode*>(d->ReadRef()));
610 func->ptr()->ic_data_array_ = reinterpret_cast<RawArray*>(d->ReadRef()); 616 func->ptr()->ic_data_array_ = reinterpret_cast<RawArray*>(d->ReadRef());
611 } 617 }
612 618
613 #if defined(DEBUG) 619 #if defined(DEBUG)
614 func->ptr()->entry_point_ = 0; 620 func->ptr()->entry_point_ = 0;
615 #endif 621 #endif
616 622
617 func->ptr()->token_pos_ = d->ReadTokenPosition(); 623 #if !defined(DART_PRECOMPILED_RUNTIME)
618 func->ptr()->end_token_pos_ = d->ReadTokenPosition(); 624 if (kind != Snapshot::kAppNoJIT) {
625 func->ptr()->token_pos_ = d->ReadTokenPosition();
626 func->ptr()->end_token_pos_ = d->ReadTokenPosition();
627 }
628 #endif
619 func->ptr()->num_fixed_parameters_ = d->Read<int16_t>(); 629 func->ptr()->num_fixed_parameters_ = d->Read<int16_t>();
620 func->ptr()->num_optional_parameters_ = d->Read<int16_t>(); 630 func->ptr()->num_optional_parameters_ = d->Read<int16_t>();
621 func->ptr()->kind_tag_ = d->Read<uint32_t>(); 631 func->ptr()->kind_tag_ = d->Read<uint32_t>();
622 if (kind == Snapshot::kAppNoJIT) { 632 if (kind == Snapshot::kAppNoJIT) {
623 // Omit fields used to support de/reoptimization. 633 // Omit fields used to support de/reoptimization.
624 } else { 634 } else {
635 #if !defined(DART_PRECOMPILED_RUNTIME)
625 func->ptr()->usage_counter_ = d->Read<int32_t>(); 636 func->ptr()->usage_counter_ = d->Read<int32_t>();
626 func->ptr()->deoptimization_counter_ = d->Read<int8_t>(); 637 func->ptr()->deoptimization_counter_ = d->Read<int8_t>();
627 func->ptr()->optimized_instruction_count_ = d->Read<uint16_t>(); 638 func->ptr()->optimized_instruction_count_ = d->Read<uint16_t>();
628 func->ptr()->optimized_call_site_count_ = d->Read<uint16_t>(); 639 func->ptr()->optimized_call_site_count_ = d->Read<uint16_t>();
640 #endif
629 } 641 }
630 } 642 }
631 } 643 }
632 644
633 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) { 645 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) {
634 NOT_IN_PRODUCT(TimelineDurationScope tds(Thread::Current(), 646 NOT_IN_PRODUCT(TimelineDurationScope tds(Thread::Current(),
635 Timeline::GetIsolateStream(), "PostLoadFunction")); 647 Timeline::GetIsolateStream(), "PostLoadFunction"));
636 648
637 if (kind == Snapshot::kAppNoJIT) { 649 if (kind == Snapshot::kAppNoJIT) {
638 Function& func = Function::Handle(zone); 650 Function& func = Function::Handle(zone);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 684
673 class ClosureDataSerializationCluster : public SerializationCluster { 685 class ClosureDataSerializationCluster : public SerializationCluster {
674 public: 686 public:
675 ClosureDataSerializationCluster() { } 687 ClosureDataSerializationCluster() { }
676 virtual ~ClosureDataSerializationCluster() { } 688 virtual ~ClosureDataSerializationCluster() { }
677 689
678 void Trace(Serializer* s, RawObject* object) { 690 void Trace(Serializer* s, RawObject* object) {
679 RawClosureData* data = ClosureData::RawCast(object); 691 RawClosureData* data = ClosureData::RawCast(object);
680 objects_.Add(data); 692 objects_.Add(data);
681 693
682 RawObject** from = data->from(); 694 if (s->kind() != Snapshot::kAppNoJIT) {
683 RawObject** to = data->to(); 695 s->Push(data->ptr()->context_scope_);
684 for (RawObject** p = from; p <= to; p++) {
685 s->Push(*p);
686 } 696 }
697 s->Push(data->ptr()->parent_function_);
698 s->Push(data->ptr()->signature_type_);
699 s->Push(data->ptr()->closure_);
687 } 700 }
688 701
689 void WriteAlloc(Serializer* s) { 702 void WriteAlloc(Serializer* s) {
690 s->WriteCid(kClosureDataCid); 703 s->WriteCid(kClosureDataCid);
691 intptr_t count = objects_.length(); 704 intptr_t count = objects_.length();
692 s->Write<int32_t>(count); 705 s->Write<int32_t>(count);
693 for (intptr_t i = 0; i < count; i++) { 706 for (intptr_t i = 0; i < count; i++) {
694 RawClosureData* data = objects_[i]; 707 RawClosureData* data = objects_[i];
695 s->AssignRef(data); 708 s->AssignRef(data);
696 } 709 }
697 } 710 }
698 711
699 void WriteFill(Serializer* s) { 712 void WriteFill(Serializer* s) {
700 intptr_t count = objects_.length(); 713 intptr_t count = objects_.length();
701 for (intptr_t i = 0; i < count; i++) { 714 if (s->kind() == Snapshot::kAppNoJIT) {
702 RawClosureData* data = objects_[i]; 715 for (intptr_t i = 0; i < count; i++) {
703 RawObject** from = data->from(); 716 RawClosureData* data = objects_[i];
704 RawObject** to = data->to(); 717 s->WriteRef(data->ptr()->parent_function_);
705 for (RawObject** p = from; p <= to; p++) { 718 s->WriteRef(data->ptr()->signature_type_);
706 s->WriteRef(*p); 719 s->WriteRef(data->ptr()->closure_);
720 }
721 } else {
722 for (intptr_t i = 0; i < count; i++) {
723 RawClosureData* data = objects_[i];
724 s->WriteRef(data->ptr()->context_scope_);
725 s->WriteRef(data->ptr()->parent_function_);
726 s->WriteRef(data->ptr()->signature_type_);
727 s->WriteRef(data->ptr()->closure_);
707 } 728 }
708 } 729 }
709 } 730 }
710 731
711 private: 732 private:
712 GrowableArray<RawClosureData*> objects_; 733 GrowableArray<RawClosureData*> objects_;
713 }; 734 };
714 735
715 736
716 class ClosureDataDeserializationCluster : public DeserializationCluster { 737 class ClosureDataDeserializationCluster : public DeserializationCluster {
717 public: 738 public:
718 ClosureDataDeserializationCluster() { } 739 ClosureDataDeserializationCluster() { }
719 virtual ~ClosureDataDeserializationCluster() { } 740 virtual ~ClosureDataDeserializationCluster() { }
720 741
721 void ReadAlloc(Deserializer* d) { 742 void ReadAlloc(Deserializer* d) {
722 start_index_ = d->next_index(); 743 start_index_ = d->next_index();
723 PageSpace* old_space = d->heap()->old_space(); 744 PageSpace* old_space = d->heap()->old_space();
724 intptr_t count = d->Read<int32_t>(); 745 intptr_t count = d->Read<int32_t>();
725 for (intptr_t i = 0; i < count; i++) { 746 for (intptr_t i = 0; i < count; i++) {
726 d->AssignRef(AllocateUninitialized(old_space, 747 d->AssignRef(AllocateUninitialized(old_space,
727 ClosureData::InstanceSize())); 748 ClosureData::InstanceSize()));
728 } 749 }
729 stop_index_ = d->next_index(); 750 stop_index_ = d->next_index();
730 } 751 }
731 752
732 void ReadFill(Deserializer* d) { 753 void ReadFill(Deserializer* d) {
733 bool is_vm_object = d->isolate() == Dart::vm_isolate(); 754 bool is_vm_object = d->isolate() == Dart::vm_isolate();
734 755
735 for (intptr_t id = start_index_; id < stop_index_; id++) { 756 if (d->kind() == Snapshot::kAppNoJIT) {
736 RawClosureData* data = reinterpret_cast<RawClosureData*>(d->Ref(id)); 757 for (intptr_t id = start_index_; id < stop_index_; id++) {
737 Deserializer::InitializeHeader(data, kClosureDataCid, 758 RawClosureData* data = reinterpret_cast<RawClosureData*>(d->Ref(id));
738 ClosureData::InstanceSize(), is_vm_object); 759 Deserializer::InitializeHeader(data, kClosureDataCid,
739 RawObject** from = data->from(); 760 ClosureData::InstanceSize(),
740 RawObject** to = data->to(); 761 is_vm_object);
741 for (RawObject** p = from; p <= to; p++) { 762 data->ptr()->context_scope_ = ContextScope::null();
Florian Schneider 2016/09/14 21:32:52 Maybe only put handling of context_scope_ with the
rmacnak 2016/09/15 17:01:22 Done.
742 *p = d->ReadRef(); 763 data->ptr()->parent_function_ = static_cast<RawFunction*>(d->ReadRef());
764 data->ptr()->signature_type_ = static_cast<RawType*>(d->ReadRef());
765 data->ptr()->closure_ = static_cast<RawInstance*>(d->ReadRef());
766 }
767 } else {
768 for (intptr_t id = start_index_; id < stop_index_; id++) {
769 RawClosureData* data = reinterpret_cast<RawClosureData*>(d->Ref(id));
770 Deserializer::InitializeHeader(data, kClosureDataCid,
771 ClosureData::InstanceSize(),
772 is_vm_object);
773 data->ptr()->context_scope_ =
774 static_cast<RawContextScope*>(d->ReadRef());
775 data->ptr()->parent_function_ = static_cast<RawFunction*>(d->ReadRef());
776 data->ptr()->signature_type_ = static_cast<RawType*>(d->ReadRef());
777 data->ptr()->closure_ = static_cast<RawInstance*>(d->ReadRef());
743 } 778 }
744 } 779 }
745 } 780 }
746 }; 781 };
747 782
748 783
749 class RedirectionDataSerializationCluster : public SerializationCluster { 784 class RedirectionDataSerializationCluster : public SerializationCluster {
750 public: 785 public:
751 RedirectionDataSerializationCluster() { } 786 RedirectionDataSerializationCluster() { }
752 virtual ~RedirectionDataSerializationCluster() { } 787 virtual ~RedirectionDataSerializationCluster() { }
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 for (intptr_t i = 0; i < count; i++) { 1489 for (intptr_t i = 0; i < count; i++) {
1455 RawCode* code = objects_[i]; 1490 RawCode* code = objects_[i];
1456 1491
1457 intptr_t pointer_offsets_length = 1492 intptr_t pointer_offsets_length =
1458 Code::PtrOffBits::decode(code->ptr()->state_bits_); 1493 Code::PtrOffBits::decode(code->ptr()->state_bits_);
1459 if (pointer_offsets_length != 0) { 1494 if (pointer_offsets_length != 0) {
1460 FATAL("Cannot serialize code with embedded pointers"); 1495 FATAL("Cannot serialize code with embedded pointers");
1461 } 1496 }
1462 if (kind == Snapshot::kAppNoJIT) { 1497 if (kind == Snapshot::kAppNoJIT) {
1463 // No disabled code in precompilation. 1498 // No disabled code in precompilation.
1464 ASSERT(code->ptr()->instructions_ == code->ptr()->active_instructions_); 1499 NOT_IN_PRECOMPILED(ASSERT(
1500 code->ptr()->instructions_ == code->ptr()->active_instructions_));
1465 } else { 1501 } else {
1466 ASSERT(kind == Snapshot::kAppWithJIT); 1502 ASSERT(kind == Snapshot::kAppWithJIT);
1467 // We never include optimized code in JIT precompilation. Deoptimization 1503 // We never include optimized code in JIT precompilation. Deoptimization
1468 // requires code patching and we cannot patch code that is shared 1504 // requires code patching and we cannot patch code that is shared
1469 // between isolates and should not mutate memory allocated by the 1505 // between isolates and should not mutate memory allocated by the
1470 // embedder. 1506 // embedder.
1471 bool is_optimized = Code::PtrOffBits::decode(code->ptr()->state_bits_); 1507 bool is_optimized = Code::PtrOffBits::decode(code->ptr()->state_bits_);
1472 if (is_optimized) { 1508 if (is_optimized) {
1473 FATAL("Cannot include optimized code in a JIT snapshot"); 1509 FATAL("Cannot include optimized code in a JIT snapshot");
1474 } 1510 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1516 Deserializer::InitializeHeader(code, kCodeCid, 1552 Deserializer::InitializeHeader(code, kCodeCid,
1517 Code::InstanceSize(0), is_vm_object); 1553 Code::InstanceSize(0), is_vm_object);
1518 1554
1519 int32_t text_offset = d->Read<int32_t>(); 1555 int32_t text_offset = d->Read<int32_t>();
1520 RawInstructions* instr = reinterpret_cast<RawInstructions*>( 1556 RawInstructions* instr = reinterpret_cast<RawInstructions*>(
1521 d->GetInstructionsAt(text_offset) + kHeapObjectTag); 1557 d->GetInstructionsAt(text_offset) + kHeapObjectTag);
1522 1558
1523 code->ptr()->entry_point_ = Instructions::UncheckedEntryPoint(instr); 1559 code->ptr()->entry_point_ = Instructions::UncheckedEntryPoint(instr);
1524 code->ptr()->checked_entry_point_ = 1560 code->ptr()->checked_entry_point_ =
1525 Instructions::CheckedEntryPoint(instr); 1561 Instructions::CheckedEntryPoint(instr);
1526 code->ptr()->active_instructions_ = instr; 1562 NOT_IN_PRECOMPILED(code->ptr()->active_instructions_ = instr);
1527 code->ptr()->instructions_ = instr; 1563 code->ptr()->instructions_ = instr;
1528 code->ptr()->object_pool_ = 1564 code->ptr()->object_pool_ =
1529 reinterpret_cast<RawObjectPool*>(d->ReadRef()); 1565 reinterpret_cast<RawObjectPool*>(d->ReadRef());
1530 code->ptr()->owner_ = d->ReadRef(); 1566 code->ptr()->owner_ = d->ReadRef();
1531 code->ptr()->exception_handlers_ = 1567 code->ptr()->exception_handlers_ =
1532 reinterpret_cast<RawExceptionHandlers*>(d->ReadRef()); 1568 reinterpret_cast<RawExceptionHandlers*>(d->ReadRef());
1533 code->ptr()->pc_descriptors_ = 1569 code->ptr()->pc_descriptors_ =
1534 reinterpret_cast<RawPcDescriptors*>(d->ReadRef()); 1570 reinterpret_cast<RawPcDescriptors*>(d->ReadRef());
1535 code->ptr()->stackmaps_ = 1571 code->ptr()->stackmaps_ =
1536 reinterpret_cast<RawArray*>(d->ReadRef()); 1572 reinterpret_cast<RawArray*>(d->ReadRef());
1537 1573
1574 #if !defined(DART_PRECOMPILED_RUNTIME)
1538 code->ptr()->deopt_info_array_ = Array::null(); 1575 code->ptr()->deopt_info_array_ = Array::null();
1539 code->ptr()->static_calls_target_table_ = Array::null(); 1576 code->ptr()->static_calls_target_table_ = Array::null();
1540 code->ptr()->var_descriptors_ = LocalVarDescriptors::null(); 1577 code->ptr()->var_descriptors_ = LocalVarDescriptors::null();
1541 code->ptr()->inlined_metadata_ = Array::null(); 1578 code->ptr()->inlined_metadata_ = Array::null();
1542 code->ptr()->code_source_map_ = CodeSourceMap::null(); 1579 code->ptr()->code_source_map_ = CodeSourceMap::null();
1543 code->ptr()->comments_ = Array::null(); 1580 code->ptr()->comments_ = Array::null();
1544 code->ptr()->return_address_metadata_ = Object::null(); 1581 code->ptr()->return_address_metadata_ = Object::null();
1545 1582
1546 code->ptr()->compile_timestamp_ = 0; 1583 code->ptr()->compile_timestamp_ = 0;
1584 #endif
1547 code->ptr()->state_bits_ = d->Read<int32_t>(); 1585 code->ptr()->state_bits_ = d->Read<int32_t>();
1586 #if !defined(DART_PRECOMPILED_RUNTIME)
1548 code->ptr()->lazy_deopt_pc_offset_ = -1; 1587 code->ptr()->lazy_deopt_pc_offset_ = -1;
1588 #endif
1549 } 1589 }
1550 } 1590 }
1551 }; 1591 };
1552 1592
1553 1593
1554 class ObjectPoolSerializationCluster : public SerializationCluster { 1594 class ObjectPoolSerializationCluster : public SerializationCluster {
1555 public: 1595 public:
1556 ObjectPoolSerializationCluster() { } 1596 ObjectPoolSerializationCluster() { }
1557 virtual ~ObjectPoolSerializationCluster() { } 1597 virtual ~ObjectPoolSerializationCluster() { }
1558 1598
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after
2067 void WriteFill(Serializer* s) { 2107 void WriteFill(Serializer* s) {
2068 Snapshot::Kind kind = s->kind(); 2108 Snapshot::Kind kind = s->kind();
2069 intptr_t count = objects_.length(); 2109 intptr_t count = objects_.length();
2070 for (intptr_t i = 0; i < count; i++) { 2110 for (intptr_t i = 0; i < count; i++) {
2071 RawICData* ic = objects_[i]; 2111 RawICData* ic = objects_[i];
2072 RawObject** from = ic->from(); 2112 RawObject** from = ic->from();
2073 RawObject** to = ic->to_snapshot(kind); 2113 RawObject** to = ic->to_snapshot(kind);
2074 for (RawObject** p = from; p <= to; p++) { 2114 for (RawObject** p = from; p <= to; p++) {
2075 s->WriteRef(*p); 2115 s->WriteRef(*p);
2076 } 2116 }
2077 s->Write<int32_t>(ic->ptr()->deopt_id_); 2117 if (kind != Snapshot::kAppNoJIT) {
2118 NOT_IN_PRECOMPILED(s->Write<int32_t>(ic->ptr()->deopt_id_));
2119 }
2078 s->Write<uint32_t>(ic->ptr()->state_bits_); 2120 s->Write<uint32_t>(ic->ptr()->state_bits_);
2079 #if defined(TAG_IC_DATA) 2121 #if defined(TAG_IC_DATA)
2080 s->Write<int32_t>(ic->ptr()->tag_); 2122 s->Write<int32_t>(ic->ptr()->tag_);
2081 #endif 2123 #endif
2082 } 2124 }
2083 } 2125 }
2084 2126
2085 private: 2127 private:
2086 GrowableArray<RawICData*> objects_; 2128 GrowableArray<RawICData*> objects_;
2087 }; 2129 };
(...skipping 24 matching lines...) Expand all
2112 ICData::InstanceSize(), is_vm_object); 2154 ICData::InstanceSize(), is_vm_object);
2113 RawObject** from = ic->from(); 2155 RawObject** from = ic->from();
2114 RawObject** to_snapshot = ic->to_snapshot(kind); 2156 RawObject** to_snapshot = ic->to_snapshot(kind);
2115 RawObject** to = ic->to(); 2157 RawObject** to = ic->to();
2116 for (RawObject** p = from; p <= to_snapshot; p++) { 2158 for (RawObject** p = from; p <= to_snapshot; p++) {
2117 *p = d->ReadRef(); 2159 *p = d->ReadRef();
2118 } 2160 }
2119 for (RawObject** p = to_snapshot + 1; p <= to; p++) { 2161 for (RawObject** p = to_snapshot + 1; p <= to; p++) {
2120 *p = Object::null(); 2162 *p = Object::null();
2121 } 2163 }
2122 ic->ptr()->deopt_id_ = d->Read<int32_t>(); 2164 NOT_IN_PRECOMPILED(ic->ptr()->deopt_id_ = d->Read<int32_t>());
2123 ic->ptr()->state_bits_ = d->Read<int32_t>(); 2165 ic->ptr()->state_bits_ = d->Read<int32_t>();
2124 #if defined(TAG_IC_DATA) 2166 #if defined(TAG_IC_DATA)
2125 ic->ptr()->tag_ = d->Read<int32_t>(); 2167 ic->ptr()->tag_ = d->Read<int32_t>();
2126 #endif 2168 #endif
2127 } 2169 }
2128 } 2170 }
2129 }; 2171 };
2130 2172
2131 2173
2132 class MegamorphicCacheSerializationCluster : public SerializationCluster { 2174 class MegamorphicCacheSerializationCluster : public SerializationCluster {
(...skipping 2882 matching lines...) Expand 10 before | Expand all | Expand 10 after
5015 5057
5016 deserializer.ReadVMSnapshot(); 5058 deserializer.ReadVMSnapshot();
5017 5059
5018 Dart::set_instructions_snapshot_buffer(instructions_buffer_); 5060 Dart::set_instructions_snapshot_buffer(instructions_buffer_);
5019 Dart::set_data_snapshot_buffer(data_buffer_); 5061 Dart::set_data_snapshot_buffer(data_buffer_);
5020 5062
5021 return ApiError::null(); 5063 return ApiError::null();
5022 } 5064 }
5023 5065
5024 } // namespace dart 5066 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/platform/globals.h ('k') | runtime/vm/flag_list.h » ('j') | runtime/vm/gc_marker.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698