blob: 4cc695c8a4bcca6bfc4bead50d889ead6f10e9a1 [file] [log] [blame] [view]
Dart Embedder Hacking
====
## Debugging
Under Mojo, by default the Dart VM is built in Release mode regardless of the
mode that Mojo is built in. That is, when Mojo is built in Debug mode, the
Dart VM is still built in Release mode. To change this behavior while working
on the embedder, pass dart_debug=true to gn to configure a Debug build of the
Dart VM. I.e.:
```
$ gn gen --check out/Debug --args='... dart_debug=true'
```
## Embedder packages
In order to implement the 'dart:io' library (and run a service isolate hosting
Observatory), the Mojo Dart embedder needs to use some package: imports. Mojo
applications should be able to use a different version of these packages than
the embedder. In other words, the embedder snapshot cannot include any
'package:' imports because they will prohibit an application from using a newer
version of the package. In order to allow the embedder to use packages
without interfering with an application's intended version, we clone the
packages used by the embedder and rewrite the url to start with 'dart:_'
(not 'package:'). Each dart:_ import must have a mapping provided
to gen_snapshot which maps from the import uri to a real file system path.
The complete list of packages used by the embedder is located at
//mojo/dart/embedder/packages.dart.
Adding an embedder package can be done in three steps:
1) Add 'dart:_' import to packages.dart, for example:
import 'dart:_mojo/public/dart/application.dart';
2) Add dart_embedder_package to //mojo/dart/embedder/BUILD.gn, for example:
dart_embedder_package("dart_embedder_package_application") {
package = "mojo/public/interfaces/application"
}
3) Add the package directory to the list in :generate_snapshot_bin, for example:
rebase_path("//mojo/public/interfaces/application"),
## Dart IO
Under Mojo, the 'dart:io' implementation is not complete and likely suffers
from subtle differences. Implementation status:
| 'dart:io' feature | Mojo Service | Implemented |
| ------------------ | -------------------- | ----------- |
| Socket | mojo:network_service | Yes |
| ServerSocket | mojo:network_service | Yes |
| DNS | mojo:network_srevice | Yes |
| SecureSocket | N/A | No |
| SecureServerSocket | N/A | No |
| Datagram | mojo:network_service | No |
| File system | mojo:files | Yes |
| Zlib Gzip Filter | N/A | Yes |