| 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 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 // Grab root library before calling CheckpointBeforeReload. | 435 // Grab root library before calling CheckpointBeforeReload. |
| 436 const Library& root_lib = Library::Handle(object_store()->root_library()); | 436 const Library& root_lib = Library::Handle(object_store()->root_library()); |
| 437 ASSERT(!root_lib.IsNull()); | 437 ASSERT(!root_lib.IsNull()); |
| 438 const String& root_lib_url = String::Handle(root_lib.url()); | 438 const String& root_lib_url = String::Handle(root_lib.url()); |
| 439 | 439 |
| 440 // Check to see which libraries have been modified. | 440 // Check to see which libraries have been modified. |
| 441 modified_libs_ = FindModifiedLibraries(force_reload); | 441 modified_libs_ = FindModifiedLibraries(force_reload); |
| 442 if (!modified_libs_->Contains(root_lib.index())) { | 442 if (!modified_libs_->Contains(root_lib.index())) { |
| 443 ASSERT(modified_libs_->IsEmpty()); | 443 ASSERT(modified_libs_->IsEmpty()); |
| 444 reload_skipped_ = true; | 444 reload_skipped_ = true; |
| 445 ReportOnJSON(js_); |
| 445 TIR_Print("---- SKIPPING RELOAD (No libraries were modified)\n"); | 446 TIR_Print("---- SKIPPING RELOAD (No libraries were modified)\n"); |
| 446 return; | 447 return; |
| 447 } | 448 } |
| 448 | 449 |
| 449 TIR_Print("---- STARTING RELOAD\n"); | 450 TIR_Print("---- STARTING RELOAD\n"); |
| 450 | 451 |
| 451 // Preallocate storage for maps. | 452 // Preallocate storage for maps. |
| 452 old_classes_set_storage_ = | 453 old_classes_set_storage_ = |
| 453 HashTables::New<UnorderedHashSet<ClassMapTraits> >(4); | 454 HashTables::New<UnorderedHashSet<ClassMapTraits> >(4); |
| 454 class_map_storage_ = | 455 class_map_storage_ = |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 589 } | 590 } |
| 590 | 591 |
| 591 | 592 |
| 592 void IsolateReloadContext::CommonFinalizeTail() { | 593 void IsolateReloadContext::CommonFinalizeTail() { |
| 593 ReportOnJSON(js_); | 594 ReportOnJSON(js_); |
| 594 reload_finalized_ = true; | 595 reload_finalized_ = true; |
| 595 } | 596 } |
| 596 | 597 |
| 597 | 598 |
| 598 void IsolateReloadContext::ReportOnJSON(JSONStream* stream) { | 599 void IsolateReloadContext::ReportOnJSON(JSONStream* stream) { |
| 599 // Clear the buffer. | |
| 600 stream->buffer()->Clear(); | |
| 601 JSONObject jsobj(stream); | 600 JSONObject jsobj(stream); |
| 602 jsobj.AddProperty("type", "ReloadReport"); | 601 jsobj.AddProperty("type", "ReloadReport"); |
| 603 jsobj.AddProperty("success", !HasReasonsForCancelling()); | 602 jsobj.AddProperty("success", reload_skipped_ || !HasReasonsForCancelling()); |
| 604 { | 603 { |
| 605 JSONObject details(&jsobj, "details"); | 604 JSONObject details(&jsobj, "details"); |
| 606 if (HasReasonsForCancelling()) { | 605 if (reload_skipped_) { |
| 606 // Reload was skipped. |
| 607 const GrowableObjectArray& libs = |
| 608 GrowableObjectArray::Handle(object_store()->libraries()); |
| 609 const intptr_t final_library_count = libs.Length(); |
| 610 details.AddProperty("savedLibraryCount", final_library_count); |
| 611 details.AddProperty("loadedLibraryCount", static_cast<intptr_t>(0)); |
| 612 details.AddProperty("finalLibraryCount", final_library_count); |
| 613 } else if (HasReasonsForCancelling()) { |
| 607 // Reload was rejected. | 614 // Reload was rejected. |
| 608 JSONArray array(&jsobj, "notices"); | 615 JSONArray array(&jsobj, "notices"); |
| 609 for (intptr_t i = 0; i < reasons_to_cancel_reload_.length(); i++) { | 616 for (intptr_t i = 0; i < reasons_to_cancel_reload_.length(); i++) { |
| 610 ReasonForCancelling* reason = reasons_to_cancel_reload_.At(i); | 617 ReasonForCancelling* reason = reasons_to_cancel_reload_.At(i); |
| 611 reason->AppendTo(&array); | 618 reason->AppendTo(&array); |
| 612 } | 619 } |
| 613 } else { | 620 } else { |
| 614 // Reload was successful. | 621 // Reload was successful. |
| 615 const GrowableObjectArray& libs = | 622 const GrowableObjectArray& libs = |
| 616 GrowableObjectArray::Handle(object_store()->libraries()); | 623 GrowableObjectArray::Handle(object_store()->libraries()); |
| (...skipping 1027 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1644 ASSERT(!super_cls.IsNull()); | 1651 ASSERT(!super_cls.IsNull()); |
| 1645 super_cls.AddDirectSubclass(cls); | 1652 super_cls.AddDirectSubclass(cls); |
| 1646 } | 1653 } |
| 1647 } | 1654 } |
| 1648 } | 1655 } |
| 1649 } | 1656 } |
| 1650 | 1657 |
| 1651 #endif // !PRODUCT | 1658 #endif // !PRODUCT |
| 1652 | 1659 |
| 1653 } // namespace dart | 1660 } // namespace dart |
| OLD | NEW |