Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(550)

Unified Diff: runtime/bin/vmservice/loader.dart

Issue 1154173006: - Avoid using a streamed receive port for single messages. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Address review comments. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/builtin.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/vmservice/loader.dart
diff --git a/runtime/bin/vmservice/loader.dart b/runtime/bin/vmservice/loader.dart
index 2e04455c1546e0135fab432d09bf020022129c3c..ce3c9cce83a79ed14b3f4fb636587e7b78c7466b 100644
--- a/runtime/bin/vmservice/loader.dart
+++ b/runtime/bin/vmservice/loader.dart
@@ -6,7 +6,16 @@ part of vmservice_io;
var _httpClient;
-void _loadHttp(sendPort, uri) {
+// Send a response to the requesting isolate.
+void _sendResponse(SendPort sp, int id, dynamic data) {
+ assert((data is List<int>) || (data is String));
+ var msg = new List(2);
+ msg[0] = id;
+ msg[1] = data;
+ sp.send(msg);
+}
+
+void _loadHttp(SendPort sp, int id, Uri uri) {
if (_httpClient == null) {
_httpClient = new HttpClient()..maxConnectionsPerHost = 6;
}
@@ -18,39 +27,41 @@ void _loadHttp(sendPort, uri) {
builder.add,
onDone: () {
if (response.statusCode != 200) {
- var msg = 'Failure getting $uri: '
- '${response.statusCode} ${response.reasonPhrase}';
- sendPort.send(msg);
+ var msg = "Failure getting $uri:\n"
+ " ${response.statusCode} ${response.reasonPhrase}";
+ _sendResponse(sp, id, msg);
} else {
- sendPort.send(builder.takeBytes());
+ _sendResponse(sp, id, builder.takeBytes());
}
},
onError: (e) {
- sendPort.send(e.toString());
+ _sendResponse(sp, d, e.toString());
});
})
.catchError((e) {
- sendPort.send(e.toString());
+ _sendResponse(sp, id, e.toString());
});
// It's just here to push an event on the event loop so that we invoke the
// scheduled microtasks.
Timer.run(() {});
}
-void _loadFile(sendPort, path) {
+void _loadFile(SendPort sp, int id, Uri uri) {
+ var path = uri.toFilePath();
var sourceFile = new File(path);
sourceFile.readAsBytes().then((data) {
- sendPort.send(data);
+ _sendResponse(sp, id, data);
},
onError: (e) {
- sendPort.send(e.toString());
+ var err = "Error loading $uri:\n $e";
+ _sendResponse(sp, id, err);
});
}
var dataUriRegex = new RegExp(
r"data:([\w-]+/[\w-]+)?(;charset=([\w-]+))?(;base64)?,(.*)");
-void _loadDataUri(sendPort, uri) {
+void _loadDataUri(SendPort sp, int id, Uri uri) {
try {
var match = dataUriRegex.firstMatch(uri.toString());
if (match == null) throw "Malformed data uri";
@@ -72,21 +83,23 @@ void _loadDataUri(sendPort, uri) {
}
var data = UTF8.encode(Uri.decodeComponent(encodedData));
- sendPort.send(data);
+ _sendResponse(sp, id, data);
} catch (e) {
- sendPort.send("Invalid data uri ($uri) $e");
+ _sendResponse(sp, id, "Invalid data uri ($uri):\n $e");
}
}
_processLoadRequest(request) {
- var sp = request[0];
- var uri = Uri.parse(request[1]);
+ SendPort sp = request[0];
+ int id = request[1];
+ String resource = request[2];
+ var uri = Uri.parse(request[2]);
if (uri.scheme == 'file') {
- _loadFile(sp, uri.toFilePath());
+ _loadFile(sp, id, uri);
} else if ((uri.scheme == 'http') || (uri.scheme == 'https')) {
- _loadHttp(sp, uri);
+ _loadHttp(sp, id, uri);
} else if ((uri.scheme == 'data')) {
- _loadDataUri(sp, uri);
+ _loadDataUri(sp, id, uri);
} else {
sp.send('Unknown scheme (${uri.scheme}) for $uri');
}
« no previous file with comments | « runtime/bin/builtin.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698