| OLD | NEW |
| 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 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 MegamorphicCacheTable::PrintSizes(vm_isolate_); | 263 MegamorphicCacheTable::PrintSizes(vm_isolate_); |
| 264 intptr_t size; | 264 intptr_t size; |
| 265 intptr_t capacity; | 265 intptr_t capacity; |
| 266 Symbols::GetStats(vm_isolate_, &size, &capacity); | 266 Symbols::GetStats(vm_isolate_, &size, &capacity); |
| 267 OS::Print("VM Isolate: Number of symbols : %" Pd "\n", size); | 267 OS::Print("VM Isolate: Number of symbols : %" Pd "\n", size); |
| 268 OS::Print("VM Isolate: Symbol table capacity : %" Pd "\n", capacity); | 268 OS::Print("VM Isolate: Symbol table capacity : %" Pd "\n", capacity); |
| 269 } | 269 } |
| 270 } else { | 270 } else { |
| 271 #if defined(DART_PRECOMPILED_RUNTIME) | 271 #if defined(DART_PRECOMPILED_RUNTIME) |
| 272 return strdup("Precompiled runtime requires a precompiled snapshot"); | 272 return strdup("Precompiled runtime requires a precompiled snapshot"); |
| 273 #elif !defined(DART_NO_SNAPSHOT) |
| 274 return strdup("Missing vm isolate snapshot"); |
| 273 #else | 275 #else |
| 274 snapshot_kind_ = Snapshot::kNone; | 276 snapshot_kind_ = Snapshot::kNone; |
| 275 StubCode::InitOnce(); | 277 StubCode::InitOnce(); |
| 276 Symbols::InitOnce(vm_isolate_); | 278 Symbols::InitOnce(vm_isolate_); |
| 277 #endif | 279 #endif |
| 278 } | 280 } |
| 279 // We need to initialize the constants here for the vm isolate thread due to | 281 // We need to initialize the constants here for the vm isolate thread due to |
| 280 // bootstrapping issues. | 282 // bootstrapping issues. |
| 281 T->InitVMConstants(); | 283 T->InitVMConstants(); |
| 282 Scanner::InitOnce(); | 284 Scanner::InitOnce(); |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 return error.raw(); | 517 return error.raw(); |
| 516 } | 518 } |
| 517 if (snapshot_buffer != NULL) { | 519 if (snapshot_buffer != NULL) { |
| 518 // Read the snapshot and setup the initial state. | 520 // Read the snapshot and setup the initial state. |
| 519 NOT_IN_PRODUCT(TimelineDurationScope tds(T, | 521 NOT_IN_PRODUCT(TimelineDurationScope tds(T, |
| 520 Timeline::GetIsolateStream(), "IsolateSnapshotReader")); | 522 Timeline::GetIsolateStream(), "IsolateSnapshotReader")); |
| 521 // TODO(turnidge): Remove once length is not part of the snapshot. | 523 // TODO(turnidge): Remove once length is not part of the snapshot. |
| 522 const Snapshot* snapshot = Snapshot::SetupFromBuffer(snapshot_buffer); | 524 const Snapshot* snapshot = Snapshot::SetupFromBuffer(snapshot_buffer); |
| 523 if (snapshot == NULL) { | 525 if (snapshot == NULL) { |
| 524 const String& message = String::Handle( | 526 const String& message = String::Handle( |
| 525 String::New("Invalid snapshot.")); | 527 String::New("Invalid snapshot")); |
| 526 return ApiError::New(message); | 528 return ApiError::New(message); |
| 527 } | 529 } |
| 528 ASSERT(Snapshot::IsFull(snapshot->kind())); | 530 ASSERT(Snapshot::IsFull(snapshot->kind())); |
| 529 ASSERT(snapshot->kind() == snapshot_kind_); | 531 ASSERT(snapshot->kind() == snapshot_kind_); |
| 530 if (FLAG_trace_isolates) { | 532 if (FLAG_trace_isolates) { |
| 531 OS::Print("Size of isolate snapshot = %" Pd "\n", snapshot->length()); | 533 OS::Print("Size of isolate snapshot = %" Pd "\n", snapshot->length()); |
| 532 } | 534 } |
| 533 IsolateSnapshotReader reader(snapshot->kind(), | 535 IsolateSnapshotReader reader(snapshot->kind(), |
| 534 snapshot->content(), | 536 snapshot->content(), |
| 535 snapshot->length(), | 537 snapshot->length(), |
| 536 Dart::instructions_snapshot_buffer(), | 538 Dart::instructions_snapshot_buffer(), |
| 537 Dart::data_snapshot_buffer(), | 539 Dart::data_snapshot_buffer(), |
| 538 T); | 540 T); |
| 539 const Error& error = Error::Handle(reader.ReadFullSnapshot()); | 541 const Error& error = Error::Handle(reader.ReadFullSnapshot()); |
| 540 if (!error.IsNull()) { | 542 if (!error.IsNull()) { |
| 541 return error.raw(); | 543 return error.raw(); |
| 542 } | 544 } |
| 543 NOT_IN_PRODUCT(if (tds.enabled()) { | 545 NOT_IN_PRODUCT(if (tds.enabled()) { |
| 544 tds.SetNumArguments(2); | 546 tds.SetNumArguments(2); |
| 545 tds.FormatArgument(0, "snapshotSize", "%" Pd, snapshot->length()); | 547 tds.FormatArgument(0, "snapshotSize", "%" Pd, snapshot->length()); |
| 546 tds.FormatArgument(1, "heapSize", "%" Pd64, | 548 tds.FormatArgument(1, "heapSize", "%" Pd64, |
| 547 I->heap()->UsedInWords(Heap::kOld) * kWordSize); | 549 I->heap()->UsedInWords(Heap::kOld) * kWordSize); |
| 548 }); | 550 }); |
| 549 if (FLAG_trace_isolates) { | 551 if (FLAG_trace_isolates) { |
| 550 I->heap()->PrintSizes(); | 552 I->heap()->PrintSizes(); |
| 551 MegamorphicCacheTable::PrintSizes(I); | 553 MegamorphicCacheTable::PrintSizes(I); |
| 552 } | 554 } |
| 553 } else { | 555 } else { |
| 554 ASSERT(snapshot_kind_ == Snapshot::kNone); | 556 if (snapshot_kind_ != Snapshot::kNone) { |
| 557 const String& message = String::Handle( |
| 558 String::New("Missing isolate snapshot")); |
| 559 return ApiError::New(message); |
| 560 } |
| 555 } | 561 } |
| 556 | 562 |
| 557 Object::VerifyBuiltinVtables(); | 563 Object::VerifyBuiltinVtables(); |
| 558 DEBUG_ONLY(I->heap()->Verify(kForbidMarked)); | 564 DEBUG_ONLY(I->heap()->Verify(kForbidMarked)); |
| 559 | 565 |
| 560 { | 566 { |
| 561 NOT_IN_PRODUCT(TimelineDurationScope tds(T, | 567 NOT_IN_PRODUCT(TimelineDurationScope tds(T, |
| 562 Timeline::GetIsolateStream(), "StubCode::Init")); | 568 Timeline::GetIsolateStream(), "StubCode::Init")); |
| 563 StubCode::Init(I); | 569 StubCode::Init(I); |
| 564 } | 570 } |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 720 return predefined_handles_->handles_.IsValidScopedHandle(address); | 726 return predefined_handles_->handles_.IsValidScopedHandle(address); |
| 721 } | 727 } |
| 722 | 728 |
| 723 | 729 |
| 724 bool Dart::IsReadOnlyApiHandle(Dart_Handle handle) { | 730 bool Dart::IsReadOnlyApiHandle(Dart_Handle handle) { |
| 725 ASSERT(predefined_handles_ != NULL); | 731 ASSERT(predefined_handles_ != NULL); |
| 726 return predefined_handles_->api_handles_.IsValidHandle(handle); | 732 return predefined_handles_->api_handles_.IsValidHandle(handle); |
| 727 } | 733 } |
| 728 | 734 |
| 729 } // namespace dart | 735 } // namespace dart |
| OLD | NEW |