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

Side by Side Diff: src/mksnapshot.cc

Issue 653033002: Break deserializer reservations into chunks that fit onto a page. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comments and rebase Created 6 years, 2 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/list.h ('k') | src/serialize.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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 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 <errno.h> 5 #include <errno.h>
6 #include <stdio.h> 6 #include <stdio.h>
7 #ifdef COMPRESS_STARTUP_DATA_BZ2 7 #ifdef COMPRESS_STARTUP_DATA_BZ2
8 #include <bzlib.h> 8 #include <bzlib.h>
9 #endif 9 #endif
10 #include <signal.h> 10 #include <signal.h>
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 i::List<i::byte> startup_blob; 84 i::List<i::byte> startup_blob;
85 i::ListSnapshotSink sink(&startup_blob); 85 i::ListSnapshotSink sink(&startup_blob);
86 86
87 int spaces[] = {i::NEW_SPACE, i::OLD_POINTER_SPACE, 87 int spaces[] = {i::NEW_SPACE, i::OLD_POINTER_SPACE,
88 i::OLD_DATA_SPACE, i::CODE_SPACE, 88 i::OLD_DATA_SPACE, i::CODE_SPACE,
89 i::MAP_SPACE, i::CELL_SPACE, 89 i::MAP_SPACE, i::CELL_SPACE,
90 i::PROPERTY_CELL_SPACE, i::LO_SPACE}; 90 i::PROPERTY_CELL_SPACE, i::LO_SPACE};
91 91
92 i::byte* snapshot_bytes = snapshot_data.begin(); 92 i::byte* snapshot_bytes = snapshot_data.begin();
93 sink.PutBlob(snapshot_bytes, snapshot_data.length(), "snapshot"); 93 sink.PutBlob(snapshot_bytes, snapshot_data.length(), "snapshot");
94 for (size_t i = 0; i < arraysize(spaces); ++i) 94 for (size_t i = 0; i < arraysize(spaces); ++i) {
95 sink.PutInt(serializer.CurrentAllocationAddress(spaces[i]), "spaces"); 95 i::Vector<const uint32_t> chunks =
96 serializer.FinalAllocationChunks(spaces[i]);
97 // For the start-up snapshot, none of the reservations has more than
98 // one chunk (reservation for each space fits onto a single page).
99 CHECK_EQ(1, chunks.length());
100 sink.PutInt(chunks[0], "spaces");
101 }
96 102
97 i::byte* context_bytes = context_snapshot_data.begin(); 103 i::byte* context_bytes = context_snapshot_data.begin();
98 sink.PutBlob(context_bytes, context_snapshot_data.length(), "context"); 104 sink.PutBlob(context_bytes, context_snapshot_data.length(), "context");
99 for (size_t i = 0; i < arraysize(spaces); ++i) 105 for (size_t i = 0; i < arraysize(spaces); ++i) {
100 sink.PutInt(context_serializer.CurrentAllocationAddress(spaces[i]), 106 i::Vector<const uint32_t> chunks =
101 "spaces"); 107 context_serializer.FinalAllocationChunks(spaces[i]);
108 // For the context snapshot, none of the reservations has more than
109 // one chunk (reservation for each space fits onto a single page).
110 CHECK_EQ(1, chunks.length());
111 sink.PutInt(chunks[0], "spaces");
112 }
102 113
103 size_t written = fwrite(startup_blob.begin(), 1, startup_blob.length(), 114 size_t written = fwrite(startup_blob.begin(), 1, startup_blob.length(),
104 startup_blob_file_); 115 startup_blob_file_);
105 if (written != (size_t)startup_blob.length()) { 116 if (written != (size_t)startup_blob.length()) {
106 i::PrintF("Writing snapshot file failed.. Aborting.\n"); 117 i::PrintF("Writing snapshot file failed.. Aborting.\n");
107 exit(1); 118 exit(1);
108 } 119 }
109 } 120 }
110 121
111 void WriteSnapshotFile(const i::List<i::byte>& snapshot_data, 122 void WriteSnapshotFile(const i::List<i::byte>& snapshot_data,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 WriteSizeVar(ser, prefix, "code", i::CODE_SPACE); 207 WriteSizeVar(ser, prefix, "code", i::CODE_SPACE);
197 WriteSizeVar(ser, prefix, "map", i::MAP_SPACE); 208 WriteSizeVar(ser, prefix, "map", i::MAP_SPACE);
198 WriteSizeVar(ser, prefix, "cell", i::CELL_SPACE); 209 WriteSizeVar(ser, prefix, "cell", i::CELL_SPACE);
199 WriteSizeVar(ser, prefix, "property_cell", i::PROPERTY_CELL_SPACE); 210 WriteSizeVar(ser, prefix, "property_cell", i::PROPERTY_CELL_SPACE);
200 WriteSizeVar(ser, prefix, "lo", i::LO_SPACE); 211 WriteSizeVar(ser, prefix, "lo", i::LO_SPACE);
201 fprintf(fp_, "\n"); 212 fprintf(fp_, "\n");
202 } 213 }
203 214
204 void WriteSizeVar(const i::Serializer& ser, const char* prefix, 215 void WriteSizeVar(const i::Serializer& ser, const char* prefix,
205 const char* name, int space) const { 216 const char* name, int space) const {
206 fprintf(fp_, "const int Snapshot::%s%s_space_used_ = %d;\n", 217 i::Vector<const uint32_t> chunks = ser.FinalAllocationChunks(space);
207 prefix, name, ser.CurrentAllocationAddress(space)); 218 // For the start-up snapshot, none of the reservations has more than
219 // one chunk (total reservation fits into a single page).
220 CHECK_EQ(1, chunks.length());
221 fprintf(fp_, "const int Snapshot::%s%s_space_used_ = %d;\n", prefix, name,
222 chunks[0]);
208 } 223 }
209 224
210 void WriteSnapshotData(const i::List<i::byte>* data) const { 225 void WriteSnapshotData(const i::List<i::byte>* data) const {
211 for (int i = 0; i < data->length(); i++) { 226 for (int i = 0; i < data->length(); i++) {
212 if ((i & 0x1f) == 0x1f) 227 if ((i & 0x1f) == 0x1f)
213 fprintf(fp_, "\n"); 228 fprintf(fp_, "\n");
214 if (i > 0) 229 if (i > 0)
215 fprintf(fp_, ","); 230 fprintf(fp_, ",");
216 fprintf(fp_, "%u", static_cast<unsigned char>(data->at(i))); 231 fprintf(fp_, "%u", static_cast<unsigned char>(data->at(i)));
217 } 232 }
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 i::ListSnapshotSink snapshot_sink(&snapshot_data); 424 i::ListSnapshotSink snapshot_sink(&snapshot_data);
410 i::StartupSerializer ser(internal_isolate, &snapshot_sink); 425 i::StartupSerializer ser(internal_isolate, &snapshot_sink);
411 ser.SerializeStrongReferences(); 426 ser.SerializeStrongReferences();
412 427
413 i::List<i::byte> context_data; 428 i::List<i::byte> context_data;
414 i::ListSnapshotSink contex_sink(&context_data); 429 i::ListSnapshotSink contex_sink(&context_data);
415 i::PartialSerializer context_ser(internal_isolate, &ser, &contex_sink); 430 i::PartialSerializer context_ser(internal_isolate, &ser, &contex_sink);
416 context_ser.Serialize(&raw_context); 431 context_ser.Serialize(&raw_context);
417 ser.SerializeWeakReferences(); 432 ser.SerializeWeakReferences();
418 433
434 context_ser.FinalizeAllocation();
435 ser.FinalizeAllocation();
436
419 { 437 {
420 SnapshotWriter writer(argv[1]); 438 SnapshotWriter writer(argv[1]);
421 if (i::FLAG_raw_file && i::FLAG_raw_context_file) 439 if (i::FLAG_raw_file && i::FLAG_raw_context_file)
422 writer.SetRawFiles(i::FLAG_raw_file, i::FLAG_raw_context_file); 440 writer.SetRawFiles(i::FLAG_raw_file, i::FLAG_raw_context_file);
423 if (i::FLAG_startup_blob) 441 if (i::FLAG_startup_blob)
424 writer.SetStartupBlobFile(i::FLAG_startup_blob); 442 writer.SetStartupBlobFile(i::FLAG_startup_blob);
425 #ifdef COMPRESS_STARTUP_DATA_BZ2 443 #ifdef COMPRESS_STARTUP_DATA_BZ2
426 BZip2Compressor bzip2; 444 BZip2Compressor bzip2;
427 writer.SetCompressor(&bzip2); 445 writer.SetCompressor(&bzip2);
428 #endif 446 #endif
429 writer.WriteSnapshot(snapshot_data, ser, context_data, context_ser); 447 writer.WriteSnapshot(snapshot_data, ser, context_data, context_ser);
430 } 448 }
431 } 449 }
432 450
433 isolate->Dispose(); 451 isolate->Dispose();
434 V8::Dispose(); 452 V8::Dispose();
435 V8::ShutdownPlatform(); 453 V8::ShutdownPlatform();
436 delete platform; 454 delete platform;
437 return 0; 455 return 0;
438 } 456 }
OLDNEW
« no previous file with comments | « src/list.h ('k') | src/serialize.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698