blob: d4b264604bb0adb7195b07e4b9c728af235d924e [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:devtools_server/devtools_server.dart' as devtools_server;
import 'package:meta/meta.dart';
import '../base/io.dart' as io;
import '../base/logger.dart';
import '../resident_runner.dart';
/// An implementation of the devtools launcher that uses the server package.
///
/// This is implemented in isolated to prevent the flutter_tool from needing
/// a devtools dep in google3.
class DevtoolsServerLauncher extends DevtoolsLauncher {
DevtoolsServerLauncher({
@required Logger logger,
}) : _logger = logger;
final Logger _logger;
io.HttpServer _devtoolsServer;
@override
Future<void> launch(Uri observatoryAddress) async {
try {
await serve();
await devtools_server.launchDevTools(
<String, dynamic>{
'reuseWindows': true,
},
observatoryAddress,
'http://${_devtoolsServer.address.host}:${_devtoolsServer.port}',
false, // headless mode,
false, // machine mode
);
} on Exception catch (e, st) {
_logger.printTrace('Failed to launch DevTools: $e\n$st');
}
}
@override
Future<DevToolsServerAddress> serve() async {
try {
_devtoolsServer ??= await devtools_server.serveDevTools(
enableStdinCommands: false,
);
return DevToolsServerAddress(_devtoolsServer.address.host, _devtoolsServer.port);
} on Exception catch (e, st) {
_logger.printTrace('Failed to serve DevTools: $e\n$st');
return null;
}
}
@override
Future<void> close() async {
await _devtoolsServer?.close();
_devtoolsServer = null;
}
}