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

Side by Side Diff: src/api.cc

Issue 2452333002: [serializer] introduce API to serialize internal fields (Closed)
Patch Set: Created 4 years, 1 month 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
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 #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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698