| // 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; |
| } |
| } |