OLD | NEW |
1 // Copyright 2007-2010 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 } | 188 } |
189 virtual int Position() { | 189 virtual int Position() { |
190 return ftell(fp_); | 190 return ftell(fp_); |
191 } | 191 } |
192 void WriteSpaceUsed( | 192 void WriteSpaceUsed( |
193 int new_space_used, | 193 int new_space_used, |
194 int pointer_space_used, | 194 int pointer_space_used, |
195 int data_space_used, | 195 int data_space_used, |
196 int code_space_used, | 196 int code_space_used, |
197 int map_space_used, | 197 int map_space_used, |
198 int cell_space_used); | 198 int cell_space_used, |
| 199 int property_cell_space_used); |
199 | 200 |
200 private: | 201 private: |
201 FILE* fp_; | 202 FILE* fp_; |
202 const char* file_name_; | 203 const char* file_name_; |
203 }; | 204 }; |
204 | 205 |
205 | 206 |
206 void FileByteSink::WriteSpaceUsed( | 207 void FileByteSink::WriteSpaceUsed( |
207 int new_space_used, | 208 int new_space_used, |
208 int pointer_space_used, | 209 int pointer_space_used, |
209 int data_space_used, | 210 int data_space_used, |
210 int code_space_used, | 211 int code_space_used, |
211 int map_space_used, | 212 int map_space_used, |
212 int cell_space_used) { | 213 int cell_space_used, |
| 214 int property_cell_space_used) { |
213 int file_name_length = StrLength(file_name_) + 10; | 215 int file_name_length = StrLength(file_name_) + 10; |
214 Vector<char> name = Vector<char>::New(file_name_length + 1); | 216 Vector<char> name = Vector<char>::New(file_name_length + 1); |
215 OS::SNPrintF(name, "%s.size", file_name_); | 217 OS::SNPrintF(name, "%s.size", file_name_); |
216 FILE* fp = OS::FOpen(name.start(), "w"); | 218 FILE* fp = OS::FOpen(name.start(), "w"); |
217 name.Dispose(); | 219 name.Dispose(); |
218 fprintf(fp, "new %d\n", new_space_used); | 220 fprintf(fp, "new %d\n", new_space_used); |
219 fprintf(fp, "pointer %d\n", pointer_space_used); | 221 fprintf(fp, "pointer %d\n", pointer_space_used); |
220 fprintf(fp, "data %d\n", data_space_used); | 222 fprintf(fp, "data %d\n", data_space_used); |
221 fprintf(fp, "code %d\n", code_space_used); | 223 fprintf(fp, "code %d\n", code_space_used); |
222 fprintf(fp, "map %d\n", map_space_used); | 224 fprintf(fp, "map %d\n", map_space_used); |
223 fprintf(fp, "cell %d\n", cell_space_used); | 225 fprintf(fp, "cell %d\n", cell_space_used); |
| 226 fprintf(fp, "property cell %d\n", property_cell_space_used); |
224 fclose(fp); | 227 fclose(fp); |
225 } | 228 } |
226 | 229 |
227 | 230 |
228 static bool WriteToFile(const char* snapshot_file) { | 231 static bool WriteToFile(const char* snapshot_file) { |
229 FileByteSink file(snapshot_file); | 232 FileByteSink file(snapshot_file); |
230 StartupSerializer ser(&file); | 233 StartupSerializer ser(&file); |
231 ser.Serialize(); | 234 ser.Serialize(); |
232 | 235 |
233 file.WriteSpaceUsed( | 236 file.WriteSpaceUsed( |
234 ser.CurrentAllocationAddress(NEW_SPACE), | 237 ser.CurrentAllocationAddress(NEW_SPACE), |
235 ser.CurrentAllocationAddress(OLD_POINTER_SPACE), | 238 ser.CurrentAllocationAddress(OLD_POINTER_SPACE), |
236 ser.CurrentAllocationAddress(OLD_DATA_SPACE), | 239 ser.CurrentAllocationAddress(OLD_DATA_SPACE), |
237 ser.CurrentAllocationAddress(CODE_SPACE), | 240 ser.CurrentAllocationAddress(CODE_SPACE), |
238 ser.CurrentAllocationAddress(MAP_SPACE), | 241 ser.CurrentAllocationAddress(MAP_SPACE), |
239 ser.CurrentAllocationAddress(CELL_SPACE)); | 242 ser.CurrentAllocationAddress(CELL_SPACE), |
| 243 ser.CurrentAllocationAddress(PROPERTY_CELL_SPACE)); |
240 | 244 |
241 return true; | 245 return true; |
242 } | 246 } |
243 | 247 |
244 | 248 |
245 static void Serialize() { | 249 static void Serialize() { |
246 // We have to create one context. One reason for this is so that the builtins | 250 // We have to create one context. One reason for this is so that the builtins |
247 // can be loaded from v8natives.js and their addresses can be processed. This | 251 // can be loaded from v8natives.js and their addresses can be processed. This |
248 // will clear the pending fixups array, which would otherwise contain GC roots | 252 // will clear the pending fixups array, which would otherwise contain GC roots |
249 // that would confuse the serialization/deserialization process. | 253 // that would confuse the serialization/deserialization process. |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 PartialSerializer p_ser(&startup_serializer, &partial_sink); | 422 PartialSerializer p_ser(&startup_serializer, &partial_sink); |
419 p_ser.Serialize(&raw_foo); | 423 p_ser.Serialize(&raw_foo); |
420 startup_serializer.SerializeWeakReferences(); | 424 startup_serializer.SerializeWeakReferences(); |
421 | 425 |
422 partial_sink.WriteSpaceUsed( | 426 partial_sink.WriteSpaceUsed( |
423 p_ser.CurrentAllocationAddress(NEW_SPACE), | 427 p_ser.CurrentAllocationAddress(NEW_SPACE), |
424 p_ser.CurrentAllocationAddress(OLD_POINTER_SPACE), | 428 p_ser.CurrentAllocationAddress(OLD_POINTER_SPACE), |
425 p_ser.CurrentAllocationAddress(OLD_DATA_SPACE), | 429 p_ser.CurrentAllocationAddress(OLD_DATA_SPACE), |
426 p_ser.CurrentAllocationAddress(CODE_SPACE), | 430 p_ser.CurrentAllocationAddress(CODE_SPACE), |
427 p_ser.CurrentAllocationAddress(MAP_SPACE), | 431 p_ser.CurrentAllocationAddress(MAP_SPACE), |
428 p_ser.CurrentAllocationAddress(CELL_SPACE)); | 432 p_ser.CurrentAllocationAddress(CELL_SPACE), |
| 433 p_ser.CurrentAllocationAddress(PROPERTY_CELL_SPACE)); |
429 | 434 |
430 startup_sink.WriteSpaceUsed( | 435 startup_sink.WriteSpaceUsed( |
431 startup_serializer.CurrentAllocationAddress(NEW_SPACE), | 436 startup_serializer.CurrentAllocationAddress(NEW_SPACE), |
432 startup_serializer.CurrentAllocationAddress(OLD_POINTER_SPACE), | 437 startup_serializer.CurrentAllocationAddress(OLD_POINTER_SPACE), |
433 startup_serializer.CurrentAllocationAddress(OLD_DATA_SPACE), | 438 startup_serializer.CurrentAllocationAddress(OLD_DATA_SPACE), |
434 startup_serializer.CurrentAllocationAddress(CODE_SPACE), | 439 startup_serializer.CurrentAllocationAddress(CODE_SPACE), |
435 startup_serializer.CurrentAllocationAddress(MAP_SPACE), | 440 startup_serializer.CurrentAllocationAddress(MAP_SPACE), |
436 startup_serializer.CurrentAllocationAddress(CELL_SPACE)); | 441 startup_serializer.CurrentAllocationAddress(CELL_SPACE), |
| 442 startup_serializer.CurrentAllocationAddress(PROPERTY_CELL_SPACE)); |
437 startup_name.Dispose(); | 443 startup_name.Dispose(); |
438 } | 444 } |
439 } | 445 } |
440 | 446 |
441 | 447 |
442 static void ReserveSpaceForSnapshot(Deserializer* deserializer, | 448 static void ReserveSpaceForSnapshot(Deserializer* deserializer, |
443 const char* file_name) { | 449 const char* file_name) { |
444 int file_name_length = StrLength(file_name) + 10; | 450 int file_name_length = StrLength(file_name) + 10; |
445 Vector<char> name = Vector<char>::New(file_name_length + 1); | 451 Vector<char> name = Vector<char>::New(file_name_length + 1); |
446 OS::SNPrintF(name, "%s.size", file_name); | 452 OS::SNPrintF(name, "%s.size", file_name); |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
559 PartialSerializer p_ser(&startup_serializer, &partial_sink); | 565 PartialSerializer p_ser(&startup_serializer, &partial_sink); |
560 p_ser.Serialize(&raw_context); | 566 p_ser.Serialize(&raw_context); |
561 startup_serializer.SerializeWeakReferences(); | 567 startup_serializer.SerializeWeakReferences(); |
562 | 568 |
563 partial_sink.WriteSpaceUsed( | 569 partial_sink.WriteSpaceUsed( |
564 p_ser.CurrentAllocationAddress(NEW_SPACE), | 570 p_ser.CurrentAllocationAddress(NEW_SPACE), |
565 p_ser.CurrentAllocationAddress(OLD_POINTER_SPACE), | 571 p_ser.CurrentAllocationAddress(OLD_POINTER_SPACE), |
566 p_ser.CurrentAllocationAddress(OLD_DATA_SPACE), | 572 p_ser.CurrentAllocationAddress(OLD_DATA_SPACE), |
567 p_ser.CurrentAllocationAddress(CODE_SPACE), | 573 p_ser.CurrentAllocationAddress(CODE_SPACE), |
568 p_ser.CurrentAllocationAddress(MAP_SPACE), | 574 p_ser.CurrentAllocationAddress(MAP_SPACE), |
569 p_ser.CurrentAllocationAddress(CELL_SPACE)); | 575 p_ser.CurrentAllocationAddress(CELL_SPACE), |
| 576 p_ser.CurrentAllocationAddress(PROPERTY_CELL_SPACE)); |
570 | 577 |
571 startup_sink.WriteSpaceUsed( | 578 startup_sink.WriteSpaceUsed( |
572 startup_serializer.CurrentAllocationAddress(NEW_SPACE), | 579 startup_serializer.CurrentAllocationAddress(NEW_SPACE), |
573 startup_serializer.CurrentAllocationAddress(OLD_POINTER_SPACE), | 580 startup_serializer.CurrentAllocationAddress(OLD_POINTER_SPACE), |
574 startup_serializer.CurrentAllocationAddress(OLD_DATA_SPACE), | 581 startup_serializer.CurrentAllocationAddress(OLD_DATA_SPACE), |
575 startup_serializer.CurrentAllocationAddress(CODE_SPACE), | 582 startup_serializer.CurrentAllocationAddress(CODE_SPACE), |
576 startup_serializer.CurrentAllocationAddress(MAP_SPACE), | 583 startup_serializer.CurrentAllocationAddress(MAP_SPACE), |
577 startup_serializer.CurrentAllocationAddress(CELL_SPACE)); | 584 startup_serializer.CurrentAllocationAddress(CELL_SPACE), |
| 585 startup_serializer.CurrentAllocationAddress(PROPERTY_CELL_SPACE)); |
578 startup_name.Dispose(); | 586 startup_name.Dispose(); |
579 } | 587 } |
580 } | 588 } |
581 | 589 |
582 | 590 |
583 DEPENDENT_TEST(ContextDeserialization, ContextSerialization) { | 591 DEPENDENT_TEST(ContextDeserialization, ContextSerialization) { |
584 if (!Snapshot::HaveASnapshotToStartFrom()) { | 592 if (!Snapshot::HaveASnapshotToStartFrom()) { |
585 int file_name_length = StrLength(FLAG_testing_serialization_file) + 10; | 593 int file_name_length = StrLength(FLAG_testing_serialization_file) + 10; |
586 Vector<char> startup_name = Vector<char>::New(file_name_length + 1); | 594 Vector<char> startup_name = Vector<char>::New(file_name_length + 1); |
587 OS::SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file); | 595 OS::SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
626 TEST(TestThatAlwaysFails) { | 634 TEST(TestThatAlwaysFails) { |
627 bool ArtificialFailure = false; | 635 bool ArtificialFailure = false; |
628 CHECK(ArtificialFailure); | 636 CHECK(ArtificialFailure); |
629 } | 637 } |
630 | 638 |
631 | 639 |
632 DEPENDENT_TEST(DependentTestThatAlwaysFails, TestThatAlwaysSucceeds) { | 640 DEPENDENT_TEST(DependentTestThatAlwaysFails, TestThatAlwaysSucceeds) { |
633 bool ArtificialFailure2 = false; | 641 bool ArtificialFailure2 = false; |
634 CHECK(ArtificialFailure2); | 642 CHECK(ArtificialFailure2); |
635 } | 643 } |
OLD | NEW |