* Send RPC request to switch assets directory on hot reload.
This is needed to pick up updated assets that are expected to be picked up on hot reload.
* Assert assets directory is not null.
* Better multiple future wait
* Add type annotation
* Plumb a --strong option through to the front end server and the engine
so that we can run flutter apps in preview-dart-2 and strong mode
* - Address analyzer lint issues
*- correctly set up strong mode option in the case of AOT builds
* tweak the text for the 'elements didnt reload' message
* review comments
* prefix items with a list char
* add a hostIsIde param instead of the isDaemonMode top-level function
* add a trailing comma
* Restructure hot mode test so it runs interactively.
This allows to add a benchmark for hot reload after actual source code change.
* Add curly braces, refactory copyRecursive
This reverts commit 5e7bcbacf8.
`flutter run --benchmark` was triggering a different quick bailout path in the VM than `flutter run`. The failure has been fixed upstream.
* Fix restart flow for preview-dart-2 mode.
Restart in preview-dart-2 needs to use kernel file and it has to be complete, rather than incremental kernel file.
* Add curly braces
* Do full compile on restart
* Roll engine to pick up changes to hot reload for preview-dart-2
* Add hotReloadInitialDevFSSyncMilliseconds to track how long user have to wait before being able to do first reload.
This stat is significantly different between existing and preview-dart-2 setting (for the latter, this stat is ~3x slower: 13s vs ~4s).
* Remove ws
* Cleanup timer-related code
This reverts commit 90028813a8.
This change caused a few bots to fail with 'JSON-RPC error 110: Extension error', which is odd because _getUnusedChangesInLastReload is not an extension.
In
df8bf384eb
a new functionality of the Dart VM Service Protocol has been introduced.
Clients connected to the Service Protocol are now able to expose
services that other clients (e.g. Observatory) can invoke through the
Service Protocol itself.
With these changes Flutter Tools register them self as a `reloadSources`
(a.k.a. HotReload) capable client.
Observatory is already listening for the clients which expose this
functionality and uses by default the service based version of
`reloadSources` when available, so requesting a HotReload from
Observatory will trigger the full Flutter HotReload.
Related https://github.com/dart-lang/sdk/issues/30023
Related https://github.com/flutter/flutter/pull/11229
Related https://github.com/flutter/flutter/pull/11256
`adb` can sometimes hang, which will in turn hang the Dart isolate if
we're using `Process.runSync()`. This changes many of the `Device` methods
to return `Future<T>` in order to allow them to use the async process
methods. A future change will add timeouts to the associated calls so
that we can properly alert the user to the hung `adb` process.
This is work towards #7102, #9567
- [x] Switch the reassemble timeout to 5 seconds.
- [x] Print a status message if reassemble fails:
```
Performing hot reload...
Reassembling app.flx$main took too long. Hot reload may have failed.
Reloaded 0 of 418 libraries in 5,322ms.
```
Fixes#9316Fixes#8861Fixes#8857Fixes#8856
- [x] Catch SocketErrors and handle them gracefully.
- [x] Print 'Lost connection to device' when the service protocol connection is severed unexpectedly.
- [x] Print 'Application finished' when the application exits otherwise.
After this PR:
```
Launching lib/main.dart on Nexus 7 in debug mode...
Running 'gradle assembleDebug'... 1.2s
Built build/app/outputs/apk/app-debug.apk (21.7MB).
Syncing files to device...
Application finished.
DevFS sync failed. Lost connection to device: SocketException: OS Error: Connection refused, errno = 111, address = 127.0.0.1, port = 53062
Could not perform initial file synchronization.
```
Fixes#6705
The first hot reload does a bunch of work that we used to hide behind the
loader screen. This PR changes the messsage printed to the user on the first
reload from:
'Performing hot reload...'
to:
'Initializing hot reload...'
Subsequent reloads say 'Performing hot reload...'
* Remove legacy .apk build.
Print out an error message telling the user to upgrade the project if
it's not Gradle-based. Removed all the obvious traces of the legacy
build.
Added support for Dart VM kernel snapshots in Gradle builds.
Fixed Android installs to verify that the app is actually installed, and
not just rely on the presence of the .sha1 file.
Function keys don't work great on any platform we support:
* Mac doesn't have first-class function keys.
* On Ubuntu: F1 opens the system help and F10 opens the file dialog.
* ... and Windows is a mess as well.
It was resulting in weird situations where the tool would dump an
error message and stack but not quit, or would fail hard but then just
hang.
Instead, specifically catch errors you expect. As an example of this,
there's one error we expect from the DartDependencySetBuilder, so we
catch that one, turn it into a dedicated exception class, then in the
caller catch that specific exception.