Each view gets its own Dart isolate. Unfortunately, the ShellPtr is a unique
resource, which means we need to proxy an implementation of Shell to each view.
In the future, we should probably switch dart to expect an ApplicationConnector
rather than a Shell.
* Use Node::Combinator::PRUNE, which stops the Mozart launcher from showing red
when we're loading child views. Instead of blocking the whole app, we'll now
just prune away the children that aren't ready. Eventually we'll want
to let authors control these operations.
* Grab the service registry in AcceptConnection rather than CreateView. The
CreateView comes from the Mozart launcher, which isn't where we want to get
the service registry. Now we get the service registry from the first app to
connect, which isn't right either but at least works while we sort out what
we really want.
This complex machinery made sense for Blink, which has hundreds of
developers. In our case, we're just moving around two bools. We can do
that in a much simpler way.
There's some confusion over the units for time_stamp. This patch works around
the issue. I've filed a bug (https://github.com/domokit/mojo/issues/541) to
figure out the right fix.
Also, rename the final target to flutter.mojo, which is a more descriptive
name.
Now the control flow for wiring up platform services starts in the
platform-specific code. Previously we started in shared code, which was
imposing constraints on the startup sequence for all platforms. Now that we
start in platform-specific code, we'll be able to add better support for Mojo
in a future patch.