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

Side by Side Diff: src/serialize.h

Issue 957703003: Tweak memory management in the serializer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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 | « no previous file | src/serialize.cc » ('j') | src/serialize.cc » ('J')
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 554 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 MaybeHandle<Object> DeserializePartial( 565 MaybeHandle<Object> DeserializePartial(
566 Isolate* isolate, Handle<JSGlobalProxy> global_proxy, 566 Isolate* isolate, Handle<JSGlobalProxy> global_proxy,
567 Handle<FixedArray>* outdated_contexts_out); 567 Handle<FixedArray>* outdated_contexts_out);
568 568
569 // Deserialize a shared function info. Fail gracefully. 569 // Deserialize a shared function info. Fail gracefully.
570 MaybeHandle<SharedFunctionInfo> DeserializeCode(Isolate* isolate); 570 MaybeHandle<SharedFunctionInfo> DeserializeCode(Isolate* isolate);
571 571
572 void FlushICacheForNewCodeObjects(); 572 void FlushICacheForNewCodeObjects();
573 573
574 // Pass a vector of externally-provided objects referenced by the snapshot. 574 // Pass a vector of externally-provided objects referenced by the snapshot.
575 // The ownership to its backing store is handed over as well. 575 // The ownership to its backing store is not handed over.
576 void SetAttachedObjects(Vector<Handle<Object> > attached_objects) { 576 void SetAttachedObjects(Vector<Handle<Object> > attached_objects) {
577 attached_objects_ = attached_objects; 577 attached_objects_ = attached_objects;
578 } 578 }
579 579
580 private: 580 private:
581 virtual void VisitPointers(Object** start, Object** end); 581 virtual void VisitPointers(Object** start, Object** end);
582 582
583 virtual void VisitRuntimeEntry(RelocInfo* rinfo) { 583 virtual void VisitRuntimeEntry(RelocInfo* rinfo) {
584 UNREACHABLE(); 584 UNREACHABLE();
585 } 585 }
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 696
697 enum ReturnSkip { kCanReturnSkipInsteadOfSkipping, kIgnoringReturn }; 697 enum ReturnSkip { kCanReturnSkipInsteadOfSkipping, kIgnoringReturn };
698 // This function outputs or skips the raw data between the last pointer and 698 // This function outputs or skips the raw data between the last pointer and
699 // up to the current position. It optionally can just return the number of 699 // up to the current position. It optionally can just return the number of
700 // bytes to skip instead of performing a skip instruction, in case the skip 700 // bytes to skip instead of performing a skip instruction, in case the skip
701 // can be merged into the next instruction. 701 // can be merged into the next instruction.
702 int OutputRawData(Address up_to, ReturnSkip return_skip = kIgnoringReturn); 702 int OutputRawData(Address up_to, ReturnSkip return_skip = kIgnoringReturn);
703 // External strings are serialized in a way to resemble sequential strings. 703 // External strings are serialized in a way to resemble sequential strings.
704 void SerializeExternalString(); 704 void SerializeExternalString();
705 705
706 Address PrepareCode();
707
706 Serializer* serializer_; 708 Serializer* serializer_;
707 HeapObject* object_; 709 HeapObject* object_;
708 SnapshotByteSink* sink_; 710 SnapshotByteSink* sink_;
709 int reference_representation_; 711 int reference_representation_;
710 int bytes_processed_so_far_; 712 int bytes_processed_so_far_;
711 bool code_object_; 713 bool code_object_;
712 bool code_has_been_output_; 714 bool code_has_been_output_;
713 }; 715 };
714 716
715 virtual void SerializeObject(HeapObject* o, HowToCode how_to_code, 717 virtual void SerializeObject(HeapObject* o, HowToCode how_to_code,
(...skipping 27 matching lines...) Expand all
743 void Pad(); 745 void Pad();
744 746
745 // Some roots should not be serialized, because their actual value depends on 747 // Some roots should not be serialized, because their actual value depends on
746 // absolute addresses and they are reset after deserialization, anyway. 748 // absolute addresses and they are reset after deserialization, anyway.
747 bool ShouldBeSkipped(Object** current); 749 bool ShouldBeSkipped(Object** current);
748 750
749 // We may not need the code address map for logging for every instance 751 // We may not need the code address map for logging for every instance
750 // of the serializer. Initialize it on demand. 752 // of the serializer. Initialize it on demand.
751 void InitializeCodeAddressMap(); 753 void InitializeCodeAddressMap();
752 754
755 inline Address GetCodeBuffer(int size) {
756 if (size > code_buffer_.length()) code_buffer_.Dispose();
757 code_buffer_ = Vector<byte>::New(size);
758 return code_buffer_.start();
759 }
760
753 inline uint32_t max_chunk_size(int space) const { 761 inline uint32_t max_chunk_size(int space) const {
754 DCHECK_LE(0, space); 762 DCHECK_LE(0, space);
755 DCHECK_LT(space, kNumberOfSpaces); 763 DCHECK_LT(space, kNumberOfSpaces);
756 return max_chunk_size_[space]; 764 return max_chunk_size_[space];
757 } 765 }
758 766
759 SnapshotByteSink* sink() const { return sink_; } 767 SnapshotByteSink* sink() const { return sink_; }
760 768
761 Isolate* isolate_; 769 Isolate* isolate_;
762 770
(...skipping 14 matching lines...) Expand all
777 // page. So we track the chunk size in pending_chunk_ of a space, but 785 // page. So we track the chunk size in pending_chunk_ of a space, but
778 // when it exceeds a page, we complete the current chunk and start a new one. 786 // when it exceeds a page, we complete the current chunk and start a new one.
779 uint32_t pending_chunk_[kNumberOfPreallocatedSpaces]; 787 uint32_t pending_chunk_[kNumberOfPreallocatedSpaces];
780 List<uint32_t> completed_chunks_[kNumberOfPreallocatedSpaces]; 788 List<uint32_t> completed_chunks_[kNumberOfPreallocatedSpaces];
781 uint32_t max_chunk_size_[kNumberOfPreallocatedSpaces]; 789 uint32_t max_chunk_size_[kNumberOfPreallocatedSpaces];
782 790
783 // We map serialized large objects to indexes for back-referencing. 791 // We map serialized large objects to indexes for back-referencing.
784 uint32_t large_objects_total_size_; 792 uint32_t large_objects_total_size_;
785 uint32_t seen_large_objects_index_; 793 uint32_t seen_large_objects_index_;
786 794
795 Vector<byte> code_buffer_;
796
787 DISALLOW_COPY_AND_ASSIGN(Serializer); 797 DISALLOW_COPY_AND_ASSIGN(Serializer);
788 }; 798 };
789 799
790 800
791 class PartialSerializer : public Serializer { 801 class PartialSerializer : public Serializer {
792 public: 802 public:
793 PartialSerializer(Isolate* isolate, Serializer* startup_snapshot_serializer, 803 PartialSerializer(Isolate* isolate, Serializer* startup_snapshot_serializer,
794 SnapshotByteSink* sink) 804 SnapshotByteSink* sink)
795 : Serializer(isolate, sink), 805 : Serializer(isolate, sink),
796 startup_serializer_(startup_snapshot_serializer), 806 startup_serializer_(startup_snapshot_serializer),
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 kNumInternalizedStringsOffset + kInt32Size; 1026 kNumInternalizedStringsOffset + kInt32Size;
1017 static const int kNumCodeStubKeysOffset = kNumReservationsOffset + kInt32Size; 1027 static const int kNumCodeStubKeysOffset = kNumReservationsOffset + kInt32Size;
1018 static const int kPayloadLengthOffset = kNumCodeStubKeysOffset + kInt32Size; 1028 static const int kPayloadLengthOffset = kNumCodeStubKeysOffset + kInt32Size;
1019 static const int kChecksum1Offset = kPayloadLengthOffset + kInt32Size; 1029 static const int kChecksum1Offset = kPayloadLengthOffset + kInt32Size;
1020 static const int kChecksum2Offset = kChecksum1Offset + kInt32Size; 1030 static const int kChecksum2Offset = kChecksum1Offset + kInt32Size;
1021 static const int kHeaderSize = kChecksum2Offset + kInt32Size; 1031 static const int kHeaderSize = kChecksum2Offset + kInt32Size;
1022 }; 1032 };
1023 } } // namespace v8::internal 1033 } } // namespace v8::internal
1024 1034
1025 #endif // V8_SERIALIZE_H_ 1035 #endif // V8_SERIALIZE_H_
OLDNEW
« no previous file with comments | « no previous file | src/serialize.cc » ('j') | src/serialize.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698