| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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/isolate_reload.h" | 5 #include "vm/isolate_reload.h" |
| 6 | 6 |
| 7 #include "vm/become.h" | 7 #include "vm/become.h" |
| 8 #include "vm/bit_vector.h" | 8 #include "vm/bit_vector.h" |
| 9 #include "vm/code_generator.h" | 9 #include "vm/code_generator.h" |
| 10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 HashTables::New<UnorderedHashMap<LibraryMapTraits> >(4); | 456 HashTables::New<UnorderedHashMap<LibraryMapTraits> >(4); |
| 457 become_map_storage_ = | 457 become_map_storage_ = |
| 458 HashTables::New<UnorderedHashMap<BecomeMapTraits> >(4); | 458 HashTables::New<UnorderedHashMap<BecomeMapTraits> >(4); |
| 459 // Keep a separate array for enum mappings to avoid having to invoke | 459 // Keep a separate array for enum mappings to avoid having to invoke |
| 460 // hashCode on the instances. | 460 // hashCode on the instances. |
| 461 become_enum_mappings_ = GrowableObjectArray::New(Heap::kOld); | 461 become_enum_mappings_ = GrowableObjectArray::New(Heap::kOld); |
| 462 | 462 |
| 463 // Disable the background compiler while we are performing the reload. | 463 // Disable the background compiler while we are performing the reload. |
| 464 BackgroundCompiler::Disable(); | 464 BackgroundCompiler::Disable(); |
| 465 | 465 |
| 466 if (FLAG_write_protect_code) { | |
| 467 // Disable code page write protection while we are reloading. | |
| 468 I->heap()->WriteProtectCode(false); | |
| 469 } | |
| 470 | |
| 471 // Ensure all functions on the stack have unoptimized code. | 466 // Ensure all functions on the stack have unoptimized code. |
| 472 EnsuredUnoptimizedCodeForStack(); | 467 EnsuredUnoptimizedCodeForStack(); |
| 473 // Deoptimize all code that had optimizing decisions that are dependent on | 468 // Deoptimize all code that had optimizing decisions that are dependent on |
| 474 // assumptions from field guards or CHA or deferred library prefixes. | 469 // assumptions from field guards or CHA or deferred library prefixes. |
| 475 // TODO(johnmccutchan): Deoptimizing dependent code here (before the reload) | 470 // TODO(johnmccutchan): Deoptimizing dependent code here (before the reload) |
| 476 // is paranoid. This likely can be moved to the commit phase. | 471 // is paranoid. This likely can be moved to the commit phase. |
| 477 DeoptimizeDependentCode(); | 472 DeoptimizeDependentCode(); |
| 478 Checkpoint(); | 473 Checkpoint(); |
| 479 | 474 |
| 480 Object& result = Object::Handle(thread->zone()); | 475 Object& result = Object::Handle(thread->zone()); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 isolate()->set_last_reload_timestamp(reload_timestamp_); | 529 isolate()->set_last_reload_timestamp(reload_timestamp_); |
| 535 } else { | 530 } else { |
| 536 ReportReasonsForCancelling(); | 531 ReportReasonsForCancelling(); |
| 537 Rollback(); | 532 Rollback(); |
| 538 } | 533 } |
| 539 // ValidateReload mutates the direct subclass information and does | 534 // ValidateReload mutates the direct subclass information and does |
| 540 // not remove dead subclasses. Rebuild the direct subclass | 535 // not remove dead subclasses. Rebuild the direct subclass |
| 541 // information from scratch. | 536 // information from scratch. |
| 542 RebuildDirectSubclasses(); | 537 RebuildDirectSubclasses(); |
| 543 | 538 |
| 544 if (FLAG_write_protect_code) { | |
| 545 // Re-enable code page write protection. | |
| 546 I->heap()->WriteProtectCode(true); | |
| 547 } | |
| 548 | |
| 549 BackgroundCompiler::Enable(); | 539 BackgroundCompiler::Enable(); |
| 550 | 540 |
| 551 reload_aborted_ = HasReasonsForCancelling(); | 541 reload_aborted_ = HasReasonsForCancelling(); |
| 552 ReportOnJSON(js_); | 542 ReportOnJSON(js_); |
| 553 } | 543 } |
| 554 | 544 |
| 555 | 545 |
| 556 void IsolateReloadContext::ReportOnJSON(JSONStream* stream) { | 546 void IsolateReloadContext::ReportOnJSON(JSONStream* stream) { |
| 557 JSONObject jsobj(stream); | 547 JSONObject jsobj(stream); |
| 558 jsobj.AddProperty("type", "ReloadReport"); | 548 jsobj.AddProperty("type", "ReloadReport"); |
| (...skipping 1043 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1602 ASSERT(!super_cls.IsNull()); | 1592 ASSERT(!super_cls.IsNull()); |
| 1603 super_cls.AddDirectSubclass(cls); | 1593 super_cls.AddDirectSubclass(cls); |
| 1604 } | 1594 } |
| 1605 } | 1595 } |
| 1606 } | 1596 } |
| 1607 } | 1597 } |
| 1608 | 1598 |
| 1609 #endif // !PRODUCT | 1599 #endif // !PRODUCT |
| 1610 | 1600 |
| 1611 } // namespace dart | 1601 } // namespace dart |
| OLD | NEW |