From 140dfd6d89bc7419603f282c187a93c42c9b306a Mon Sep 17 00:00:00 2001 From: Ryan Macnak Date: Mon, 9 Oct 2017 16:31:05 +0000 Subject: [PATCH] [vm] Consider a reload with no changed files as a reload for _getUnusedChangesInLastReload. Add missing messages for various vm-service error codes. Bug: https://github.com/flutter/flutter/issues/12300 Change-Id: I1f3607f94c5ab2fb770813f0502c3b1c9c40fdf4 Reviewed-on: https://dart-review.googlesource.com/11642 Reviewed-by: Siva Annamalai Commit-Queue: Siva Annamalai --- .../unused_changes_in_last_reload_test.dart | 17 +++++++++++++++-- runtime/vm/isolate_reload.cc | 3 +++ runtime/vm/json_stream.cc | 10 ++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/runtime/observatory/tests/service/unused_changes_in_last_reload_test.dart b/runtime/observatory/tests/service/unused_changes_in_last_reload_test.dart index 2036bd6175a..e3612bfa972 100644 --- a/runtime/observatory/tests/service/unused_changes_in_last_reload_test.dart +++ b/runtime/observatory/tests/service/unused_changes_in_last_reload_test.dart @@ -54,9 +54,9 @@ var tests = [ print(e); }); - // Reload to v2. + // Reload to v1 (null change). var response = await childIsolate.reloadSources( - rootLibUri: v2Uri.toString(), + rootLibUri: v1Uri.toString(), ); print(response); expect(response['success'], isTrue); @@ -65,6 +65,19 @@ var tests = [ response = await childIsolate.invokeRpc("_getUnusedChangesInLastReload", {}); print(response); var unused = response['unused'].map((ea) => ea.toString()); + expect(unused, unorderedEquals([])); + + // Reload to v2. + response = await childIsolate.reloadSources( + rootLibUri: v2Uri.toString(), + ); + print(response); + expect(response['success'], isTrue); + + // Fetch unused. + response = await childIsolate.invokeRpc("_getUnusedChangesInLastReload", {}); + print(response); + unused = response['unused'].map((ea) => ea.toString()); expect(unused, unorderedEquals([ 'Class(C)', 'Class(NewClass)', diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc index 28cbbc2f930..830d30d0b7a 100644 --- a/runtime/vm/isolate_reload.cc +++ b/runtime/vm/isolate_reload.cc @@ -600,6 +600,9 @@ void IsolateReloadContext::Reload(bool force_reload, if (!modified_libs_->Contains(old_root_lib.index())) { ASSERT(modified_libs_->IsEmpty()); reload_skipped_ = true; + // Inform GetUnusedChangesInLastReload that a reload has happened. + I->object_store()->set_changed_in_last_reload( + GrowableObjectArray::Handle(GrowableObjectArray::New())); ReportOnJSON(js_); TIR_Print("---- SKIPPING RELOAD (No libraries were modified)\n"); return; diff --git a/runtime/vm/json_stream.cc b/runtime/vm/json_stream.cc index bb42fa7918c..9fcadd852db 100644 --- a/runtime/vm/json_stream.cc +++ b/runtime/vm/json_stream.cc @@ -138,6 +138,10 @@ static const char* GetJSONRpcErrorMessage(intptr_t code) { return "Feature is disabled"; case kCannotAddBreakpoint: return "Cannot add breakpoint"; + case kStreamAlreadySubscribed: + return "Stream already subscribed"; + case kStreamNotSubscribed: + return "Stream not subscribed"; case kIsolateMustBeRunnable: return "Isolate must be runnable"; case kIsolateMustBePaused: @@ -146,14 +150,16 @@ static const char* GetJSONRpcErrorMessage(intptr_t code) { return "Cannot resume execution"; case kIsolateIsReloading: return "Isolate is reloading"; + case kIsolateReloadBarred: + return "Isolate cannot be reloaded"; + case kIsolateMustHaveReloaded: + return "Isolate must have reloaded"; case kFileSystemAlreadyExists: return "File system already exists"; case kFileSystemDoesNotExist: return "File system does not exist"; case kFileDoesNotExist: return "File does not exist"; - case kIsolateReloadBarred: - return "Isolate cannot be reloaded"; default: return "Extension error"; }