Disable websocket compression on service port (dart-lang/coverage#258)
This disables websocket compression when connecting to the VM service
port. Since almost all invocations of coverage collection tools happen
over a loopback connection to localhost, websocket compression uses a
ton of CPU, which causes a performance hit rather than a performance
benefit.
diff --git a/pkgs/coverage/CHANGELOG.md b/pkgs/coverage/CHANGELOG.md
index af0e724..fc834fb 100644
--- a/pkgs/coverage/CHANGELOG.md
+++ b/pkgs/coverage/CHANGELOG.md
@@ -1,5 +1,8 @@
## dev
+ * Disables WebSocket compression for coverage collection. Since almost all
+ coverage collection runs happen over the loopback interface to localhost,
+ this improves performance and reduces CPU usage.
* Migrates implementation of VM service protocol library from
`package:vm_service_client`, which is no longer maintained, to
`package:vm_service_lib`, which is.
diff --git a/pkgs/coverage/lib/src/collect.dart b/pkgs/coverage/lib/src/collect.dart
index 71bad0d..aef1c7f 100644
--- a/pkgs/coverage/lib/src/collect.dart
+++ b/pkgs/coverage/lib/src/collect.dart
@@ -3,9 +3,9 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
+import 'dart:io';
import 'package:vm_service_lib/vm_service_lib.dart';
-import 'package:vm_service_lib/vm_service_lib_io.dart';
import 'util.dart';
const _retryInterval = Duration(milliseconds: 200);
@@ -37,7 +37,13 @@
VmService service;
await retry(() async {
try {
- service = await vmServiceConnectUri('$uri', log: StdoutLog());
+ final options = const CompressionOptions(enabled: false);
+ final socket = await WebSocket.connect('$uri', compression: options);
+ final controller = StreamController<String>();
+ socket.listen((dynamic data) => controller.add(data));
+ service = VmService(
+ controller.stream, (String message) => socket.add(message),
+ log: StdoutLog(), disposeHandler: () => socket.close());
await service.getVM().timeout(_retryInterval);
} on TimeoutException {
service.dispose();