OLD | NEW |
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 #include "src/api.h" | 5 #include "src/api.h" |
6 | 6 |
7 #include <string.h> // For memcpy, strlen. | 7 #include <string.h> // For memcpy, strlen. |
8 #ifdef V8_USE_ADDRESS_SANITIZER | 8 #ifdef V8_USE_ADDRESS_SANITIZER |
9 #include <sanitizer/asan_interface.h> | 9 #include <sanitizer/asan_interface.h> |
10 #endif // V8_USE_ADDRESS_SANITIZER | 10 #endif // V8_USE_ADDRESS_SANITIZER |
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); | 516 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); |
517 DCHECK(!data->created_); | 517 DCHECK(!data->created_); |
518 DCHECK_EQ(reinterpret_cast<i::Isolate*>(data->isolate_), | 518 DCHECK_EQ(reinterpret_cast<i::Isolate*>(data->isolate_), |
519 Utils::OpenHandle(*template_obj)->GetIsolate()); | 519 Utils::OpenHandle(*template_obj)->GetIsolate()); |
520 size_t index = static_cast<int>(data->templates_.Size()); | 520 size_t index = static_cast<int>(data->templates_.Size()); |
521 data->templates_.Append(template_obj); | 521 data->templates_.Append(template_obj); |
522 return index; | 522 return index; |
523 } | 523 } |
524 | 524 |
525 StartupData SnapshotCreator::CreateBlob( | 525 StartupData SnapshotCreator::CreateBlob( |
526 SnapshotCreator::FunctionCodeHandling function_code_handling) { | 526 SnapshotCreator::FunctionCodeHandling function_code_handling, |
| 527 SerializeInternalFieldsCallback callback) { |
527 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); | 528 SnapshotCreatorData* data = SnapshotCreatorData::cast(data_); |
528 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(data->isolate_); | 529 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(data->isolate_); |
529 DCHECK(!data->created_); | 530 DCHECK(!data->created_); |
530 | 531 |
531 { | 532 { |
532 int num_templates = static_cast<int>(data->templates_.Size()); | 533 int num_templates = static_cast<int>(data->templates_.Size()); |
533 i::HandleScope scope(isolate); | 534 i::HandleScope scope(isolate); |
534 i::Handle<i::FixedArray> templates = | 535 i::Handle<i::FixedArray> templates = |
535 isolate->factory()->NewFixedArray(num_templates, i::TENURED); | 536 isolate->factory()->NewFixedArray(num_templates, i::TENURED); |
536 for (int i = 0; i < num_templates; i++) { | 537 for (int i = 0; i < num_templates; i++) { |
(...skipping 20 matching lines...) Expand all Loading... |
557 contexts.Add(*context); | 558 contexts.Add(*context); |
558 } | 559 } |
559 data->contexts_.Clear(); | 560 data->contexts_.Clear(); |
560 | 561 |
561 i::StartupSerializer startup_serializer(isolate, function_code_handling); | 562 i::StartupSerializer startup_serializer(isolate, function_code_handling); |
562 startup_serializer.SerializeStrongReferences(); | 563 startup_serializer.SerializeStrongReferences(); |
563 | 564 |
564 // Serialize each context with a new partial serializer. | 565 // Serialize each context with a new partial serializer. |
565 i::List<i::SnapshotData*> context_snapshots(num_contexts); | 566 i::List<i::SnapshotData*> context_snapshots(num_contexts); |
566 for (int i = 0; i < num_contexts; i++) { | 567 for (int i = 0; i < num_contexts; i++) { |
567 i::PartialSerializer partial_serializer(isolate, &startup_serializer); | 568 i::PartialSerializer partial_serializer(isolate, &startup_serializer, |
| 569 callback); |
568 partial_serializer.Serialize(&contexts[i]); | 570 partial_serializer.Serialize(&contexts[i]); |
569 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); | 571 context_snapshots.Add(new i::SnapshotData(&partial_serializer)); |
570 } | 572 } |
571 | 573 |
572 startup_serializer.SerializeWeakReferencesAndDeferred(); | 574 startup_serializer.SerializeWeakReferencesAndDeferred(); |
573 i::SnapshotData startup_snapshot(&startup_serializer); | 575 i::SnapshotData startup_snapshot(&startup_serializer); |
574 StartupData result = | 576 StartupData result = |
575 i::Snapshot::CreateSnapshotBlob(&startup_snapshot, &context_snapshots); | 577 i::Snapshot::CreateSnapshotBlob(&startup_snapshot, &context_snapshots); |
576 | 578 |
577 // Delete heap-allocated context snapshot instances. | 579 // Delete heap-allocated context snapshot instances. |
(...skipping 7312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7890 if (params.create_histogram_callback) { | 7892 if (params.create_histogram_callback) { |
7891 v8_isolate->SetCreateHistogramFunction(params.create_histogram_callback); | 7893 v8_isolate->SetCreateHistogramFunction(params.create_histogram_callback); |
7892 } | 7894 } |
7893 | 7895 |
7894 if (params.add_histogram_sample_callback) { | 7896 if (params.add_histogram_sample_callback) { |
7895 v8_isolate->SetAddHistogramSampleFunction( | 7897 v8_isolate->SetAddHistogramSampleFunction( |
7896 params.add_histogram_sample_callback); | 7898 params.add_histogram_sample_callback); |
7897 } | 7899 } |
7898 | 7900 |
7899 isolate->set_api_external_references(params.external_references); | 7901 isolate->set_api_external_references(params.external_references); |
| 7902 isolate->set_deserialize_internal_fields_callback( |
| 7903 params.deserialize_internal_fields_callback); |
7900 SetResourceConstraints(isolate, params.constraints); | 7904 SetResourceConstraints(isolate, params.constraints); |
7901 // TODO(jochen): Once we got rid of Isolate::Current(), we can remove this. | 7905 // TODO(jochen): Once we got rid of Isolate::Current(), we can remove this. |
7902 Isolate::Scope isolate_scope(v8_isolate); | 7906 Isolate::Scope isolate_scope(v8_isolate); |
7903 if (params.entry_hook || !i::Snapshot::Initialize(isolate)) { | 7907 if (params.entry_hook || !i::Snapshot::Initialize(isolate)) { |
7904 isolate->Init(NULL); | 7908 isolate->Init(NULL); |
7905 } | 7909 } |
7906 return v8_isolate; | 7910 return v8_isolate; |
7907 } | 7911 } |
7908 | 7912 |
7909 | 7913 |
(...skipping 1590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9500 Address callback_address = | 9504 Address callback_address = |
9501 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 9505 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |
9502 VMState<EXTERNAL> state(isolate); | 9506 VMState<EXTERNAL> state(isolate); |
9503 ExternalCallbackScope call_scope(isolate, callback_address); | 9507 ExternalCallbackScope call_scope(isolate, callback_address); |
9504 callback(info); | 9508 callback(info); |
9505 } | 9509 } |
9506 | 9510 |
9507 | 9511 |
9508 } // namespace internal | 9512 } // namespace internal |
9509 } // namespace v8 | 9513 } // namespace v8 |
OLD | NEW |