| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 // Implementation of Serializer | 679 // Implementation of Serializer |
| 680 | 680 |
| 681 | 681 |
| 682 // Helper class to write the bytes of the serialized heap. | 682 // Helper class to write the bytes of the serialized heap. |
| 683 | 683 |
| 684 class SnapshotWriter { | 684 class SnapshotWriter { |
| 685 public: | 685 public: |
| 686 SnapshotWriter() { | 686 SnapshotWriter() { |
| 687 len_ = 0; | 687 len_ = 0; |
| 688 max_ = 8 << 10; // 8K initial size | 688 max_ = 8 << 10; // 8K initial size |
| 689 str_ = NewArray<char>(max_); | 689 str_ = NewArray<byte>(max_); |
| 690 } | 690 } |
| 691 | 691 |
| 692 ~SnapshotWriter() { | 692 ~SnapshotWriter() { |
| 693 DeleteArray(str_); | 693 DeleteArray(str_); |
| 694 } | 694 } |
| 695 | 695 |
| 696 void GetString(char** str, int* len) { | 696 void GetBytes(byte** str, int* len) { |
| 697 *str = NewArray<char>(len_); | 697 *str = NewArray<byte>(len_); |
| 698 memcpy(*str, str_, len_); | 698 memcpy(*str, str_, len_); |
| 699 *len = len_; | 699 *len = len_; |
| 700 } | 700 } |
| 701 | 701 |
| 702 void Reserve(int bytes, int pos); | 702 void Reserve(int bytes, int pos); |
| 703 | 703 |
| 704 void PutC(char c) { | 704 void PutC(char c) { |
| 705 InsertC(c, len_); | 705 InsertC(c, len_); |
| 706 } | 706 } |
| 707 | 707 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 735 return pos + size; | 735 return pos + size; |
| 736 } | 736 } |
| 737 | 737 |
| 738 int InsertString(const char* s, int pos); | 738 int InsertString(const char* s, int pos); |
| 739 | 739 |
| 740 int length() { return len_; } | 740 int length() { return len_; } |
| 741 | 741 |
| 742 Address position() { return reinterpret_cast<Address>(&str_[len_]); } | 742 Address position() { return reinterpret_cast<Address>(&str_[len_]); } |
| 743 | 743 |
| 744 private: | 744 private: |
| 745 char* str_; // the snapshot | 745 byte* str_; // the snapshot |
| 746 int len_; // the current length of str_ | 746 int len_; // the current length of str_ |
| 747 int max_; // the allocated size of str_ | 747 int max_; // the allocated size of str_ |
| 748 }; | 748 }; |
| 749 | 749 |
| 750 | 750 |
| 751 void SnapshotWriter::Reserve(int bytes, int pos) { | 751 void SnapshotWriter::Reserve(int bytes, int pos) { |
| 752 CHECK(0 <= pos && pos <= len_); | 752 CHECK(0 <= pos && pos <= len_); |
| 753 while (len_ + bytes >= max_) { | 753 while (len_ + bytes >= max_) { |
| 754 max_ *= 2; | 754 max_ *= 2; |
| 755 char* old = str_; | 755 byte* old = str_; |
| 756 str_ = NewArray<char>(max_); | 756 str_ = NewArray<byte>(max_); |
| 757 memcpy(str_, old, len_); | 757 memcpy(str_, old, len_); |
| 758 DeleteArray(old); | 758 DeleteArray(old); |
| 759 } | 759 } |
| 760 if (pos < len_) { | 760 if (pos < len_) { |
| 761 char* old = str_; | 761 byte* old = str_; |
| 762 str_ = NewArray<char>(max_); | 762 str_ = NewArray<byte>(max_); |
| 763 memcpy(str_, old, pos); | 763 memcpy(str_, old, pos); |
| 764 memcpy(str_ + pos + bytes, old + pos, len_ - pos); | 764 memcpy(str_ + pos + bytes, old + pos, len_ - pos); |
| 765 DeleteArray(old); | 765 DeleteArray(old); |
| 766 } | 766 } |
| 767 } | 767 } |
| 768 | 768 |
| 769 int SnapshotWriter::InsertString(const char* s, int pos) { | 769 int SnapshotWriter::InsertString(const char* s, int pos) { |
| 770 int size = strlen(s); | 770 int size = strlen(s); |
| 771 pos = InsertC('[', pos); | 771 pos = InsertC('[', pos); |
| 772 pos = InsertInt(size, pos); | 772 pos = InsertInt(size, pos); |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 922 InitializeAllocators(); | 922 InitializeAllocators(); |
| 923 reference_encoder_ = new ExternalReferenceEncoder(); | 923 reference_encoder_ = new ExternalReferenceEncoder(); |
| 924 PutHeader(); | 924 PutHeader(); |
| 925 Heap::IterateRoots(this); | 925 Heap::IterateRoots(this); |
| 926 PutLog(); | 926 PutLog(); |
| 927 PutContextStack(); | 927 PutContextStack(); |
| 928 disable(); | 928 disable(); |
| 929 } | 929 } |
| 930 | 930 |
| 931 | 931 |
| 932 void Serializer::Finalize(char** str, int* len) { | 932 void Serializer::Finalize(byte** str, int* len) { |
| 933 writer_->GetString(str, len); | 933 writer_->GetBytes(str, len); |
| 934 } | 934 } |
| 935 | 935 |
| 936 | 936 |
| 937 // Serialize objects by writing them into the stream. | 937 // Serialize objects by writing them into the stream. |
| 938 | 938 |
| 939 void Serializer::VisitPointers(Object** start, Object** end) { | 939 void Serializer::VisitPointers(Object** start, Object** end) { |
| 940 bool root = root_; | 940 bool root = root_; |
| 941 root_ = false; | 941 root_ = false; |
| 942 for (Object** p = start; p < end; ++p) { | 942 for (Object** p = start; p < end; ++p) { |
| 943 bool serialized; | 943 bool serialized; |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1173 } | 1173 } |
| 1174 | 1174 |
| 1175 | 1175 |
| 1176 //------------------------------------------------------------------------------ | 1176 //------------------------------------------------------------------------------ |
| 1177 // Implementation of Deserializer | 1177 // Implementation of Deserializer |
| 1178 | 1178 |
| 1179 | 1179 |
| 1180 static const int kInitArraySize = 32; | 1180 static const int kInitArraySize = 32; |
| 1181 | 1181 |
| 1182 | 1182 |
| 1183 Deserializer::Deserializer(const char* str, int len) | 1183 Deserializer::Deserializer(const byte* str, int len) |
| 1184 : reader_(str, len), | 1184 : reader_(str, len), |
| 1185 map_pages_(kInitArraySize), | 1185 map_pages_(kInitArraySize), |
| 1186 old_pointer_pages_(kInitArraySize), | 1186 old_pointer_pages_(kInitArraySize), |
| 1187 old_data_pages_(kInitArraySize), | 1187 old_data_pages_(kInitArraySize), |
| 1188 code_pages_(kInitArraySize), | 1188 code_pages_(kInitArraySize), |
| 1189 large_objects_(kInitArraySize), | 1189 large_objects_(kInitArraySize), |
| 1190 global_handles_(4) { | 1190 global_handles_(4) { |
| 1191 root_ = true; | 1191 root_ = true; |
| 1192 roots_ = 0; | 1192 roots_ = 0; |
| 1193 objects_ = 0; | 1193 objects_ = 0; |
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1519 ASSERT(index < large_objects_.length()); | 1519 ASSERT(index < large_objects_.length()); |
| 1520 } | 1520 } |
| 1521 return large_objects_[index]; // s.page_offset() is ignored. | 1521 return large_objects_[index]; // s.page_offset() is ignored. |
| 1522 } | 1522 } |
| 1523 UNREACHABLE(); | 1523 UNREACHABLE(); |
| 1524 return NULL; | 1524 return NULL; |
| 1525 } | 1525 } |
| 1526 | 1526 |
| 1527 | 1527 |
| 1528 } } // namespace v8::internal | 1528 } } // namespace v8::internal |
| OLD | NEW |