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

Side by Side Diff: src/serialize.h

Issue 373713006: Introduce code serializer/deserializer. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comments and rebased Created 6 years, 5 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 | « src/parser.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"
11 #include "src/parser.h"
11 #include "src/snapshot-source-sink.h" 12 #include "src/snapshot-source-sink.h"
12 13
13 namespace v8 { 14 namespace v8 {
14 namespace internal { 15 namespace internal {
15 16
16 // A TypeCode is used to distinguish different kinds of external reference. 17 // A TypeCode is used to distinguish different kinds of external reference.
17 // It is a single bit to make testing for types easy. 18 // It is a single bit to make testing for types easy.
18 enum TypeCode { 19 enum TypeCode {
19 UNCLASSIFIED, // One-of-a-kind references. 20 UNCLASSIFIED, // One-of-a-kind references.
20 BUILTIN, 21 BUILTIN,
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 Isolate* isolate_; 463 Isolate* isolate_;
463 // Keep track of the fullness of each space in order to generate 464 // Keep track of the fullness of each space in order to generate
464 // relative addresses for back references. 465 // relative addresses for back references.
465 int fullness_[LAST_SPACE + 1]; 466 int fullness_[LAST_SPACE + 1];
466 SnapshotByteSink* sink_; 467 SnapshotByteSink* sink_;
467 ExternalReferenceEncoder* external_reference_encoder_; 468 ExternalReferenceEncoder* external_reference_encoder_;
468 469
469 SerializationAddressMapper address_mapper_; 470 SerializationAddressMapper address_mapper_;
470 intptr_t root_index_wave_front_; 471 intptr_t root_index_wave_front_;
471 void Pad(); 472 void Pad();
473 void PadByte();
472 474
473 friend class ObjectSerializer; 475 friend class ObjectSerializer;
474 friend class Deserializer; 476 friend class Deserializer;
475 477
476 // We may not need the code address map for logging for every instance 478 // We may not need the code address map for logging for every instance
477 // of the serializer. Initialize it on demand. 479 // of the serializer. Initialize it on demand.
478 void InitializeCodeAddressMap(); 480 void InitializeCodeAddressMap();
479 481
480 private: 482 private:
481 CodeAddressMap* code_address_map_; 483 CodeAddressMap* code_address_map_;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 int skip); 546 int skip);
545 void SerializeWeakReferences(); 547 void SerializeWeakReferences();
546 void Serialize() { 548 void Serialize() {
547 SerializeStrongReferences(); 549 SerializeStrongReferences();
548 SerializeWeakReferences(); 550 SerializeWeakReferences();
549 Pad(); 551 Pad();
550 } 552 }
551 }; 553 };
552 554
553 555
556 class CodeSerializer : public Serializer {
557 public:
558 CodeSerializer(Isolate* isolate, SnapshotByteSink* sink)
559 : Serializer(isolate, sink) {
560 set_root_index_wave_front(Heap::kStrongRootListLength);
561 InitializeCodeAddressMap();
562 }
563
564 static ScriptData* Serialize(Handle<SharedFunctionInfo> info);
565 virtual void SerializeObject(Object* o, HowToCode how_to_code,
566 WhereToPoint where_to_point, int skip);
567
568 static Object* Deserialize(Isolate* isolate, ScriptData* data);
569
570 // The data header consists of int-sized entries:
571 // [0] version hash
572 // [1] length in bytes
573 // [2..8] reservation sizes for spaces from NEW_SPACE to PROPERTY_CELL_SPACE.
574 static const int kHeaderSize = 9;
575 static const int kVersionHashOffset = 0;
576 static const int kPayloadLengthOffset = 1;
577 static const int kReservationsOffset = 2;
578 };
554 } } // namespace v8::internal 579 } } // namespace v8::internal
555 580
556 #endif // V8_SERIALIZE_H_ 581 #endif // V8_SERIALIZE_H_
OLDNEW
« no previous file with comments | « src/parser.cc ('k') | src/serialize.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698