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

Side by Side Diff: src/snapshot/partial-serializer.cc

Issue 2052433003: [snapshot] make snapshot sink a non-dynamic member of the serializer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@noref
Patch Set: rebase Created 4 years, 6 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/snapshot/partial-serializer.h ('k') | src/snapshot/serializer.h » ('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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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 #include "src/snapshot/partial-serializer.h" 5 #include "src/snapshot/partial-serializer.h"
6 6
7 #include "src/objects-inl.h" 7 #include "src/objects-inl.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
11 11
12 PartialSerializer::PartialSerializer(Isolate* isolate, 12 PartialSerializer::PartialSerializer(Isolate* isolate,
13 Serializer* startup_snapshot_serializer, 13 Serializer* startup_snapshot_serializer)
14 SnapshotByteSink* sink) 14 : Serializer(isolate),
15 : Serializer(isolate, sink),
16 startup_serializer_(startup_snapshot_serializer), 15 startup_serializer_(startup_snapshot_serializer),
17 next_partial_cache_index_(0) { 16 next_partial_cache_index_(0) {
18 InitializeCodeAddressMap(); 17 InitializeCodeAddressMap();
19 } 18 }
20 19
21 PartialSerializer::~PartialSerializer() { 20 PartialSerializer::~PartialSerializer() {
22 OutputStatistics("PartialSerializer"); 21 OutputStatistics("PartialSerializer");
23 } 22 }
24 23
25 void PartialSerializer::Serialize(Object** o) { 24 void PartialSerializer::Serialize(Object** o) {
(...skipping 30 matching lines...) Expand all
56 int root_index = root_index_map_.Lookup(obj); 55 int root_index = root_index_map_.Lookup(obj);
57 if (root_index != RootIndexMap::kInvalidRootIndex) { 56 if (root_index != RootIndexMap::kInvalidRootIndex) {
58 PutRoot(root_index, obj, how_to_code, where_to_point, skip); 57 PutRoot(root_index, obj, how_to_code, where_to_point, skip);
59 return; 58 return;
60 } 59 }
61 60
62 if (ShouldBeInThePartialSnapshotCache(obj)) { 61 if (ShouldBeInThePartialSnapshotCache(obj)) {
63 FlushSkip(skip); 62 FlushSkip(skip);
64 63
65 int cache_index = PartialSnapshotCacheIndex(obj); 64 int cache_index = PartialSnapshotCacheIndex(obj);
66 sink_->Put(kPartialSnapshotCache + how_to_code + where_to_point, 65 sink_.Put(kPartialSnapshotCache + how_to_code + where_to_point,
67 "PartialSnapshotCache"); 66 "PartialSnapshotCache");
68 sink_->PutInt(cache_index, "partial_snapshot_cache_index"); 67 sink_.PutInt(cache_index, "partial_snapshot_cache_index");
69 return; 68 return;
70 } 69 }
71 70
72 // Pointers from the partial snapshot to the objects in the startup snapshot 71 // Pointers from the partial snapshot to the objects in the startup snapshot
73 // should go through the root array or through the partial snapshot cache. 72 // should go through the root array or through the partial snapshot cache.
74 // If this is not the case you may have to add something to the root array. 73 // If this is not the case you may have to add something to the root array.
75 DCHECK(!startup_serializer_->reference_map()->Lookup(obj).is_valid()); 74 DCHECK(!startup_serializer_->reference_map()->Lookup(obj).is_valid());
76 // All the internalized strings that the partial snapshot needs should be 75 // All the internalized strings that the partial snapshot needs should be
77 // either in the root table or in the partial snapshot cache. 76 // either in the root table or in the partial snapshot cache.
78 DCHECK(!obj->IsInternalizedString()); 77 DCHECK(!obj->IsInternalizedString());
79 78
80 if (SerializeKnownObject(obj, how_to_code, where_to_point, skip)) return; 79 if (SerializeKnownObject(obj, how_to_code, where_to_point, skip)) return;
81 80
82 FlushSkip(skip); 81 FlushSkip(skip);
83 82
84 // Clear literal boilerplates. 83 // Clear literal boilerplates.
85 if (obj->IsJSFunction()) { 84 if (obj->IsJSFunction()) {
86 LiteralsArray* literals = JSFunction::cast(obj)->literals(); 85 LiteralsArray* literals = JSFunction::cast(obj)->literals();
87 for (int i = 0; i < literals->literals_count(); i++) { 86 for (int i = 0; i < literals->literals_count(); i++) {
88 literals->set_literal_undefined(i); 87 literals->set_literal_undefined(i);
89 } 88 }
90 } 89 }
91 90
92 // Object has not yet been serialized. Serialize it here. 91 // Object has not yet been serialized. Serialize it here.
93 ObjectSerializer serializer(this, obj, sink_, how_to_code, where_to_point); 92 ObjectSerializer serializer(this, obj, &sink_, how_to_code, where_to_point);
94 serializer.Serialize(); 93 serializer.Serialize();
95 } 94 }
96 95
97 int PartialSerializer::PartialSnapshotCacheIndex(HeapObject* heap_object) { 96 int PartialSerializer::PartialSnapshotCacheIndex(HeapObject* heap_object) {
98 int index = partial_cache_index_map_.LookupOrInsert( 97 int index = partial_cache_index_map_.LookupOrInsert(
99 heap_object, next_partial_cache_index_); 98 heap_object, next_partial_cache_index_);
100 if (index == PartialCacheIndexMap::kInvalidIndex) { 99 if (index == PartialCacheIndexMap::kInvalidIndex) {
101 // This object is not part of the partial snapshot cache yet. Add it to the 100 // This object is not part of the partial snapshot cache yet. Add it to the
102 // startup snapshot so we can refer to it via partial snapshot index from 101 // startup snapshot so we can refer to it via partial snapshot index from
103 // the partial snapshot. 102 // the partial snapshot.
(...skipping 10 matching lines...) Expand all
114 // would cause dupes. 113 // would cause dupes.
115 DCHECK(!o->IsScript()); 114 DCHECK(!o->IsScript());
116 return o->IsName() || o->IsSharedFunctionInfo() || o->IsHeapNumber() || 115 return o->IsName() || o->IsSharedFunctionInfo() || o->IsHeapNumber() ||
117 o->IsCode() || o->IsScopeInfo() || o->IsAccessorInfo() || 116 o->IsCode() || o->IsScopeInfo() || o->IsAccessorInfo() ||
118 o->map() == 117 o->map() ==
119 startup_serializer_->isolate()->heap()->fixed_cow_array_map(); 118 startup_serializer_->isolate()->heap()->fixed_cow_array_map();
120 } 119 }
121 120
122 } // namespace internal 121 } // namespace internal
123 } // namespace v8 122 } // namespace v8
OLDNEW
« no previous file with comments | « src/snapshot/partial-serializer.h ('k') | src/snapshot/serializer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698