| OLD | NEW |
| 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 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 objects_.Add(func); | 513 objects_.Add(func); |
| 514 | 514 |
| 515 RawObject** from = func->from(); | 515 RawObject** from = func->from(); |
| 516 RawObject** to = func->to_snapshot(); | 516 RawObject** to = func->to_snapshot(); |
| 517 for (RawObject** p = from; p <= to; p++) { | 517 for (RawObject** p = from; p <= to; p++) { |
| 518 s->Push(*p); | 518 s->Push(*p); |
| 519 } | 519 } |
| 520 if (s->kind() == Snapshot::kAppNoJIT) { | 520 if (s->kind() == Snapshot::kAppNoJIT) { |
| 521 s->Push(func->ptr()->code_); | 521 s->Push(func->ptr()->code_); |
| 522 } else if (s->kind() == Snapshot::kAppWithJIT) { | 522 } else if (s->kind() == Snapshot::kAppWithJIT) { |
| 523 s->Push(func->ptr()->unoptimized_code_); | 523 NOT_IN_PRECOMPILED(s->Push(func->ptr()->unoptimized_code_)); |
| 524 s->Push(func->ptr()->ic_data_array_); | 524 s->Push(func->ptr()->ic_data_array_); |
| 525 } | 525 } |
| 526 } | 526 } |
| 527 | 527 |
| 528 void WriteAlloc(Serializer* s) { | 528 void WriteAlloc(Serializer* s) { |
| 529 s->WriteCid(kFunctionCid); | 529 s->WriteCid(kFunctionCid); |
| 530 intptr_t count = objects_.length(); | 530 intptr_t count = objects_.length(); |
| 531 s->Write<int32_t>(count); | 531 s->Write<int32_t>(count); |
| 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 s->AssignRef(func); | 534 s->AssignRef(func); |
| 535 } | 535 } |
| 536 } | 536 } |
| 537 | 537 |
| 538 void WriteFill(Serializer* s) { | 538 void WriteFill(Serializer* s) { |
| 539 Snapshot::Kind kind = s->kind(); | 539 Snapshot::Kind kind = s->kind(); |
| 540 intptr_t count = objects_.length(); | 540 intptr_t count = objects_.length(); |
| 541 for (intptr_t i = 0; i < count; i++) { | 541 for (intptr_t i = 0; i < count; i++) { |
| 542 RawFunction* func = objects_[i]; | 542 RawFunction* func = objects_[i]; |
| 543 RawObject** from = func->from(); | 543 RawObject** from = func->from(); |
| 544 RawObject** to = func->to_snapshot(); | 544 RawObject** to = func->to_snapshot(); |
| 545 for (RawObject** p = from; p <= to; p++) { | 545 for (RawObject** p = from; p <= to; p++) { |
| 546 s->WriteRef(*p); | 546 s->WriteRef(*p); |
| 547 } | 547 } |
| 548 if (kind == Snapshot::kAppNoJIT) { | 548 if (kind == Snapshot::kAppNoJIT) { |
| 549 s->WriteRef(func->ptr()->code_); | 549 s->WriteRef(func->ptr()->code_); |
| 550 } else if (s->kind() == Snapshot::kAppWithJIT) { | 550 } else if (s->kind() == Snapshot::kAppWithJIT) { |
| 551 s->WriteRef(func->ptr()->unoptimized_code_); | 551 NOT_IN_PRECOMPILED(s->WriteRef(func->ptr()->unoptimized_code_)); |
| 552 s->WriteRef(func->ptr()->ic_data_array_); | 552 s->WriteRef(func->ptr()->ic_data_array_); |
| 553 } | 553 } |
| 554 | 554 |
| 555 s->WriteTokenPosition(func->ptr()->token_pos_); | 555 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 556 s->WriteTokenPosition(func->ptr()->end_token_pos_); | 556 if (kind != Snapshot::kAppNoJIT) { |
| 557 s->WriteTokenPosition(func->ptr()->token_pos_); |
| 558 s->WriteTokenPosition(func->ptr()->end_token_pos_); |
| 559 } |
| 560 #endif |
| 557 s->Write<int16_t>(func->ptr()->num_fixed_parameters_); | 561 s->Write<int16_t>(func->ptr()->num_fixed_parameters_); |
| 558 s->Write<int16_t>(func->ptr()->num_optional_parameters_); | 562 s->Write<int16_t>(func->ptr()->num_optional_parameters_); |
| 559 s->Write<uint32_t>(func->ptr()->kind_tag_); | 563 s->Write<uint32_t>(func->ptr()->kind_tag_); |
| 560 if (kind == Snapshot::kAppNoJIT) { | 564 if (kind == Snapshot::kAppNoJIT) { |
| 561 // Omit fields used to support de/reoptimization. | 565 // Omit fields used to support de/reoptimization. |
| 562 } else { | 566 } else { |
| 567 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 563 bool is_optimized = Code::IsOptimized(func->ptr()->code_); | 568 bool is_optimized = Code::IsOptimized(func->ptr()->code_); |
| 564 if (is_optimized) { | 569 if (is_optimized) { |
| 565 s->Write<int32_t>(FLAG_optimization_counter_threshold); | 570 s->Write<int32_t>(FLAG_optimization_counter_threshold); |
| 566 } else { | 571 } else { |
| 567 s->Write<int32_t>(0); | 572 s->Write<int32_t>(0); |
| 568 } | 573 } |
| 569 s->Write<int8_t>(func->ptr()->deoptimization_counter_); | 574 s->Write<int8_t>(func->ptr()->deoptimization_counter_); |
| 570 s->Write<uint16_t>(func->ptr()->optimized_instruction_count_); | 575 s->Write<uint16_t>(func->ptr()->optimized_instruction_count_); |
| 571 s->Write<uint16_t>(func->ptr()->optimized_call_site_count_); | 576 s->Write<uint16_t>(func->ptr()->optimized_call_site_count_); |
| 577 #endif |
| 572 } | 578 } |
| 573 } | 579 } |
| 574 } | 580 } |
| 575 | 581 |
| 576 private: | 582 private: |
| 577 GrowableArray<RawFunction*> objects_; | 583 GrowableArray<RawFunction*> objects_; |
| 578 }; | 584 }; |
| 579 #endif // !DART_PRECOMPILED_RUNTIME | 585 #endif // !DART_PRECOMPILED_RUNTIME |
| 580 | 586 |
| 581 | 587 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 608 RawObject** to = func->to(); | 614 RawObject** to = func->to(); |
| 609 for (RawObject** p = from; p <= to_snapshot; p++) { | 615 for (RawObject** p = from; p <= to_snapshot; p++) { |
| 610 *p = d->ReadRef(); | 616 *p = d->ReadRef(); |
| 611 } | 617 } |
| 612 for (RawObject** p = to_snapshot + 1; p <= to; p++) { | 618 for (RawObject** p = to_snapshot + 1; p <= to; p++) { |
| 613 *p = Object::null(); | 619 *p = Object::null(); |
| 614 } | 620 } |
| 615 if (kind == Snapshot::kAppNoJIT) { | 621 if (kind == Snapshot::kAppNoJIT) { |
| 616 func->ptr()->code_ = reinterpret_cast<RawCode*>(d->ReadRef()); | 622 func->ptr()->code_ = reinterpret_cast<RawCode*>(d->ReadRef()); |
| 617 } else if (kind == Snapshot::kAppWithJIT) { | 623 } else if (kind == Snapshot::kAppWithJIT) { |
| 618 func->ptr()->unoptimized_code_ = | 624 NOT_IN_PRECOMPILED(func->ptr()->unoptimized_code_ = |
| 619 reinterpret_cast<RawCode*>(d->ReadRef()); | 625 reinterpret_cast<RawCode*>(d->ReadRef())); |
| 620 func->ptr()->ic_data_array_ = reinterpret_cast<RawArray*>(d->ReadRef()); | 626 func->ptr()->ic_data_array_ = reinterpret_cast<RawArray*>(d->ReadRef()); |
| 621 } | 627 } |
| 622 | 628 |
| 623 #if defined(DEBUG) | 629 #if defined(DEBUG) |
| 624 func->ptr()->entry_point_ = 0; | 630 func->ptr()->entry_point_ = 0; |
| 625 #endif | 631 #endif |
| 626 | 632 |
| 627 func->ptr()->token_pos_ = d->ReadTokenPosition(); | 633 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 628 func->ptr()->end_token_pos_ = d->ReadTokenPosition(); | 634 if (kind != Snapshot::kAppNoJIT) { |
| 635 func->ptr()->token_pos_ = d->ReadTokenPosition(); |
| 636 func->ptr()->end_token_pos_ = d->ReadTokenPosition(); |
| 637 } |
| 638 #endif |
| 629 func->ptr()->num_fixed_parameters_ = d->Read<int16_t>(); | 639 func->ptr()->num_fixed_parameters_ = d->Read<int16_t>(); |
| 630 func->ptr()->num_optional_parameters_ = d->Read<int16_t>(); | 640 func->ptr()->num_optional_parameters_ = d->Read<int16_t>(); |
| 631 func->ptr()->kind_tag_ = d->Read<uint32_t>(); | 641 func->ptr()->kind_tag_ = d->Read<uint32_t>(); |
| 632 if (kind == Snapshot::kAppNoJIT) { | 642 if (kind == Snapshot::kAppNoJIT) { |
| 633 // Omit fields used to support de/reoptimization. | 643 // Omit fields used to support de/reoptimization. |
| 634 } else { | 644 } else { |
| 645 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 635 func->ptr()->usage_counter_ = d->Read<int32_t>(); | 646 func->ptr()->usage_counter_ = d->Read<int32_t>(); |
| 636 func->ptr()->deoptimization_counter_ = d->Read<int8_t>(); | 647 func->ptr()->deoptimization_counter_ = d->Read<int8_t>(); |
| 637 func->ptr()->optimized_instruction_count_ = d->Read<uint16_t>(); | 648 func->ptr()->optimized_instruction_count_ = d->Read<uint16_t>(); |
| 638 func->ptr()->optimized_call_site_count_ = d->Read<uint16_t>(); | 649 func->ptr()->optimized_call_site_count_ = d->Read<uint16_t>(); |
| 650 #endif |
| 639 } | 651 } |
| 640 } | 652 } |
| 641 } | 653 } |
| 642 | 654 |
| 643 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) { | 655 void PostLoad(const Array& refs, Snapshot::Kind kind, Zone* zone) { |
| 644 NOT_IN_PRODUCT(TimelineDurationScope tds(Thread::Current(), | 656 NOT_IN_PRODUCT(TimelineDurationScope tds(Thread::Current(), |
| 645 Timeline::GetIsolateStream(), "PostLoadFunction")); | 657 Timeline::GetIsolateStream(), "PostLoadFunction")); |
| 646 | 658 |
| 647 if (kind == Snapshot::kAppNoJIT) { | 659 if (kind == Snapshot::kAppNoJIT) { |
| 648 Function& func = Function::Handle(zone); | 660 Function& func = Function::Handle(zone); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 #if !defined(DART_PRECOMPILED_RUNTIME) | 695 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 684 class ClosureDataSerializationCluster : public SerializationCluster { | 696 class ClosureDataSerializationCluster : public SerializationCluster { |
| 685 public: | 697 public: |
| 686 ClosureDataSerializationCluster() { } | 698 ClosureDataSerializationCluster() { } |
| 687 virtual ~ClosureDataSerializationCluster() { } | 699 virtual ~ClosureDataSerializationCluster() { } |
| 688 | 700 |
| 689 void Trace(Serializer* s, RawObject* object) { | 701 void Trace(Serializer* s, RawObject* object) { |
| 690 RawClosureData* data = ClosureData::RawCast(object); | 702 RawClosureData* data = ClosureData::RawCast(object); |
| 691 objects_.Add(data); | 703 objects_.Add(data); |
| 692 | 704 |
| 693 RawObject** from = data->from(); | 705 if (s->kind() != Snapshot::kAppNoJIT) { |
| 694 RawObject** to = data->to(); | 706 s->Push(data->ptr()->context_scope_); |
| 695 for (RawObject** p = from; p <= to; p++) { | |
| 696 s->Push(*p); | |
| 697 } | 707 } |
| 708 s->Push(data->ptr()->parent_function_); |
| 709 s->Push(data->ptr()->signature_type_); |
| 710 s->Push(data->ptr()->closure_); |
| 698 } | 711 } |
| 699 | 712 |
| 700 void WriteAlloc(Serializer* s) { | 713 void WriteAlloc(Serializer* s) { |
| 701 s->WriteCid(kClosureDataCid); | 714 s->WriteCid(kClosureDataCid); |
| 702 intptr_t count = objects_.length(); | 715 intptr_t count = objects_.length(); |
| 703 s->Write<int32_t>(count); | 716 s->Write<int32_t>(count); |
| 704 for (intptr_t i = 0; i < count; i++) { | 717 for (intptr_t i = 0; i < count; i++) { |
| 705 RawClosureData* data = objects_[i]; | 718 RawClosureData* data = objects_[i]; |
| 706 s->AssignRef(data); | 719 s->AssignRef(data); |
| 707 } | 720 } |
| 708 } | 721 } |
| 709 | 722 |
| 710 void WriteFill(Serializer* s) { | 723 void WriteFill(Serializer* s) { |
| 711 intptr_t count = objects_.length(); | 724 intptr_t count = objects_.length(); |
| 712 for (intptr_t i = 0; i < count; i++) { | 725 for (intptr_t i = 0; i < count; i++) { |
| 713 RawClosureData* data = objects_[i]; | 726 RawClosureData* data = objects_[i]; |
| 714 RawObject** from = data->from(); | 727 if (s->kind() != Snapshot::kAppNoJIT) { |
| 715 RawObject** to = data->to(); | 728 s->WriteRef(data->ptr()->context_scope_); |
| 716 for (RawObject** p = from; p <= to; p++) { | |
| 717 s->WriteRef(*p); | |
| 718 } | 729 } |
| 730 s->WriteRef(data->ptr()->parent_function_); |
| 731 s->WriteRef(data->ptr()->signature_type_); |
| 732 s->WriteRef(data->ptr()->closure_); |
| 719 } | 733 } |
| 720 } | 734 } |
| 721 | 735 |
| 722 private: | 736 private: |
| 723 GrowableArray<RawClosureData*> objects_; | 737 GrowableArray<RawClosureData*> objects_; |
| 724 }; | 738 }; |
| 725 #endif // !DART_PRECOMPILED_RUNTIME | 739 #endif // !DART_PRECOMPILED_RUNTIME |
| 726 | 740 |
| 727 | 741 |
| 728 class ClosureDataDeserializationCluster : public DeserializationCluster { | 742 class ClosureDataDeserializationCluster : public DeserializationCluster { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 740 } | 754 } |
| 741 stop_index_ = d->next_index(); | 755 stop_index_ = d->next_index(); |
| 742 } | 756 } |
| 743 | 757 |
| 744 void ReadFill(Deserializer* d) { | 758 void ReadFill(Deserializer* d) { |
| 745 bool is_vm_object = d->isolate() == Dart::vm_isolate(); | 759 bool is_vm_object = d->isolate() == Dart::vm_isolate(); |
| 746 | 760 |
| 747 for (intptr_t id = start_index_; id < stop_index_; id++) { | 761 for (intptr_t id = start_index_; id < stop_index_; id++) { |
| 748 RawClosureData* data = reinterpret_cast<RawClosureData*>(d->Ref(id)); | 762 RawClosureData* data = reinterpret_cast<RawClosureData*>(d->Ref(id)); |
| 749 Deserializer::InitializeHeader(data, kClosureDataCid, | 763 Deserializer::InitializeHeader(data, kClosureDataCid, |
| 750 ClosureData::InstanceSize(), is_vm_object); | 764 ClosureData::InstanceSize(), |
| 751 RawObject** from = data->from(); | 765 is_vm_object); |
| 752 RawObject** to = data->to(); | 766 if (d->kind() == Snapshot::kAppNoJIT) { |
| 753 for (RawObject** p = from; p <= to; p++) { | 767 data->ptr()->context_scope_ = ContextScope::null(); |
| 754 *p = d->ReadRef(); | 768 } else { |
| 769 data->ptr()->context_scope_ = |
| 770 static_cast<RawContextScope*>(d->ReadRef()); |
| 755 } | 771 } |
| 772 data->ptr()->parent_function_ = static_cast<RawFunction*>(d->ReadRef()); |
| 773 data->ptr()->signature_type_ = static_cast<RawType*>(d->ReadRef()); |
| 774 data->ptr()->closure_ = static_cast<RawInstance*>(d->ReadRef()); |
| 756 } | 775 } |
| 757 } | 776 } |
| 758 }; | 777 }; |
| 759 | 778 |
| 760 | 779 |
| 761 #if !defined(DART_PRECOMPILED_RUNTIME) | 780 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 762 class RedirectionDataSerializationCluster : public SerializationCluster { | 781 class RedirectionDataSerializationCluster : public SerializationCluster { |
| 763 public: | 782 public: |
| 764 RedirectionDataSerializationCluster() { } | 783 RedirectionDataSerializationCluster() { } |
| 765 virtual ~RedirectionDataSerializationCluster() { } | 784 virtual ~RedirectionDataSerializationCluster() { } |
| (...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1482 for (intptr_t i = 0; i < count; i++) { | 1501 for (intptr_t i = 0; i < count; i++) { |
| 1483 RawCode* code = objects_[i]; | 1502 RawCode* code = objects_[i]; |
| 1484 | 1503 |
| 1485 intptr_t pointer_offsets_length = | 1504 intptr_t pointer_offsets_length = |
| 1486 Code::PtrOffBits::decode(code->ptr()->state_bits_); | 1505 Code::PtrOffBits::decode(code->ptr()->state_bits_); |
| 1487 if (pointer_offsets_length != 0) { | 1506 if (pointer_offsets_length != 0) { |
| 1488 FATAL("Cannot serialize code with embedded pointers"); | 1507 FATAL("Cannot serialize code with embedded pointers"); |
| 1489 } | 1508 } |
| 1490 if (kind == Snapshot::kAppNoJIT) { | 1509 if (kind == Snapshot::kAppNoJIT) { |
| 1491 // No disabled code in precompilation. | 1510 // No disabled code in precompilation. |
| 1492 ASSERT(code->ptr()->instructions_ == code->ptr()->active_instructions_); | 1511 NOT_IN_PRECOMPILED(ASSERT( |
| 1512 code->ptr()->instructions_ == code->ptr()->active_instructions_)); |
| 1493 } else { | 1513 } else { |
| 1494 ASSERT(kind == Snapshot::kAppWithJIT); | 1514 ASSERT(kind == Snapshot::kAppWithJIT); |
| 1495 // We never include optimized code in JIT precompilation. Deoptimization | 1515 // We never include optimized code in JIT precompilation. Deoptimization |
| 1496 // requires code patching and we cannot patch code that is shared | 1516 // requires code patching and we cannot patch code that is shared |
| 1497 // between isolates and should not mutate memory allocated by the | 1517 // between isolates and should not mutate memory allocated by the |
| 1498 // embedder. | 1518 // embedder. |
| 1499 bool is_optimized = Code::PtrOffBits::decode(code->ptr()->state_bits_); | 1519 bool is_optimized = Code::PtrOffBits::decode(code->ptr()->state_bits_); |
| 1500 if (is_optimized) { | 1520 if (is_optimized) { |
| 1501 FATAL("Cannot include optimized code in a JIT snapshot"); | 1521 FATAL("Cannot include optimized code in a JIT snapshot"); |
| 1502 } | 1522 } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1545 Deserializer::InitializeHeader(code, kCodeCid, | 1565 Deserializer::InitializeHeader(code, kCodeCid, |
| 1546 Code::InstanceSize(0), is_vm_object); | 1566 Code::InstanceSize(0), is_vm_object); |
| 1547 | 1567 |
| 1548 int32_t text_offset = d->Read<int32_t>(); | 1568 int32_t text_offset = d->Read<int32_t>(); |
| 1549 RawInstructions* instr = reinterpret_cast<RawInstructions*>( | 1569 RawInstructions* instr = reinterpret_cast<RawInstructions*>( |
| 1550 d->GetInstructionsAt(text_offset) + kHeapObjectTag); | 1570 d->GetInstructionsAt(text_offset) + kHeapObjectTag); |
| 1551 | 1571 |
| 1552 code->ptr()->entry_point_ = Instructions::UncheckedEntryPoint(instr); | 1572 code->ptr()->entry_point_ = Instructions::UncheckedEntryPoint(instr); |
| 1553 code->ptr()->checked_entry_point_ = | 1573 code->ptr()->checked_entry_point_ = |
| 1554 Instructions::CheckedEntryPoint(instr); | 1574 Instructions::CheckedEntryPoint(instr); |
| 1555 code->ptr()->active_instructions_ = instr; | 1575 NOT_IN_PRECOMPILED(code->ptr()->active_instructions_ = instr); |
| 1556 code->ptr()->instructions_ = instr; | 1576 code->ptr()->instructions_ = instr; |
| 1557 code->ptr()->object_pool_ = | 1577 code->ptr()->object_pool_ = |
| 1558 reinterpret_cast<RawObjectPool*>(d->ReadRef()); | 1578 reinterpret_cast<RawObjectPool*>(d->ReadRef()); |
| 1559 code->ptr()->owner_ = d->ReadRef(); | 1579 code->ptr()->owner_ = d->ReadRef(); |
| 1560 code->ptr()->exception_handlers_ = | 1580 code->ptr()->exception_handlers_ = |
| 1561 reinterpret_cast<RawExceptionHandlers*>(d->ReadRef()); | 1581 reinterpret_cast<RawExceptionHandlers*>(d->ReadRef()); |
| 1562 code->ptr()->pc_descriptors_ = | 1582 code->ptr()->pc_descriptors_ = |
| 1563 reinterpret_cast<RawPcDescriptors*>(d->ReadRef()); | 1583 reinterpret_cast<RawPcDescriptors*>(d->ReadRef()); |
| 1564 code->ptr()->stackmaps_ = | 1584 code->ptr()->stackmaps_ = |
| 1565 reinterpret_cast<RawArray*>(d->ReadRef()); | 1585 reinterpret_cast<RawArray*>(d->ReadRef()); |
| 1566 | 1586 |
| 1587 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 1567 code->ptr()->deopt_info_array_ = Array::null(); | 1588 code->ptr()->deopt_info_array_ = Array::null(); |
| 1568 code->ptr()->static_calls_target_table_ = Array::null(); | 1589 code->ptr()->static_calls_target_table_ = Array::null(); |
| 1569 code->ptr()->var_descriptors_ = LocalVarDescriptors::null(); | 1590 code->ptr()->var_descriptors_ = LocalVarDescriptors::null(); |
| 1570 code->ptr()->inlined_metadata_ = Array::null(); | 1591 code->ptr()->inlined_metadata_ = Array::null(); |
| 1571 code->ptr()->code_source_map_ = CodeSourceMap::null(); | 1592 code->ptr()->code_source_map_ = CodeSourceMap::null(); |
| 1572 code->ptr()->comments_ = Array::null(); | 1593 code->ptr()->comments_ = Array::null(); |
| 1573 code->ptr()->return_address_metadata_ = Object::null(); | 1594 code->ptr()->return_address_metadata_ = Object::null(); |
| 1574 | 1595 |
| 1575 code->ptr()->compile_timestamp_ = 0; | 1596 code->ptr()->compile_timestamp_ = 0; |
| 1597 #endif |
| 1576 code->ptr()->state_bits_ = d->Read<int32_t>(); | 1598 code->ptr()->state_bits_ = d->Read<int32_t>(); |
| 1599 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 1577 code->ptr()->lazy_deopt_pc_offset_ = -1; | 1600 code->ptr()->lazy_deopt_pc_offset_ = -1; |
| 1601 #endif |
| 1578 } | 1602 } |
| 1579 } | 1603 } |
| 1580 }; | 1604 }; |
| 1581 | 1605 |
| 1582 | 1606 |
| 1583 #if !defined(DART_PRECOMPILED_RUNTIME) | 1607 #if !defined(DART_PRECOMPILED_RUNTIME) |
| 1584 class ObjectPoolSerializationCluster : public SerializationCluster { | 1608 class ObjectPoolSerializationCluster : public SerializationCluster { |
| 1585 public: | 1609 public: |
| 1586 ObjectPoolSerializationCluster() { } | 1610 ObjectPoolSerializationCluster() { } |
| 1587 virtual ~ObjectPoolSerializationCluster() { } | 1611 virtual ~ObjectPoolSerializationCluster() { } |
| (...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2093 void WriteFill(Serializer* s) { | 2117 void WriteFill(Serializer* s) { |
| 2094 Snapshot::Kind kind = s->kind(); | 2118 Snapshot::Kind kind = s->kind(); |
| 2095 intptr_t count = objects_.length(); | 2119 intptr_t count = objects_.length(); |
| 2096 for (intptr_t i = 0; i < count; i++) { | 2120 for (intptr_t i = 0; i < count; i++) { |
| 2097 RawICData* ic = objects_[i]; | 2121 RawICData* ic = objects_[i]; |
| 2098 RawObject** from = ic->from(); | 2122 RawObject** from = ic->from(); |
| 2099 RawObject** to = ic->to_snapshot(kind); | 2123 RawObject** to = ic->to_snapshot(kind); |
| 2100 for (RawObject** p = from; p <= to; p++) { | 2124 for (RawObject** p = from; p <= to; p++) { |
| 2101 s->WriteRef(*p); | 2125 s->WriteRef(*p); |
| 2102 } | 2126 } |
| 2103 s->Write<int32_t>(ic->ptr()->deopt_id_); | 2127 if (kind != Snapshot::kAppNoJIT) { |
| 2128 NOT_IN_PRECOMPILED(s->Write<int32_t>(ic->ptr()->deopt_id_)); |
| 2129 } |
| 2104 s->Write<uint32_t>(ic->ptr()->state_bits_); | 2130 s->Write<uint32_t>(ic->ptr()->state_bits_); |
| 2105 #if defined(TAG_IC_DATA) | 2131 #if defined(TAG_IC_DATA) |
| 2106 s->Write<int32_t>(ic->ptr()->tag_); | 2132 s->Write<int32_t>(ic->ptr()->tag_); |
| 2107 #endif | 2133 #endif |
| 2108 } | 2134 } |
| 2109 } | 2135 } |
| 2110 | 2136 |
| 2111 private: | 2137 private: |
| 2112 GrowableArray<RawICData*> objects_; | 2138 GrowableArray<RawICData*> objects_; |
| 2113 }; | 2139 }; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2139 ICData::InstanceSize(), is_vm_object); | 2165 ICData::InstanceSize(), is_vm_object); |
| 2140 RawObject** from = ic->from(); | 2166 RawObject** from = ic->from(); |
| 2141 RawObject** to_snapshot = ic->to_snapshot(kind); | 2167 RawObject** to_snapshot = ic->to_snapshot(kind); |
| 2142 RawObject** to = ic->to(); | 2168 RawObject** to = ic->to(); |
| 2143 for (RawObject** p = from; p <= to_snapshot; p++) { | 2169 for (RawObject** p = from; p <= to_snapshot; p++) { |
| 2144 *p = d->ReadRef(); | 2170 *p = d->ReadRef(); |
| 2145 } | 2171 } |
| 2146 for (RawObject** p = to_snapshot + 1; p <= to; p++) { | 2172 for (RawObject** p = to_snapshot + 1; p <= to; p++) { |
| 2147 *p = Object::null(); | 2173 *p = Object::null(); |
| 2148 } | 2174 } |
| 2149 ic->ptr()->deopt_id_ = d->Read<int32_t>(); | 2175 NOT_IN_PRECOMPILED(ic->ptr()->deopt_id_ = d->Read<int32_t>()); |
| 2150 ic->ptr()->state_bits_ = d->Read<int32_t>(); | 2176 ic->ptr()->state_bits_ = d->Read<int32_t>(); |
| 2151 #if defined(TAG_IC_DATA) | 2177 #if defined(TAG_IC_DATA) |
| 2152 ic->ptr()->tag_ = d->Read<int32_t>(); | 2178 ic->ptr()->tag_ = d->Read<int32_t>(); |
| 2153 #endif | 2179 #endif |
| 2154 } | 2180 } |
| 2155 } | 2181 } |
| 2156 }; | 2182 }; |
| 2157 | 2183 |
| 2158 | 2184 |
| 2159 #if !defined(DART_PRECOMPILED_RUNTIME) | 2185 #if !defined(DART_PRECOMPILED_RUNTIME) |
| (...skipping 2933 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5093 | 5119 |
| 5094 deserializer.ReadVMSnapshot(); | 5120 deserializer.ReadVMSnapshot(); |
| 5095 | 5121 |
| 5096 Dart::set_instructions_snapshot_buffer(instructions_buffer_); | 5122 Dart::set_instructions_snapshot_buffer(instructions_buffer_); |
| 5097 Dart::set_data_snapshot_buffer(data_buffer_); | 5123 Dart::set_data_snapshot_buffer(data_buffer_); |
| 5098 | 5124 |
| 5099 return ApiError::null(); | 5125 return ApiError::null(); |
| 5100 } | 5126 } |
| 5101 | 5127 |
| 5102 } // namespace dart | 5128 } // namespace dart |
| OLD | NEW |