Devon Carew 40c0d6ea12 Consolidate observatory code (#3892)
* rename service_protocol.dart to protocol_discovery.dart

* add a wrapper around the obs. protocol

* use json-rpc in run

* consolidate obs. code; implement flutter run --benchmark

* review comments
2016-05-12 18:15:23 -07:00

74 lines
2.4 KiB
Dart

// Copyright 2016 The Chromium 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 'dart:async';
import 'dart:io';
import 'package:http/http.dart' as http;
import '../base/common.dart';
import '../globals.dart';
import '../runner/flutter_command.dart';
class SkiaCommand extends FlutterCommand {
SkiaCommand() {
argParser.addOption('output-file', help: 'Write the Skia picture file to this path.');
argParser.addOption('skiaserve', help: 'Post the picture to a skiaserve debugger at this URL.');
argParser.addOption('diagnostic-port',
defaultsTo: kDefaultDiagnosticPort.toString(),
help: 'Local port where the diagnostic server is listening.');
}
@override
final String name = 'skia';
@override
final String description = 'Retrieve the last frame rendered by a Flutter app as a Skia picture.';
@override
Future<int> runInProject() async {
File outputFile;
Uri skiaserveUri;
if (argResults['output-file'] != null) {
outputFile = new File(argResults['output-file']);
} else if (argResults['skiaserve'] != null) {
skiaserveUri = Uri.parse(argResults['skiaserve']);
} else {
printError('Must provide --output-file or --skiaserve');
return 1;
}
Uri skpUri = new Uri(scheme: 'http', host: '127.0.0.1',
port: int.parse(argResults['diagnostic-port']),
path: '/skp');
http.Request skpRequest = new http.Request('GET', skpUri);
http.StreamedResponse skpResponse = await skpRequest.send();
if (skpResponse.statusCode != HttpStatus.OK) {
String error = await skpResponse.stream.toStringStream().join();
printError('Error: $error');
return 1;
}
if (outputFile != null) {
IOSink sink = outputFile.openWrite();
await sink.addStream(skpResponse.stream);
await sink.close();
} else if (skiaserveUri != null) {
Uri postUri = new Uri.http(skiaserveUri.authority, '/new');
http.MultipartRequest postRequest = new http.MultipartRequest('POST', postUri);
postRequest.files.add(new http.MultipartFile(
'file', skpResponse.stream, skpResponse.contentLength));
http.StreamedResponse postResponse = await postRequest.send();
if (postResponse.statusCode != HttpStatus.OK) {
printError('Failed to post Skia picture to skiaserve');
return 1;
}
}
return 0;
}
}