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

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

Issue 15640002: Fix runnning of vm benchmarks on golem. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 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/benchmark_test.cc ('k') | no next file » | 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/bigint_operations.h" 5 #include "vm/bigint_operations.h"
6 #include "vm/object.h" 6 #include "vm/object.h"
7 #include "vm/object_store.h" 7 #include "vm/object_store.h"
8 #include "vm/snapshot.h" 8 #include "vm/snapshot.h"
9 #include "vm/symbols.h" 9 #include "vm/symbols.h"
10 #include "vm/visitor.h" 10 #include "vm/visitor.h"
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 SnapshotWriterVisitor visitor(writer); 566 SnapshotWriterVisitor visitor(writer);
567 visitor.VisitPointers(from(), to()); 567 visitor.VisitPointers(from(), to());
568 } 568 }
569 569
570 570
571 RawPatchClass* PatchClass::ReadFrom(SnapshotReader* reader, 571 RawPatchClass* PatchClass::ReadFrom(SnapshotReader* reader,
572 intptr_t object_id, 572 intptr_t object_id,
573 intptr_t tags, 573 intptr_t tags,
574 Snapshot::Kind kind) { 574 Snapshot::Kind kind) {
575 ASSERT(reader != NULL); 575 ASSERT(reader != NULL);
576 ASSERT((kind != Snapshot::kMessage) && 576 ASSERT(((kind == Snapshot::kScript) &&
577 !RawObject::IsCreatedFromSnapshot(tags)); 577 !RawObject::IsCreatedFromSnapshot(tags)) ||
578 (kind == Snapshot::kFull));
578 579
579 // Allocate function object. 580 // Allocate function object.
580 PatchClass& cls = PatchClass::ZoneHandle(reader->isolate(), 581 PatchClass& cls = PatchClass::ZoneHandle(reader->isolate(),
581 NEW_OBJECT(PatchClass)); 582 NEW_OBJECT(PatchClass));
582 reader->AddBackRef(object_id, &cls, kIsDeserialized); 583 reader->AddBackRef(object_id, &cls, kIsDeserialized);
583 584
584 // Set the object tags. 585 // Set the object tags.
585 cls.set_tags(tags); 586 cls.set_tags(tags);
586 587
587 // Set all the object fields. 588 // Set all the object fields.
588 // TODO(5411462): Need to assert No GC can happen here, even though 589 // TODO(5411462): Need to assert No GC can happen here, even though
589 // allocations may happen. 590 // allocations may happen.
590 intptr_t num_flds = (cls.raw()->to() - cls.raw()->from()); 591 intptr_t num_flds = (cls.raw()->to() - cls.raw()->from());
591 for (intptr_t i = 0; i <= num_flds; i++) { 592 for (intptr_t i = 0; i <= num_flds; i++) {
592 *(cls.raw()->from() + i) = reader->ReadObjectRef(); 593 *(cls.raw()->from() + i) = reader->ReadObjectRef();
593 } 594 }
594 595
595 return cls.raw(); 596 return cls.raw();
596 } 597 }
597 598
598 599
599 void RawPatchClass::WriteTo(SnapshotWriter* writer, 600 void RawPatchClass::WriteTo(SnapshotWriter* writer,
600 intptr_t object_id, 601 intptr_t object_id,
601 Snapshot::Kind kind) { 602 Snapshot::Kind kind) {
602 ASSERT(writer != NULL); 603 ASSERT(writer != NULL);
603 ASSERT((kind != Snapshot::kMessage) && 604 ASSERT(((kind == Snapshot::kScript) &&
604 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); 605 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))) ||
606 (kind == Snapshot::kFull));
605 607
606 // Write out the serialization header value for this object. 608 // Write out the serialization header value for this object.
607 writer->WriteInlinedObjectHeader(object_id); 609 writer->WriteInlinedObjectHeader(object_id);
608 610
609 // Write out the class and tags information. 611 // Write out the class and tags information.
610 writer->WriteVMIsolateObject(kPatchClassCid); 612 writer->WriteVMIsolateObject(kPatchClassCid);
611 writer->WriteIntptrValue(writer->GetObjectTags(this)); 613 writer->WriteIntptrValue(writer->GetObjectTags(this));
612 // Write out all the object pointer fields. 614 // Write out all the object pointer fields.
613 SnapshotWriterVisitor visitor(writer); 615 SnapshotWriterVisitor visitor(writer);
614 visitor.VisitPointers(from(), to()); 616 visitor.VisitPointers(from(), to());
615 } 617 }
616 618
617 619
618 RawClosureData* ClosureData::ReadFrom(SnapshotReader* reader, 620 RawClosureData* ClosureData::ReadFrom(SnapshotReader* reader,
619 intptr_t object_id, 621 intptr_t object_id,
620 intptr_t tags, 622 intptr_t tags,
621 Snapshot::Kind kind) { 623 Snapshot::Kind kind) {
622 ASSERT(reader != NULL); 624 ASSERT(reader != NULL);
623 ASSERT((kind != Snapshot::kMessage) && 625 ASSERT(((kind == Snapshot::kScript) &&
624 !RawObject::IsCreatedFromSnapshot(tags)); 626 !RawObject::IsCreatedFromSnapshot(tags)) ||
627 (kind == Snapshot::kFull));
625 628
626 // Allocate closure data object. 629 // Allocate closure data object.
627 ClosureData& data = ClosureData::ZoneHandle( 630 ClosureData& data = ClosureData::ZoneHandle(
628 reader->isolate(), NEW_OBJECT(ClosureData)); 631 reader->isolate(), NEW_OBJECT(ClosureData));
629 reader->AddBackRef(object_id, &data, kIsDeserialized); 632 reader->AddBackRef(object_id, &data, kIsDeserialized);
630 633
631 // Set the object tags. 634 // Set the object tags.
632 data.set_tags(tags); 635 data.set_tags(tags);
633 636
634 // Set all the object fields. 637 // Set all the object fields.
635 // TODO(5411462): Need to assert No GC can happen here, even though 638 // TODO(5411462): Need to assert No GC can happen here, even though
636 // allocations may happen. 639 // allocations may happen.
637 intptr_t num_flds = (data.raw()->to() - data.raw()->from()); 640 intptr_t num_flds = (data.raw()->to() - data.raw()->from());
638 for (intptr_t i = 0; i <= num_flds; i++) { 641 for (intptr_t i = 0; i <= num_flds; i++) {
639 *(data.raw()->from() + i) = reader->ReadObjectRef(); 642 *(data.raw()->from() + i) = reader->ReadObjectRef();
640 } 643 }
641 644
642 return data.raw(); 645 return data.raw();
643 } 646 }
644 647
645 648
646 void RawClosureData::WriteTo(SnapshotWriter* writer, 649 void RawClosureData::WriteTo(SnapshotWriter* writer,
647 intptr_t object_id, 650 intptr_t object_id,
648 Snapshot::Kind kind) { 651 Snapshot::Kind kind) {
649 ASSERT(writer != NULL); 652 ASSERT(writer != NULL);
650 ASSERT((kind != Snapshot::kMessage) && 653 ASSERT(((kind == Snapshot::kScript) &&
651 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); 654 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))) ||
655 (kind == Snapshot::kFull));
652 656
653 // Write out the serialization header value for this object. 657 // Write out the serialization header value for this object.
654 writer->WriteInlinedObjectHeader(object_id); 658 writer->WriteInlinedObjectHeader(object_id);
655 659
656 // Write out the class and tags information. 660 // Write out the class and tags information.
657 writer->WriteVMIsolateObject(kClosureDataCid); 661 writer->WriteVMIsolateObject(kClosureDataCid);
658 writer->WriteIntptrValue(writer->GetObjectTags(this)); 662 writer->WriteIntptrValue(writer->GetObjectTags(this));
659 663
660 // Context scope. 664 // Context scope.
661 // We don't write the context scope in the snapshot. 665 // We don't write the context scope in the snapshot.
662 writer->WriteObjectImpl(Object::null()); 666 writer->WriteObjectImpl(Object::null());
663 667
664 // Parent function. 668 // Parent function.
665 writer->WriteObjectImpl(ptr()->parent_function_); 669 writer->WriteObjectImpl(ptr()->parent_function_);
666 670
667 // Signature class. 671 // Signature class.
668 writer->WriteObjectImpl(ptr()->signature_class_); 672 writer->WriteObjectImpl(ptr()->signature_class_);
669 673
670 // Static closure/Closure allocation stub. 674 // Static closure/Closure allocation stub.
671 // We don't write the closure or allocation stub in the snapshot. 675 // We don't write the closure or allocation stub in the snapshot.
672 writer->WriteObjectImpl(Object::null()); 676 writer->WriteObjectImpl(Object::null());
673 } 677 }
674 678
675 679
676 RawRedirectionData* RedirectionData::ReadFrom(SnapshotReader* reader, 680 RawRedirectionData* RedirectionData::ReadFrom(SnapshotReader* reader,
677 intptr_t object_id, 681 intptr_t object_id,
678 intptr_t tags, 682 intptr_t tags,
679 Snapshot::Kind kind) { 683 Snapshot::Kind kind) {
680 ASSERT(reader != NULL); 684 ASSERT(reader != NULL);
681 ASSERT((kind != Snapshot::kMessage) && 685 ASSERT(((kind == Snapshot::kScript) &&
682 !RawObject::IsCreatedFromSnapshot(tags)); 686 !RawObject::IsCreatedFromSnapshot(tags)) ||
687 (kind == Snapshot::kFull));
683 688
684 // Allocate redirection data object. 689 // Allocate redirection data object.
685 RedirectionData& data = RedirectionData::ZoneHandle( 690 RedirectionData& data = RedirectionData::ZoneHandle(
686 reader->isolate(), NEW_OBJECT(RedirectionData)); 691 reader->isolate(), NEW_OBJECT(RedirectionData));
687 reader->AddBackRef(object_id, &data, kIsDeserialized); 692 reader->AddBackRef(object_id, &data, kIsDeserialized);
688 693
689 // Set the object tags. 694 // Set the object tags.
690 data.set_tags(tags); 695 data.set_tags(tags);
691 696
692 // Set all the object fields. 697 // Set all the object fields.
693 // TODO(5411462): Need to assert No GC can happen here, even though 698 // TODO(5411462): Need to assert No GC can happen here, even though
694 // allocations may happen. 699 // allocations may happen.
695 intptr_t num_flds = (data.raw()->to() - data.raw()->from()); 700 intptr_t num_flds = (data.raw()->to() - data.raw()->from());
696 for (intptr_t i = 0; i <= num_flds; i++) { 701 for (intptr_t i = 0; i <= num_flds; i++) {
697 *(data.raw()->from() + i) = reader->ReadObjectRef(); 702 *(data.raw()->from() + i) = reader->ReadObjectRef();
698 } 703 }
699 704
700 return data.raw(); 705 return data.raw();
701 } 706 }
702 707
703 708
704 void RawRedirectionData::WriteTo(SnapshotWriter* writer, 709 void RawRedirectionData::WriteTo(SnapshotWriter* writer,
705 intptr_t object_id, 710 intptr_t object_id,
706 Snapshot::Kind kind) { 711 Snapshot::Kind kind) {
707 ASSERT(writer != NULL); 712 ASSERT(writer != NULL);
708 ASSERT((kind != Snapshot::kMessage) && 713 ASSERT(((kind == Snapshot::kScript) &&
709 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); 714 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))) ||
715 (kind == Snapshot::kFull));
710 716
711 // Write out the serialization header value for this object. 717 // Write out the serialization header value for this object.
712 writer->WriteInlinedObjectHeader(object_id); 718 writer->WriteInlinedObjectHeader(object_id);
713 719
714 // Write out the class and tags information. 720 // Write out the class and tags information.
715 writer->WriteVMIsolateObject(kRedirectionDataCid); 721 writer->WriteVMIsolateObject(kRedirectionDataCid);
716 writer->WriteIntptrValue(writer->GetObjectTags(this)); 722 writer->WriteIntptrValue(writer->GetObjectTags(this));
717 723
718 // Write out all the object pointer fields. 724 // Write out all the object pointer fields.
719 SnapshotWriterVisitor visitor(writer); 725 SnapshotWriterVisitor visitor(writer);
720 visitor.VisitPointers(from(), to()); 726 visitor.VisitPointers(from(), to());
721 } 727 }
722 728
723 729
724 RawFunction* Function::ReadFrom(SnapshotReader* reader, 730 RawFunction* Function::ReadFrom(SnapshotReader* reader,
725 intptr_t object_id, 731 intptr_t object_id,
726 intptr_t tags, 732 intptr_t tags,
727 Snapshot::Kind kind) { 733 Snapshot::Kind kind) {
728 ASSERT(reader != NULL); 734 ASSERT(reader != NULL);
729 ASSERT((kind != Snapshot::kMessage) && 735 ASSERT(((kind == Snapshot::kScript) &&
730 !RawObject::IsCreatedFromSnapshot(tags)); 736 !RawObject::IsCreatedFromSnapshot(tags)) ||
737 (kind == Snapshot::kFull));
731 738
732 // Allocate function object. 739 // Allocate function object.
733 Function& func = Function::ZoneHandle( 740 Function& func = Function::ZoneHandle(
734 reader->isolate(), NEW_OBJECT(Function)); 741 reader->isolate(), NEW_OBJECT(Function));
735 reader->AddBackRef(object_id, &func, kIsDeserialized); 742 reader->AddBackRef(object_id, &func, kIsDeserialized);
736 743
737 // Set the object tags. 744 // Set the object tags.
738 func.set_tags(tags); 745 func.set_tags(tags);
739 746
740 // Set all the non object fields. 747 // Set all the non object fields.
(...skipping 16 matching lines...) Expand all
757 } 764 }
758 765
759 return func.raw(); 766 return func.raw();
760 } 767 }
761 768
762 769
763 void RawFunction::WriteTo(SnapshotWriter* writer, 770 void RawFunction::WriteTo(SnapshotWriter* writer,
764 intptr_t object_id, 771 intptr_t object_id,
765 Snapshot::Kind kind) { 772 Snapshot::Kind kind) {
766 ASSERT(writer != NULL); 773 ASSERT(writer != NULL);
767 ASSERT((kind != Snapshot::kMessage) && 774 ASSERT(((kind == Snapshot::kScript) &&
768 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); 775 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))) ||
776 (kind == Snapshot::kFull));
769 777
770 // Write out the serialization header value for this object. 778 // Write out the serialization header value for this object.
771 writer->WriteInlinedObjectHeader(object_id); 779 writer->WriteInlinedObjectHeader(object_id);
772 780
773 // Write out the class and tags information. 781 // Write out the class and tags information.
774 writer->WriteVMIsolateObject(kFunctionCid); 782 writer->WriteVMIsolateObject(kFunctionCid);
775 writer->WriteIntptrValue(writer->GetObjectTags(this)); 783 writer->WriteIntptrValue(writer->GetObjectTags(this));
776 784
777 // Write out all the non object fields. 785 // Write out all the non object fields.
778 writer->WriteIntptrValue(ptr()->token_pos_); 786 writer->WriteIntptrValue(ptr()->token_pos_);
(...skipping 10 matching lines...) Expand all
789 SnapshotWriterVisitor visitor(writer); 797 SnapshotWriterVisitor visitor(writer);
790 visitor.VisitPointers(from(), to()); 798 visitor.VisitPointers(from(), to());
791 } 799 }
792 800
793 801
794 RawField* Field::ReadFrom(SnapshotReader* reader, 802 RawField* Field::ReadFrom(SnapshotReader* reader,
795 intptr_t object_id, 803 intptr_t object_id,
796 intptr_t tags, 804 intptr_t tags,
797 Snapshot::Kind kind) { 805 Snapshot::Kind kind) {
798 ASSERT(reader != NULL); 806 ASSERT(reader != NULL);
799 ASSERT((kind != Snapshot::kMessage) && 807 ASSERT(((kind == Snapshot::kScript) &&
800 !RawObject::IsCreatedFromSnapshot(tags)); 808 !RawObject::IsCreatedFromSnapshot(tags)) ||
809 (kind == Snapshot::kFull));
801 810
802 // Allocate field object. 811 // Allocate field object.
803 Field& field = Field::ZoneHandle(reader->isolate(), NEW_OBJECT(Field)); 812 Field& field = Field::ZoneHandle(reader->isolate(), NEW_OBJECT(Field));
804 reader->AddBackRef(object_id, &field, kIsDeserialized); 813 reader->AddBackRef(object_id, &field, kIsDeserialized);
805 814
806 // Set the object tags. 815 // Set the object tags.
807 field.set_tags(tags); 816 field.set_tags(tags);
808 817
809 // Set all non object fields. 818 // Set all non object fields.
810 field.set_token_pos(reader->ReadIntptrValue()); 819 field.set_token_pos(reader->ReadIntptrValue());
(...skipping 10 matching lines...) Expand all
821 } 830 }
822 831
823 return field.raw(); 832 return field.raw();
824 } 833 }
825 834
826 835
827 void RawField::WriteTo(SnapshotWriter* writer, 836 void RawField::WriteTo(SnapshotWriter* writer,
828 intptr_t object_id, 837 intptr_t object_id,
829 Snapshot::Kind kind) { 838 Snapshot::Kind kind) {
830 ASSERT(writer != NULL); 839 ASSERT(writer != NULL);
831 ASSERT((kind != Snapshot::kMessage) && 840 ASSERT(((kind == Snapshot::kScript) &&
832 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); 841 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))) ||
842 (kind == Snapshot::kFull));
833 843
834 // Write out the serialization header value for this object. 844 // Write out the serialization header value for this object.
835 writer->WriteInlinedObjectHeader(object_id); 845 writer->WriteInlinedObjectHeader(object_id);
836 846
837 // Write out the class and tags information. 847 // Write out the class and tags information.
838 writer->WriteVMIsolateObject(kFieldCid); 848 writer->WriteVMIsolateObject(kFieldCid);
839 writer->WriteIntptrValue(writer->GetObjectTags(this)); 849 writer->WriteIntptrValue(writer->GetObjectTags(this));
840 850
841 // Write out all the non object fields. 851 // Write out all the non object fields.
842 writer->WriteIntptrValue(ptr()->token_pos_); 852 writer->WriteIntptrValue(ptr()->token_pos_);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 writer->WriteObjectImpl(ptr()->literal_); 907 writer->WriteObjectImpl(ptr()->literal_);
898 writer->WriteObjectImpl(ptr()->value_); 908 writer->WriteObjectImpl(ptr()->value_);
899 } 909 }
900 910
901 911
902 RawTokenStream* TokenStream::ReadFrom(SnapshotReader* reader, 912 RawTokenStream* TokenStream::ReadFrom(SnapshotReader* reader,
903 intptr_t object_id, 913 intptr_t object_id,
904 intptr_t tags, 914 intptr_t tags,
905 Snapshot::Kind kind) { 915 Snapshot::Kind kind) {
906 ASSERT(reader != NULL); 916 ASSERT(reader != NULL);
907 ASSERT((kind != Snapshot::kMessage) 917 ASSERT(((kind == Snapshot::kScript) &&
908 && !RawObject::IsCreatedFromSnapshot(tags)); 918 !RawObject::IsCreatedFromSnapshot(tags)) ||
919 (kind == Snapshot::kFull));
909 920
910 // Read the length so that we can determine number of tokens to read. 921 // Read the length so that we can determine number of tokens to read.
911 intptr_t len = reader->ReadSmiValue(); 922 intptr_t len = reader->ReadSmiValue();
912 923
913 // Create the token stream object. 924 // Create the token stream object.
914 TokenStream& token_stream = TokenStream::ZoneHandle( 925 TokenStream& token_stream = TokenStream::ZoneHandle(
915 reader->isolate(), NEW_OBJECT_WITH_LEN(TokenStream, len)); 926 reader->isolate(), NEW_OBJECT_WITH_LEN(TokenStream, len));
916 reader->AddBackRef(object_id, &token_stream, kIsDeserialized); 927 reader->AddBackRef(object_id, &token_stream, kIsDeserialized);
917 928
918 // Set the object tags. 929 // Set the object tags.
(...skipping 15 matching lines...) Expand all
934 token_stream.SetPrivateKey(*(reader->StringHandle())); 945 token_stream.SetPrivateKey(*(reader->StringHandle()));
935 946
936 return token_stream.raw(); 947 return token_stream.raw();
937 } 948 }
938 949
939 950
940 void RawTokenStream::WriteTo(SnapshotWriter* writer, 951 void RawTokenStream::WriteTo(SnapshotWriter* writer,
941 intptr_t object_id, 952 intptr_t object_id,
942 Snapshot::Kind kind) { 953 Snapshot::Kind kind) {
943 ASSERT(writer != NULL); 954 ASSERT(writer != NULL);
944 ASSERT((kind != Snapshot::kMessage) && 955 ASSERT(((kind == Snapshot::kScript) &&
945 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); 956 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))) ||
957 (kind == Snapshot::kFull));
946 958
947 // Write out the serialization header value for this object. 959 // Write out the serialization header value for this object.
948 writer->WriteInlinedObjectHeader(object_id); 960 writer->WriteInlinedObjectHeader(object_id);
949 961
950 // Write out the class and tags information. 962 // Write out the class and tags information.
951 writer->WriteVMIsolateObject(kTokenStreamCid); 963 writer->WriteVMIsolateObject(kTokenStreamCid);
952 writer->WriteIntptrValue(writer->GetObjectTags(this)); 964 writer->WriteIntptrValue(writer->GetObjectTags(this));
953 965
954 // Write out the length field and the token stream. 966 // Write out the length field and the token stream.
955 RawExternalTypedData* stream = ptr()->stream_; 967 RawExternalTypedData* stream = ptr()->stream_;
956 intptr_t len = Smi::Value(stream->ptr()->length_); 968 intptr_t len = Smi::Value(stream->ptr()->length_);
957 writer->Write<RawObject*>(stream->ptr()->length_); 969 writer->Write<RawObject*>(stream->ptr()->length_);
958 writer->WriteBytes(stream->ptr()->data_, len); 970 writer->WriteBytes(stream->ptr()->data_, len);
959 971
960 // Write out the literal/identifier token array. 972 // Write out the literal/identifier token array.
961 writer->WriteObjectImpl(ptr()->token_objects_); 973 writer->WriteObjectImpl(ptr()->token_objects_);
962 // Write out the private key in use by the token stream. 974 // Write out the private key in use by the token stream.
963 writer->WriteObjectImpl(ptr()->private_key_); 975 writer->WriteObjectImpl(ptr()->private_key_);
964 } 976 }
965 977
966 978
967 RawScript* Script::ReadFrom(SnapshotReader* reader, 979 RawScript* Script::ReadFrom(SnapshotReader* reader,
968 intptr_t object_id, 980 intptr_t object_id,
969 intptr_t tags, 981 intptr_t tags,
970 Snapshot::Kind kind) { 982 Snapshot::Kind kind) {
971 ASSERT(reader != NULL); 983 ASSERT(reader != NULL);
972 ASSERT((kind != Snapshot::kMessage) && 984 ASSERT(((kind == Snapshot::kScript) &&
973 !RawObject::IsCreatedFromSnapshot(tags)); 985 !RawObject::IsCreatedFromSnapshot(tags)) ||
986 (kind == Snapshot::kFull));
974 987
975 // Allocate script object. 988 // Allocate script object.
976 Script& script = Script::ZoneHandle(reader->isolate(), NEW_OBJECT(Script)); 989 Script& script = Script::ZoneHandle(reader->isolate(), NEW_OBJECT(Script));
977 reader->AddBackRef(object_id, &script, kIsDeserialized); 990 reader->AddBackRef(object_id, &script, kIsDeserialized);
978 991
979 // Set the object tags. 992 // Set the object tags.
980 script.set_tags(tags); 993 script.set_tags(tags);
981 994
982 // Set all the object fields. 995 // Set all the object fields.
983 // TODO(5411462): Need to assert No GC can happen here, even though 996 // TODO(5411462): Need to assert No GC can happen here, even though
(...skipping 12 matching lines...) Expand all
996 1009
997 return script.raw(); 1010 return script.raw();
998 } 1011 }
999 1012
1000 1013
1001 void RawScript::WriteTo(SnapshotWriter* writer, 1014 void RawScript::WriteTo(SnapshotWriter* writer,
1002 intptr_t object_id, 1015 intptr_t object_id,
1003 Snapshot::Kind kind) { 1016 Snapshot::Kind kind) {
1004 ASSERT(writer != NULL); 1017 ASSERT(writer != NULL);
1005 ASSERT(tokens_ != TokenStream::null()); 1018 ASSERT(tokens_ != TokenStream::null());
1006 ASSERT((kind != Snapshot::kMessage) && 1019 ASSERT(((kind == Snapshot::kScript) &&
1007 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); 1020 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))) ||
1021 (kind == Snapshot::kFull));
1008 1022
1009 // Write out the serialization header value for this object. 1023 // Write out the serialization header value for this object.
1010 writer->WriteInlinedObjectHeader(object_id); 1024 writer->WriteInlinedObjectHeader(object_id);
1011 1025
1012 // Write out the class and tags information. 1026 // Write out the class and tags information.
1013 writer->WriteVMIsolateObject(kScriptCid); 1027 writer->WriteVMIsolateObject(kScriptCid);
1014 writer->WriteIntptrValue(writer->GetObjectTags(this)); 1028 writer->WriteIntptrValue(writer->GetObjectTags(this));
1015 1029
1016 // Write out all the object pointer fields. 1030 // Write out all the object pointer fields.
1017 writer->WriteObjectImpl(ptr()->url_); 1031 writer->WriteObjectImpl(ptr()->url_);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1081 ASSERT(writer != NULL); 1095 ASSERT(writer != NULL);
1082 ASSERT(kind != Snapshot::kMessage); 1096 ASSERT(kind != Snapshot::kMessage);
1083 1097
1084 // Write out the serialization header value for this object. 1098 // Write out the serialization header value for this object.
1085 writer->WriteInlinedObjectHeader(object_id); 1099 writer->WriteInlinedObjectHeader(object_id);
1086 1100
1087 // Write out the class and tags information. 1101 // Write out the class and tags information.
1088 writer->WriteVMIsolateObject(kLibraryCid); 1102 writer->WriteVMIsolateObject(kLibraryCid);
1089 writer->WriteIntptrValue(writer->GetObjectTags(this)); 1103 writer->WriteIntptrValue(writer->GetObjectTags(this));
1090 1104
1091 if (RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))) { 1105 if ((kind == Snapshot::kScript) &&
1106 RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))) {
1092 ASSERT(kind != Snapshot::kFull); 1107 ASSERT(kind != Snapshot::kFull);
1093 // Write out library URL so that it can be looked up when reading. 1108 // Write out library URL so that it can be looked up when reading.
1094 writer->WriteObjectImpl(ptr()->url_); 1109 writer->WriteObjectImpl(ptr()->url_);
1095 } else { 1110 } else {
1096 // Write out all non object fields. 1111 // Write out all non object fields.
1097 writer->WriteIntptrValue(ptr()->index_); 1112 writer->WriteIntptrValue(ptr()->index_);
1098 writer->WriteIntptrValue(ptr()->num_imports_); 1113 writer->WriteIntptrValue(ptr()->num_imports_);
1099 writer->WriteIntptrValue(ptr()->num_anonymous_); 1114 writer->WriteIntptrValue(ptr()->num_anonymous_);
1100 writer->Write<bool>(ptr()->corelib_imported_); 1115 writer->Write<bool>(ptr()->corelib_imported_);
1101 writer->Write<bool>(ptr()->debuggable_); 1116 writer->Write<bool>(ptr()->debuggable_);
(...skipping 10 matching lines...) Expand all
1112 visitor.VisitPointers(from(), to()); 1127 visitor.VisitPointers(from(), to());
1113 } 1128 }
1114 } 1129 }
1115 1130
1116 1131
1117 RawLibraryPrefix* LibraryPrefix::ReadFrom(SnapshotReader* reader, 1132 RawLibraryPrefix* LibraryPrefix::ReadFrom(SnapshotReader* reader,
1118 intptr_t object_id, 1133 intptr_t object_id,
1119 intptr_t tags, 1134 intptr_t tags,
1120 Snapshot::Kind kind) { 1135 Snapshot::Kind kind) {
1121 ASSERT(reader != NULL); 1136 ASSERT(reader != NULL);
1122 ASSERT((kind != Snapshot::kMessage) && 1137 ASSERT(((kind == Snapshot::kScript) &&
1123 !RawObject::IsCreatedFromSnapshot(tags)); 1138 !RawObject::IsCreatedFromSnapshot(tags)) ||
1139 (kind == Snapshot::kFull));
1124 1140
1125 // Allocate library prefix object. 1141 // Allocate library prefix object.
1126 LibraryPrefix& prefix = LibraryPrefix::ZoneHandle( 1142 LibraryPrefix& prefix = LibraryPrefix::ZoneHandle(
1127 reader->isolate(), NEW_OBJECT(LibraryPrefix)); 1143 reader->isolate(), NEW_OBJECT(LibraryPrefix));
1128 reader->AddBackRef(object_id, &prefix, kIsDeserialized); 1144 reader->AddBackRef(object_id, &prefix, kIsDeserialized);
1129 1145
1130 // Set the object tags. 1146 // Set the object tags.
1131 prefix.set_tags(tags); 1147 prefix.set_tags(tags);
1132 1148
1133 // Set all non object fields. 1149 // Set all non object fields.
1134 prefix.raw_ptr()->num_imports_ = reader->ReadIntptrValue(); 1150 prefix.raw_ptr()->num_imports_ = reader->ReadIntptrValue();
1135 1151
1136 // Set all the object fields. 1152 // Set all the object fields.
1137 // TODO(5411462): Need to assert No GC can happen here, even though 1153 // TODO(5411462): Need to assert No GC can happen here, even though
1138 // allocations may happen. 1154 // allocations may happen.
1139 intptr_t num_flds = (prefix.raw()->to() - prefix.raw()->from()); 1155 intptr_t num_flds = (prefix.raw()->to() - prefix.raw()->from());
1140 for (intptr_t i = 0; i <= num_flds; i++) { 1156 for (intptr_t i = 0; i <= num_flds; i++) {
1141 *(prefix.raw()->from() + i) = reader->ReadObjectRef(); 1157 *(prefix.raw()->from() + i) = reader->ReadObjectRef();
1142 } 1158 }
1143 1159
1144 return prefix.raw(); 1160 return prefix.raw();
1145 } 1161 }
1146 1162
1147 1163
1148 void RawLibraryPrefix::WriteTo(SnapshotWriter* writer, 1164 void RawLibraryPrefix::WriteTo(SnapshotWriter* writer,
1149 intptr_t object_id, 1165 intptr_t object_id,
1150 Snapshot::Kind kind) { 1166 Snapshot::Kind kind) {
1151 ASSERT(writer != NULL); 1167 ASSERT(writer != NULL);
1152 ASSERT((kind != Snapshot::kMessage) && 1168 ASSERT(((kind == Snapshot::kScript) &&
1153 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); 1169 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))) ||
1170 (kind == Snapshot::kFull));
1154 1171
1155 // Write out the serialization header value for this object. 1172 // Write out the serialization header value for this object.
1156 writer->WriteInlinedObjectHeader(object_id); 1173 writer->WriteInlinedObjectHeader(object_id);
1157 1174
1158 // Write out the class and tags information. 1175 // Write out the class and tags information.
1159 writer->WriteVMIsolateObject(kLibraryPrefixCid); 1176 writer->WriteVMIsolateObject(kLibraryPrefixCid);
1160 writer->WriteIntptrValue(writer->GetObjectTags(this)); 1177 writer->WriteIntptrValue(writer->GetObjectTags(this));
1161 1178
1162 // Write out all non object fields. 1179 // Write out all non object fields.
1163 writer->WriteIntptrValue(ptr()->num_imports_); 1180 writer->WriteIntptrValue(ptr()->num_imports_);
1164 1181
1165 // Write out all the object pointer fields. 1182 // Write out all the object pointer fields.
1166 SnapshotWriterVisitor visitor(writer); 1183 SnapshotWriterVisitor visitor(writer);
1167 visitor.VisitPointers(from(), to()); 1184 visitor.VisitPointers(from(), to());
1168 } 1185 }
1169 1186
1170 1187
1171 RawNamespace* Namespace::ReadFrom(SnapshotReader* reader, 1188 RawNamespace* Namespace::ReadFrom(SnapshotReader* reader,
1172 intptr_t object_id, 1189 intptr_t object_id,
1173 intptr_t tags, 1190 intptr_t tags,
1174 Snapshot::Kind kind) { 1191 Snapshot::Kind kind) {
1175 ASSERT(reader != NULL); 1192 ASSERT(reader != NULL);
1176 ASSERT((kind != Snapshot::kMessage) && 1193 ASSERT(((kind == Snapshot::kScript) &&
1177 !RawObject::IsCreatedFromSnapshot(tags)); 1194 !RawObject::IsCreatedFromSnapshot(tags)) ||
1195 (kind == Snapshot::kFull));
1178 1196
1179 // Allocate Namespace object. 1197 // Allocate Namespace object.
1180 Namespace& ns = Namespace::ZoneHandle( 1198 Namespace& ns = Namespace::ZoneHandle(
1181 reader->isolate(), NEW_OBJECT(Namespace)); 1199 reader->isolate(), NEW_OBJECT(Namespace));
1182 reader->AddBackRef(object_id, &ns, kIsDeserialized); 1200 reader->AddBackRef(object_id, &ns, kIsDeserialized);
1183 1201
1184 // Set the object tags. 1202 // Set the object tags.
1185 ns.set_tags(tags); 1203 ns.set_tags(tags);
1186 1204
1187 // Set all the object fields. 1205 // Set all the object fields.
1188 // TODO(5411462): Need to assert No GC can happen here, even though 1206 // TODO(5411462): Need to assert No GC can happen here, even though
1189 // allocations may happen. 1207 // allocations may happen.
1190 intptr_t num_flds = (ns.raw()->to() - ns.raw()->from()); 1208 intptr_t num_flds = (ns.raw()->to() - ns.raw()->from());
1191 for (intptr_t i = 0; i <= num_flds; i++) { 1209 for (intptr_t i = 0; i <= num_flds; i++) {
1192 *(ns.raw()->from() + i) = reader->ReadObjectRef(); 1210 *(ns.raw()->from() + i) = reader->ReadObjectRef();
1193 } 1211 }
1194 1212
1195 return ns.raw(); 1213 return ns.raw();
1196 } 1214 }
1197 1215
1198 1216
1199 void RawNamespace::WriteTo(SnapshotWriter* writer, 1217 void RawNamespace::WriteTo(SnapshotWriter* writer,
1200 intptr_t object_id, 1218 intptr_t object_id,
1201 Snapshot::Kind kind) { 1219 Snapshot::Kind kind) {
1202 ASSERT(writer != NULL); 1220 ASSERT(writer != NULL);
1203 ASSERT((kind != Snapshot::kMessage) && 1221 ASSERT(((kind == Snapshot::kScript) &&
1204 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))); 1222 !RawObject::IsCreatedFromSnapshot(writer->GetObjectTags(this))) ||
1223 (kind == Snapshot::kFull));
1205 1224
1206 // Write out the serialization header value for this object. 1225 // Write out the serialization header value for this object.
1207 writer->WriteInlinedObjectHeader(object_id); 1226 writer->WriteInlinedObjectHeader(object_id);
1208 1227
1209 // Write out the class and tags information. 1228 // Write out the class and tags information.
1210 writer->WriteVMIsolateObject(kNamespaceCid); 1229 writer->WriteVMIsolateObject(kNamespaceCid);
1211 writer->WriteIntptrValue(writer->GetObjectTags(this)); 1230 writer->WriteIntptrValue(writer->GetObjectTags(this));
1212 1231
1213 // Write out all the object pointer fields. 1232 // Write out all the object pointer fields.
1214 SnapshotWriterVisitor visitor(writer); 1233 SnapshotWriterVisitor visitor(writer);
(...skipping 1406 matching lines...) Expand 10 before | Expand all | Expand 10 after
2621 // Write out the class and tags information. 2640 // Write out the class and tags information.
2622 writer->WriteIndexedObject(kWeakPropertyCid); 2641 writer->WriteIndexedObject(kWeakPropertyCid);
2623 writer->WriteIntptrValue(writer->GetObjectTags(this)); 2642 writer->WriteIntptrValue(writer->GetObjectTags(this));
2624 2643
2625 // Write out all the other fields. 2644 // Write out all the other fields.
2626 writer->Write<RawObject*>(ptr()->key_); 2645 writer->Write<RawObject*>(ptr()->key_);
2627 writer->Write<RawObject*>(ptr()->value_); 2646 writer->Write<RawObject*>(ptr()->value_);
2628 } 2647 }
2629 2648
2630 } // namespace dart 2649 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/benchmark_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698