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

Side by Side Diff: src/serialize.h

Issue 1005183006: Serializer: serialize internal references via object visitor. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix compilation 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/objects.h ('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 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 }; 341 };
342 342
343 // Where to point within the object. 343 // Where to point within the object.
344 enum WhereToPoint { 344 enum WhereToPoint {
345 kStartOfObject = 0, 345 kStartOfObject = 0,
346 kInnerPointer = 0x80, // First insn in code object or payload of cell. 346 kInnerPointer = 0x80, // First insn in code object or payload of cell.
347 kWhereToPointMask = 0x80 347 kWhereToPointMask = 0x80
348 }; 348 };
349 349
350 // Misc. 350 // Misc.
351
352 // 0x48, 0x88 and 0xc8 are unused.
353
351 // Raw data to be copied from the snapshot. This byte code does not advance 354 // Raw data to be copied from the snapshot. This byte code does not advance
352 // the current pointer, which is used for code objects, where we write the 355 // the current pointer, which is used for code objects, where we write the
353 // entire code in one memcpy, then fix up stuff with kSkip and other byte 356 // entire code in one memcpy, then fix up stuff with kSkip and other byte
354 // codes that overwrite data. 357 // codes that overwrite data.
355 static const int kRawData = 0x20; 358 static const int kRawData = 0x20;
356 // Some common raw lengths: 0x21-0x3f. 359 // Some common raw lengths: 0x21-0x3f.
357 // These autoadvance the current pointer. 360 // These autoadvance the current pointer.
358 static const int kOnePointerRawData = 0x21; 361 static const int kOnePointerRawData = 0x21;
359 362
363 // Internal reference encoded as offsets of pc and target from code entry.
364 static const int kInternalReference = 0x08;
365
360 static const int kVariableRepeat = 0x60; 366 static const int kVariableRepeat = 0x60;
361 // 0x61-0x6f Repeat last word 367 // 0x61-0x6f Repeat last word
362 static const int kFixedRepeat = 0x61; 368 static const int kFixedRepeat = 0x61;
363 static const int kFixedRepeatBase = kFixedRepeat - 1; 369 static const int kFixedRepeatBase = kFixedRepeat - 1;
364 static const int kLastFixedRepeat = 0x6f; 370 static const int kLastFixedRepeat = 0x6f;
365 static const int kMaxFixedRepeats = kLastFixedRepeat - kFixedRepeatBase; 371 static const int kMaxFixedRepeats = kLastFixedRepeat - kFixedRepeatBase;
366 static int CodeForRepeats(int repeats) { 372 static int CodeForRepeats(int repeats) {
367 DCHECK(repeats >= 1 && repeats <= kMaxFixedRepeats); 373 DCHECK(repeats >= 1 && repeats <= kMaxFixedRepeats);
368 return kFixedRepeatBase + repeats; 374 return kFixedRepeatBase + repeats;
369 } 375 }
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 void EncodeReservations(List<SerializedData::Reservation>* out) const; 610 void EncodeReservations(List<SerializedData::Reservation>* out) const;
605 611
606 Isolate* isolate() const { return isolate_; } 612 Isolate* isolate() const { return isolate_; }
607 613
608 BackReferenceMap* back_reference_map() { return &back_reference_map_; } 614 BackReferenceMap* back_reference_map() { return &back_reference_map_; }
609 RootIndexMap* root_index_map() { return &root_index_map_; } 615 RootIndexMap* root_index_map() { return &root_index_map_; }
610 616
611 protected: 617 protected:
612 class ObjectSerializer : public ObjectVisitor { 618 class ObjectSerializer : public ObjectVisitor {
613 public: 619 public:
614 ObjectSerializer(Serializer* serializer, 620 ObjectSerializer(Serializer* serializer, Object* o, SnapshotByteSink* sink,
615 Object* o, 621 HowToCode how_to_code, WhereToPoint where_to_point)
616 SnapshotByteSink* sink, 622 : serializer_(serializer),
617 HowToCode how_to_code, 623 object_(HeapObject::cast(o)),
618 WhereToPoint where_to_point) 624 sink_(sink),
619 : serializer_(serializer), 625 reference_representation_(how_to_code + where_to_point),
620 object_(HeapObject::cast(o)), 626 bytes_processed_so_far_(0),
621 sink_(sink), 627 is_code_object_(o->IsCode()),
622 reference_representation_(how_to_code + where_to_point), 628 code_has_been_output_(false) {}
623 bytes_processed_so_far_(0),
624 code_object_(o->IsCode()),
625 code_has_been_output_(false) { }
626 void Serialize(); 629 void Serialize();
627 void VisitPointers(Object** start, Object** end); 630 void VisitPointers(Object** start, Object** end);
628 void VisitEmbeddedPointer(RelocInfo* target); 631 void VisitEmbeddedPointer(RelocInfo* target);
629 void VisitExternalReference(Address* p); 632 void VisitExternalReference(Address* p);
630 void VisitExternalReference(RelocInfo* rinfo); 633 void VisitExternalReference(RelocInfo* rinfo);
634 void VisitInternalReference(RelocInfo* rinfo);
631 void VisitCodeTarget(RelocInfo* target); 635 void VisitCodeTarget(RelocInfo* target);
632 void VisitCodeEntry(Address entry_address); 636 void VisitCodeEntry(Address entry_address);
633 void VisitCell(RelocInfo* rinfo); 637 void VisitCell(RelocInfo* rinfo);
634 void VisitRuntimeEntry(RelocInfo* reloc); 638 void VisitRuntimeEntry(RelocInfo* reloc);
635 // Used for seralizing the external strings that hold the natives source. 639 // Used for seralizing the external strings that hold the natives source.
636 void VisitExternalOneByteString( 640 void VisitExternalOneByteString(
637 v8::String::ExternalOneByteStringResource** resource); 641 v8::String::ExternalOneByteStringResource** resource);
638 // We can't serialize a heap with external two byte strings. 642 // We can't serialize a heap with external two byte strings.
639 void VisitExternalTwoByteString( 643 void VisitExternalTwoByteString(
640 v8::String::ExternalStringResource** resource) { 644 v8::String::ExternalStringResource** resource) {
(...skipping 12 matching lines...) Expand all
653 // External strings are serialized in a way to resemble sequential strings. 657 // External strings are serialized in a way to resemble sequential strings.
654 void SerializeExternalString(); 658 void SerializeExternalString();
655 659
656 Address PrepareCode(); 660 Address PrepareCode();
657 661
658 Serializer* serializer_; 662 Serializer* serializer_;
659 HeapObject* object_; 663 HeapObject* object_;
660 SnapshotByteSink* sink_; 664 SnapshotByteSink* sink_;
661 int reference_representation_; 665 int reference_representation_;
662 int bytes_processed_so_far_; 666 int bytes_processed_so_far_;
663 bool code_object_; 667 bool is_code_object_;
664 bool code_has_been_output_; 668 bool code_has_been_output_;
665 }; 669 };
666 670
667 virtual void SerializeObject(HeapObject* o, HowToCode how_to_code, 671 virtual void SerializeObject(HeapObject* o, HowToCode how_to_code,
668 WhereToPoint where_to_point, int skip) = 0; 672 WhereToPoint where_to_point, int skip) = 0;
669 673
670 void PutRoot(int index, HeapObject* object, HowToCode how, WhereToPoint where, 674 void PutRoot(int index, HeapObject* object, HowToCode how, WhereToPoint where,
671 int skip); 675 int skip);
672 676
673 // Returns true if the object was successfully serialized. 677 // Returns true if the object was successfully serialized.
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 kNumInternalizedStringsOffset + kInt32Size; 975 kNumInternalizedStringsOffset + kInt32Size;
972 static const int kNumCodeStubKeysOffset = kNumReservationsOffset + kInt32Size; 976 static const int kNumCodeStubKeysOffset = kNumReservationsOffset + kInt32Size;
973 static const int kPayloadLengthOffset = kNumCodeStubKeysOffset + kInt32Size; 977 static const int kPayloadLengthOffset = kNumCodeStubKeysOffset + kInt32Size;
974 static const int kChecksum1Offset = kPayloadLengthOffset + kInt32Size; 978 static const int kChecksum1Offset = kPayloadLengthOffset + kInt32Size;
975 static const int kChecksum2Offset = kChecksum1Offset + kInt32Size; 979 static const int kChecksum2Offset = kChecksum1Offset + kInt32Size;
976 static const int kHeaderSize = kChecksum2Offset + kInt32Size; 980 static const int kHeaderSize = kChecksum2Offset + kInt32Size;
977 }; 981 };
978 } } // namespace v8::internal 982 } } // namespace v8::internal
979 983
980 #endif // V8_SERIALIZE_H_ 984 #endif // V8_SERIALIZE_H_
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/serialize.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698