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

Unified Diff: mojo/dart/embedder/io/mojo_patch.dart

Issue 2006093002: Dart: Futures -> Callbacks. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Merge Created 4 years, 6 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 | « mojo/dart/embedder/io/internet_address_patch.dart ('k') | mojo/dart/embedder/io/server_socket_patch.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/dart/embedder/io/mojo_patch.dart
diff --git a/mojo/dart/embedder/io/mojo_patch.dart b/mojo/dart/embedder/io/mojo_patch.dart
index fc059c23639c1fe376a78f323ab22cb035e97027..fec2a3ef3a9f0b02d68f3697e9d6d4304de470fb 100644
--- a/mojo/dart/embedder/io/mojo_patch.dart
+++ b/mojo/dart/embedder/io/mojo_patch.dart
@@ -20,6 +20,187 @@ import 'dart:_mojo_services/mojo/files/directory.mojom.dart';
import 'dart:_mojo_services/mojo/files/ioctl.mojom.dart';
import 'dart:_mojo_services/mojo/files/types.mojom.dart' as types;
+// TODO(zra): Investigate the runtime cost of using these wrapper classes.
+// Port to use the callback API where necessary to recover performance.
+class _NetworkServiceProxy extends FuturizedProxy<NetworkServiceProxy> {
+ Map<Symbol, Function> _mojoMethods;
+ NetworkServiceProxy _nsProxy;
+
+ _NetworkServiceProxy(NetworkServiceProxy p) : super(p) {
+ _mojoMethods = <Symbol, Function>{
+ #createTcpBoundSocket: p.createTcpBoundSocket,
+ #createTcpConnectedSocket: p.createTcpConnectedSocket,
+ #createHttpServer: p.createHttpServer,
+ };
+ _nsProxy = p;
+ }
+ Map<Symbol, Function> get mojoMethods => _mojoMethods;
+
+ Function get createUrlLoader => _nsProxy.createUrlLoader;
+ Function get getCookieStore => _nsProxy.getCookieStore;
+ Function get createWebSocket => _nsProxy.createWebSocket;
+ Function get createUdpSocket => _nsProxy.createUdpSocket;
+ Function get registerUrlLoaderInterceptor =>
+ _nsProxy.registerUrlLoaderInterceptor;
+ Function get createHostResolver => _nsProxy.createHostResolver;
+
+ static final Map<Symbol, Function> _mojoResponses = {
+ #createTcpBoundSocket:
+ new NetworkServiceCreateTcpBoundSocketResponseParams#init,
+ #createTcpConnectedSocket:
+ new NetworkServiceCreateTcpConnectedSocketResponseParams#init,
+ #createHttpServer:
+ new NetworkServiceCreateHttpServerResponseParams#init,
+ };
+ Map<Symbol, Function> get mojoResponses => _mojoResponses;
+}
+
+class _HostResolverProxy extends FuturizedProxy<HostResolverProxy> {
+ Map<Symbol, Function> _mojoMethods;
+
+ _HostResolverProxy(HostResolverProxy proxy) : super(proxy) {
+ _mojoMethods = <Symbol, Function>{
+ #getHostAddresses: proxy.getHostAddresses,
+ };
+ }
+ Map<Symbol, Function> get mojoMethods => _mojoMethods;
+
+ _HostResolverProxy.unbound() : this(new HostResolverProxy.unbound());
+
+ static final Map<Symbol, Function> _mojoResponses = {
+ #getHostAddresses: new HostResolverGetHostAddressesResponseParams#init,
+ };
+ Map<Symbol, Function> get mojoResponses => _mojoResponses;
+}
+
+class _TcpBoundSocketProxy extends FuturizedProxy<TcpBoundSocketProxy> {
+ Map<Symbol, Function> _mojoMethods;
+
+ _TcpBoundSocketProxy(TcpBoundSocketProxy proxy) : super(proxy) {
+ _mojoMethods = <Symbol, Function>{
+ #startListening: proxy.startListening,
+ #connect: proxy.connect,
+ };
+ }
+ Map<Symbol, Function> get mojoMethods => _mojoMethods;
+
+ _TcpBoundSocketProxy.unbound() : this(new TcpBoundSocketProxy.unbound());
+
+ static final Map<Symbol, Function> _mojoResponses = {
+ #startListening: new TcpBoundSocketStartListeningResponseParams#init,
+ #connect: new TcpBoundSocketConnectResponseParams#init,
+ };
+ Map<Symbol, Function> get mojoResponses => _mojoResponses;
+}
+
+class _TcpServerSocketProxy extends FuturizedProxy<TcpServerSocketProxy> {
+ Map<Symbol, Function> _mojoMethods;
+
+ _TcpServerSocketProxy(TcpServerSocketProxy proxy) : super(proxy) {
+ _mojoMethods = <Symbol, Function>{
+ #accept: proxy.accept,
+ };
+ }
+ Map<Symbol, Function> get mojoMethods => _mojoMethods;
+
+ _TcpServerSocketProxy.unbound() : this(new TcpServerSocketProxy.unbound());
+
+ static final Map<Symbol, Function> _mojoResponses = {
+ #accept: new TcpServerSocketAcceptResponseParams#init,
+ };
+ Map<Symbol, Function> get mojoResponses => _mojoResponses;
+}
+
+class _FilesProxy extends FuturizedProxy<FilesProxy> {
+ Map<Symbol, Function> _mojoMethods;
+
+ _FilesProxy(FilesProxy proxy) : super(proxy) {
+ _mojoMethods = <Symbol, Function>{
+ #openFileSystem: proxy.openFileSystem,
+ };
+ }
+ Map<Symbol, Function> get mojoMethods => _mojoMethods;
+
+ static final Map<Symbol, Function> _mojoResponses = {
+ #openFileSystem: new FilesOpenFileSystemResponseParams#init,
+ };
+ Map<Symbol, Function> get mojoResponses => _mojoResponses;
+}
+
+class _FileProxy extends FuturizedProxy<FileProxy> {
+ Map<Symbol, Function> _mojoMethods;
+
+ _FileProxy(FileProxy proxy) : super(proxy) {
+ _mojoMethods = <Symbol, Function>{
+ #close_: proxy.close_,
+ #read: proxy.read,
+ #write: proxy.write,
+ #readToStream: proxy.readToStream,
+ #writeFromStream: proxy.writeFromStream,
+ #tell: proxy.tell,
+ #seek: proxy.seek,
+ #stat: proxy.stat,
+ #truncate: proxy.truncate,
+ #touch: proxy.touch,
+ #dup: proxy.dup,
+ #repoen: proxy.reopen,
+ #asBuffer: proxy.asBuffer,
+ #ioctl: proxy.ioctl,
+ };
+ }
+ Map<Symbol, Function> get mojoMethods => _mojoMethods;
+
+ _FileProxy.unbound() : this(new FileProxy.unbound());
+
+ static final Map<Symbol, Function> _mojoResponses = {
+ #close_: new FileCloseResponseParams#init,
+ #read: new FileReadResponseParams#init,
+ #write: new FileWriteResponseParams#init,
+ #readToStream: new FileReadToStreamResponseParams#init,
+ #writeFromStream: new FileWriteFromStreamResponseParams#init,
+ #tell: new FileTellResponseParams#init,
+ #seek: new FileSeekResponseParams#init,
+ #stat: new FileStatResponseParams#init,
+ #truncate: new FileTruncateResponseParams#init,
+ #touch: new FileTouchResponseParams#init,
+ #dup: new FileDupResponseParams#init,
+ #repoen: new FileReopenResponseParams#init,
+ #asBuffer: new FileAsBufferResponseParams#init,
+ #ioctl: new FileIoctlResponseParams#init,
+ };
+ Map<Symbol, Function> get mojoResponses => _mojoResponses;
+}
+
+class _DirectoryProxy extends FuturizedProxy<DirectoryProxy> {
+ Map<Symbol, Function> _mojoMethods;
+
+ _DirectoryProxy(DirectoryProxy proxy) : super(proxy) {
+ _mojoMethods = <Symbol, Function>{
+ #read: proxy.read,
+ #stat: proxy.stat,
+ #touch: proxy.touch,
+ #openFile: proxy.openFile,
+ #openDirectory: proxy.openDirectory,
+ #rename: proxy.rename,
+ #delete: proxy.delete,
+ };
+ }
+ Map<Symbol, Function> get mojoMethods => _mojoMethods;
+
+ _DirectoryProxy.unbound() : this(new DirectoryProxy.unbound());
+
+ static final Map<Symbol, Function> _mojoResponses = {
+ #read: new DirectoryReadResponseParams#init,
+ #stat: new DirectoryStatResponseParams#init,
+ #touch: new DirectoryTouchResponseParams#init,
+ #openFile: new DirectoryOpenFileResponseParams#init,
+ #openDirectory: new DirectoryOpenDirectoryResponseParams#init,
+ #rename: new DirectoryRenameResponseParams#init,
+ #delete: new DirectoryDeleteResponseParams#init,
+ };
+ Map<Symbol, Function> get mojoResponses => _mojoResponses;
+}
+
// When developing, set fileSystemDeveloper to true and the file system will
// persist under ~/MojoAppPersistentCaches/.
const bool fileSystemDeveloper = false;
@@ -34,11 +215,11 @@ const String systemTempPath = 'tmp';
//
int _networkServiceHandle;
int _filesServiceHandle;
-NetworkServiceProxy _networkService;
-HostResolverProxy _hostResolver;
-FilesProxy _files;
-DirectoryProxy _rootDirectory;
-DirectoryProxy _systemTempDirectory;
+_NetworkServiceProxy _networkService;
+_HostResolverProxy _hostResolver;
+_FilesProxy _files;
+_DirectoryProxy _rootDirectory;
+_DirectoryProxy _systemTempDirectory;
void _initialize(
int networkServiceHandle, int filesServiceHandle, String scriptPath) {
@@ -94,57 +275,59 @@ _closeProxies() {
}
/// Get the singleton NetworkServiceProxy.
-NetworkServiceProxy _getNetworkService() {
+_NetworkServiceProxy _getNetworkService() {
if (_networkService != null) {
return _networkService;
}
- _networkService = new NetworkServiceProxy.fromHandle(
+ var networkService = new NetworkServiceProxy.fromHandle(
new MojoHandle(_networkServiceHandle).pass());
+ _networkService = new _NetworkServiceProxy(networkService);
_networkServiceHandle = null;
return _networkService;
}
/// Get the singleton HostResolverProxy.
-HostResolverProxy _getHostResolver() {
+_HostResolverProxy _getHostResolver() {
if (_hostResolver != null) {
return _hostResolver;
}
- var networkService = _getNetworkService();
+ _NetworkServiceProxy networkService = _getNetworkService();
if (networkService == null) {
return null;
}
- _hostResolver = new HostResolverProxy.unbound();
- networkService.createHostResolver(_hostResolver);
+ _hostResolver = new _HostResolverProxy.unbound();
+ networkService.createHostResolver(_hostResolver.proxy);
// Remove the host resolver's handle from the open set because it is not
// under application control and does not affect isolate shutdown.
- _hostResolver.ctrl.endpoint.handle.pass();
+ _hostResolver.proxy.ctrl.endpoint.handle.pass();
return _hostResolver;
}
/// Get the singleton FilesProxy.
-FilesProxy _getFiles() {
+_FilesProxy _getFiles() {
if (_files != null) {
return _files;
}
- _files = new FilesProxy.fromHandle(
+ var files = new FilesProxy.fromHandle(
new MojoHandle(_filesServiceHandle).pass());
+ _files = new _FilesProxy(files);
_filesServiceHandle = null;
return _files;
}
/// Get the singleton DirectoryProxy for the root directory.
-Future<DirectoryProxy> _getRootDirectory() async {
+Future<_DirectoryProxy> _getRootDirectory() async {
if (_rootDirectory != null) {
return _rootDirectory;
}
- FilesProxy files = _getFiles();
+ _FilesProxy files = _getFiles();
assert(files != null);
- _rootDirectory = new DirectoryProxy.unbound();
+ _rootDirectory = new _DirectoryProxy.unbound();
var response =
- await files.openFileSystem(fileSystemName, _rootDirectory);
+ await files.openFileSystem(fileSystemName, _rootDirectory.proxy);
// Remove the root directory's handle from the open set because it is not
// under application control and does not affect isolate shutdown.
- _rootDirectory.ctrl.endpoint.handle.pass();
+ _rootDirectory.proxy.ctrl.endpoint.handle.pass();
// Ensure system temporary directory exists before returning the root
// directory.
@@ -153,23 +336,23 @@ Future<DirectoryProxy> _getRootDirectory() async {
}
/// Get the singleton DirectoryProxy for the system temp directory.
-Future<DirectoryProxy> _getSystemTempDirectory() async {
+Future<_DirectoryProxy> _getSystemTempDirectory() async {
if (_systemTempDirectory != null) {
return _systempTempDirectory;
}
- DirectoryProxy rootDirectory = await _getRootDirectory();
+ _DirectoryProxy rootDirectory = await _getRootDirectory();
int flags = types.kOpenFlagRead |
types.kOpenFlagWrite |
types.kOpenFlagCreate;
- _systemTempDirectory = new DirectoryProxy.unbound();
+ _systemTempDirectory = new _DirectoryProxy.unbound();
var response =
await rootDirectory.openDirectory(systemTempPath,
- _systemTempDirectory,
+ _systemTempDirectory.proxy,
flags);
assert(response.error == types.Error.ok);
// Remove the system temp directory's handle from the open set because it
// is not under application control and does not affect isolate shutdown.
- _systemTempDirectory.ctrl.endpoint.handle.pass();
+ _systemTempDirectory.proxy.ctrl.endpoint.handle.pass();
return _systemTempDirectory;
}
« no previous file with comments | « mojo/dart/embedder/io/internet_address_patch.dart ('k') | mojo/dart/embedder/io/server_socket_patch.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698