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

Side by Side Diff: src/serialize.h

Issue 1003363003: Serializer: cache hashmaps on the isolate. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: remove bogus test. rebased Created 5 years, 9 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 | « src/isolate.cc ('k') | src/serialize.cc » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_SERIALIZE_H_ 5 #ifndef V8_SERIALIZE_H_
6 #define V8_SERIALIZE_H_ 6 #define V8_SERIALIZE_H_
7 7
8 #include "src/hashmap.h" 8 #include "src/hashmap.h"
9 #include "src/heap-profiler.h" 9 #include "src/heap-profiler.h"
10 #include "src/isolate.h" 10 #include "src/isolate.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 uint32_t Encode(Address key) const; 56 uint32_t Encode(Address key) const;
57 57
58 const char* NameOfAddress(Isolate* isolate, Address address) const; 58 const char* NameOfAddress(Isolate* isolate, Address address) const;
59 59
60 private: 60 private:
61 static uint32_t Hash(Address key) { 61 static uint32_t Hash(Address key) {
62 return static_cast<uint32_t>(reinterpret_cast<uintptr_t>(key) >> 62 return static_cast<uint32_t>(reinterpret_cast<uintptr_t>(key) >>
63 kPointerSizeLog2); 63 kPointerSizeLog2);
64 } 64 }
65 65
66 HashMap map_; 66 HashMap* map_;
67 67
68 DISALLOW_COPY_AND_ASSIGN(ExternalReferenceEncoder); 68 DISALLOW_COPY_AND_ASSIGN(ExternalReferenceEncoder);
69 }; 69 };
70 70
71 71
72 class AddressMapBase { 72 class AddressMapBase {
73 protected: 73 protected:
74 static void SetValue(HashMap::Entry* entry, uint32_t v) { 74 static void SetValue(HashMap::Entry* entry, uint32_t v) {
75 entry->value = reinterpret_cast<void*>(v); 75 entry->value = reinterpret_cast<void*>(v);
76 } 76 }
(...skipping 18 matching lines...) Expand all
95 }; 95 };
96 96
97 97
98 class RootIndexMap : public AddressMapBase { 98 class RootIndexMap : public AddressMapBase {
99 public: 99 public:
100 explicit RootIndexMap(Isolate* isolate); 100 explicit RootIndexMap(Isolate* isolate);
101 101
102 static const int kInvalidRootIndex = -1; 102 static const int kInvalidRootIndex = -1;
103 103
104 int Lookup(HeapObject* obj) { 104 int Lookup(HeapObject* obj) {
105 HashMap::Entry* entry = LookupEntry(&map_, obj, false); 105 HashMap::Entry* entry = LookupEntry(map_, obj, false);
106 if (entry) return GetValue(entry); 106 if (entry) return GetValue(entry);
107 return kInvalidRootIndex; 107 return kInvalidRootIndex;
108 } 108 }
109 109
110 private: 110 private:
111 HashMap map_; 111 HashMap* map_;
112 112
113 DISALLOW_COPY_AND_ASSIGN(RootIndexMap); 113 DISALLOW_COPY_AND_ASSIGN(RootIndexMap);
114 }; 114 };
115 115
116 116
117 class PartialCacheIndexMap : public AddressMapBase { 117 class PartialCacheIndexMap : public AddressMapBase {
118 public: 118 public:
119 PartialCacheIndexMap() : map_(HashMap::PointersMatch) {} 119 PartialCacheIndexMap() : map_(HashMap::PointersMatch) {}
120 120
121 static const int kInvalidIndex = -1; 121 static const int kInvalidIndex = -1;
(...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 sink_->PutInt(skip, "SkipDistanceFromSerializeObject"); 680 sink_->PutInt(skip, "SkipDistanceFromSerializeObject");
681 } 681 }
682 } 682 }
683 683
684 bool BackReferenceIsAlreadyAllocated(BackReference back_reference); 684 bool BackReferenceIsAlreadyAllocated(BackReference back_reference);
685 685
686 // This will return the space for an object. 686 // This will return the space for an object.
687 BackReference AllocateLargeObject(int size); 687 BackReference AllocateLargeObject(int size);
688 BackReference Allocate(AllocationSpace space, int size); 688 BackReference Allocate(AllocationSpace space, int size);
689 int EncodeExternalReference(Address addr) { 689 int EncodeExternalReference(Address addr) {
690 return external_reference_encoder_->Encode(addr); 690 return external_reference_encoder_.Encode(addr);
691 } 691 }
692 692
693 // GetInt reads 4 bytes at once, requiring padding at the end. 693 // GetInt reads 4 bytes at once, requiring padding at the end.
694 void Pad(); 694 void Pad();
695 695
696 // Some roots should not be serialized, because their actual value depends on 696 // Some roots should not be serialized, because their actual value depends on
697 // absolute addresses and they are reset after deserialization, anyway. 697 // absolute addresses and they are reset after deserialization, anyway.
698 bool ShouldBeSkipped(Object** current); 698 bool ShouldBeSkipped(Object** current);
699 699
700 // We may not need the code address map for logging for every instance 700 // We may not need the code address map for logging for every instance
701 // of the serializer. Initialize it on demand. 701 // of the serializer. Initialize it on demand.
702 void InitializeCodeAddressMap(); 702 void InitializeCodeAddressMap();
703 703
704 Code* CopyCode(Code* code); 704 Code* CopyCode(Code* code);
705 705
706 inline uint32_t max_chunk_size(int space) const { 706 inline uint32_t max_chunk_size(int space) const {
707 DCHECK_LE(0, space); 707 DCHECK_LE(0, space);
708 DCHECK_LT(space, kNumberOfSpaces); 708 DCHECK_LT(space, kNumberOfSpaces);
709 return max_chunk_size_[space]; 709 return max_chunk_size_[space];
710 } 710 }
711 711
712 SnapshotByteSink* sink() const { return sink_; } 712 SnapshotByteSink* sink() const { return sink_; }
713 713
714 Isolate* isolate_; 714 Isolate* isolate_;
715 715
716 SnapshotByteSink* sink_; 716 SnapshotByteSink* sink_;
717 ExternalReferenceEncoder* external_reference_encoder_; 717 ExternalReferenceEncoder external_reference_encoder_;
718 718
719 BackReferenceMap back_reference_map_; 719 BackReferenceMap back_reference_map_;
720 RootIndexMap root_index_map_; 720 RootIndexMap root_index_map_;
721 721
722 friend class Deserializer; 722 friend class Deserializer;
723 friend class ObjectSerializer; 723 friend class ObjectSerializer;
724 friend class SnapshotData; 724 friend class SnapshotData;
725 725
726 private: 726 private:
727 CodeAddressMap* code_address_map_; 727 CodeAddressMap* code_address_map_;
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 kNumInternalizedStringsOffset + kInt32Size; 971 kNumInternalizedStringsOffset + kInt32Size;
972 static const int kNumCodeStubKeysOffset = kNumReservationsOffset + kInt32Size; 972 static const int kNumCodeStubKeysOffset = kNumReservationsOffset + kInt32Size;
973 static const int kPayloadLengthOffset = kNumCodeStubKeysOffset + kInt32Size; 973 static const int kPayloadLengthOffset = kNumCodeStubKeysOffset + kInt32Size;
974 static const int kChecksum1Offset = kPayloadLengthOffset + kInt32Size; 974 static const int kChecksum1Offset = kPayloadLengthOffset + kInt32Size;
975 static const int kChecksum2Offset = kChecksum1Offset + kInt32Size; 975 static const int kChecksum2Offset = kChecksum1Offset + kInt32Size;
976 static const int kHeaderSize = kChecksum2Offset + kInt32Size; 976 static const int kHeaderSize = kChecksum2Offset + kInt32Size;
977 }; 977 };
978 } } // namespace v8::internal 978 } } // namespace v8::internal
979 979
980 #endif // V8_SERIALIZE_H_ 980 #endif // V8_SERIALIZE_H_
OLDNEW
« no previous file with comments | « src/isolate.cc ('k') | src/serialize.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698