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

Side by Side Diff: runtime/vm/dart.cc

Issue 2583673002: When creating a JIT app snapshot, don't recreate the VM isolate snapshot. (Closed)
Patch Set: Created 4 years 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 (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/dart.h" 5 #include "vm/dart.h"
6 6
7 #include "vm/become.h" 7 #include "vm/become.h"
8 #include "vm/clustered_snapshot.h" 8 #include "vm/clustered_snapshot.h"
9 #include "vm/code_observers.h" 9 #include "vm/code_observers.h"
10 #include "vm/cpu.h" 10 #include "vm/cpu.h"
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 #else 217 #else
218 return strdup("JIT runtime cannot run a precompiled snapshot"); 218 return strdup("JIT runtime cannot run a precompiled snapshot");
219 #endif 219 #endif
220 } 220 }
221 if (instructions_snapshot == NULL) { 221 if (instructions_snapshot == NULL) {
222 return strdup("Missing instructions snapshot"); 222 return strdup("Missing instructions snapshot");
223 } 223 }
224 if (data_snapshot == NULL) { 224 if (data_snapshot == NULL) {
225 return strdup("Missing rodata snapshot"); 225 return strdup("Missing rodata snapshot");
226 } 226 }
227 vm_isolate_->SetupInstructionsSnapshotPage(instructions_snapshot);
228 vm_isolate_->SetupDataSnapshotPage(data_snapshot);
229 } else if (Snapshot::IsFull(snapshot_kind_)) { 227 } else if (Snapshot::IsFull(snapshot_kind_)) {
230 #if defined(DART_PRECOMPILED_RUNTIME) 228 #if defined(DART_PRECOMPILED_RUNTIME)
231 return strdup("Precompiled runtime requires a precompiled snapshot"); 229 return strdup("Precompiled runtime requires a precompiled snapshot");
232 #else 230 #else
233 if (instructions_snapshot != NULL) {
234 return strdup("Unexpected instructions snapshot");
235 }
236 if (data_snapshot != NULL) {
237 return strdup("Unexpected rodata snapshot");
238 }
239 StubCode::InitOnce(); 231 StubCode::InitOnce();
240 #endif 232 #endif
241 } else { 233 } else {
242 return strdup("Invalid vm isolate snapshot seen"); 234 return strdup("Invalid vm isolate snapshot seen");
243 } 235 }
236 if (instructions_snapshot != NULL) {
237 vm_isolate_->SetupInstructionsSnapshotPage(instructions_snapshot);
238 }
239 if (instructions_snapshot != NULL) {
240 vm_isolate_->SetupDataSnapshotPage(data_snapshot);
241 }
244 VmIsolateSnapshotReader reader(snapshot->kind(), snapshot->content(), 242 VmIsolateSnapshotReader reader(snapshot->kind(), snapshot->content(),
245 snapshot->length(), instructions_snapshot, 243 snapshot->length(), instructions_snapshot,
246 data_snapshot, T); 244 data_snapshot, T);
247 const Error& error = Error::Handle(reader.ReadVmIsolateSnapshot()); 245 const Error& error = Error::Handle(reader.ReadVmIsolateSnapshot());
248 if (!error.IsNull()) { 246 if (!error.IsNull()) {
249 // Must copy before leaving the zone. 247 // Must copy before leaving the zone.
250 return strdup(error.ToErrorCString()); 248 return strdup(error.ToErrorCString());
251 } 249 }
252 #if !defined(PRODUCT) 250 #if !defined(PRODUCT)
253 if (tds.enabled()) { 251 if (tds.enabled()) {
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 if ((snapshot_buffer != NULL) && kernel_program == NULL) { 522 if ((snapshot_buffer != NULL) && kernel_program == NULL) {
525 // Read the snapshot and setup the initial state. 523 // Read the snapshot and setup the initial state.
526 NOT_IN_PRODUCT(TimelineDurationScope tds(T, Timeline::GetIsolateStream(), 524 NOT_IN_PRODUCT(TimelineDurationScope tds(T, Timeline::GetIsolateStream(),
527 "IsolateSnapshotReader")); 525 "IsolateSnapshotReader"));
528 // TODO(turnidge): Remove once length is not part of the snapshot. 526 // TODO(turnidge): Remove once length is not part of the snapshot.
529 const Snapshot* snapshot = Snapshot::SetupFromBuffer(snapshot_buffer); 527 const Snapshot* snapshot = Snapshot::SetupFromBuffer(snapshot_buffer);
530 if (snapshot == NULL) { 528 if (snapshot == NULL) {
531 const String& message = String::Handle(String::New("Invalid snapshot")); 529 const String& message = String::Handle(String::New("Invalid snapshot"));
532 return ApiError::New(message); 530 return ApiError::New(message);
533 } 531 }
534 if (snapshot->kind() != snapshot_kind_) { 532 if (snapshot->kind() != snapshot_kind_ &&
533 !((snapshot->kind() == Snapshot::kAppJIT) &&
534 (snapshot_kind_ == Snapshot::kCore))) {
535 const String& message = String::Handle( 535 const String& message = String::Handle(
536 String::NewFormatted("Invalid snapshot kind: got '%s', expected '%s'", 536 String::NewFormatted("Invalid snapshot kind: got '%s', expected '%s'",
537 Snapshot::KindToCString(snapshot->kind()), 537 Snapshot::KindToCString(snapshot->kind()),
538 Snapshot::KindToCString(snapshot_kind_))); 538 Snapshot::KindToCString(snapshot_kind_)));
539 return ApiError::New(message); 539 return ApiError::New(message);
540 } 540 }
541 ASSERT(Snapshot::IsFull(snapshot->kind())); 541 ASSERT(Snapshot::IsFull(snapshot->kind()));
542 if (FLAG_trace_isolates) { 542 if (FLAG_trace_isolates) {
543 OS::Print("Size of isolate snapshot = %" Pd "\n", snapshot->length()); 543 OS::Print("Size of isolate snapshot = %" Pd "\n", snapshot->length());
544 } 544 }
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 return predefined_handles_->handles_.IsValidScopedHandle(address); 737 return predefined_handles_->handles_.IsValidScopedHandle(address);
738 } 738 }
739 739
740 740
741 bool Dart::IsReadOnlyApiHandle(Dart_Handle handle) { 741 bool Dart::IsReadOnlyApiHandle(Dart_Handle handle) {
742 ASSERT(predefined_handles_ != NULL); 742 ASSERT(predefined_handles_ != NULL);
743 return predefined_handles_->api_handles_.IsValidHandle(handle); 743 return predefined_handles_->api_handles_.IsValidHandle(handle);
744 } 744 }
745 745
746 } // namespace dart 746 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698