Previously we just dropped child scenes on the floor. Now we upload them
to Mozart. However, we just draw them on top of all the other content
and don't apply any clips or blends.
Instead of providing a stream of mutations, we now provide a the client with
the complete state of the editing control to prevent the two from getting out
of sync.
As a side-effect, we can now move the cursor around when editing a text field.
After an application is suspended and the GrContext associated with the
Flutter view is destroyed, the raster cache still contains images tied
to the defunct context. The SkyShell process will crash if these images
are used after the application resumes.
When the engine starts a new version of the Dart application, the animator may
have pending callbacks and other state related to the previous run of the app.
This state must be cleared before the new vsync provider is assigned.
In the future, we'll probably want to plumb through the keyboard animation
parameters, but for now we match the behavior on Android where we move the
widgets out of the way of the keyboard without animation.
Previously PlatformViewAndroid would create a pipe and hand it off to the
SkyEngine, which would give it to the isolate's DartState. If a second
isolate is created, the SkyEngine would no longer hold a valid proxy to a
ServicesProvider, and the new isolate's Dart code can not obtain the
servicesProvidedByEmbedder.
SkyApplication now reads service info from a services.json file bundled
with the apk. For each service, it registers a method that invokes
connectToService on a named class. This way, third party services can
register themselves.
There's a corresponding change to flutter_tools to generate this
services.json when building an apk that depends on services.
Now that we understand window insets, we don't need to hard-code the size of
the status bar. Also, convert the viewport metrics to be consistently in
physical pixels.
We used to share memory between Dart strings and WTF::String objects by
way of the Dart externalized strings. That used to be important when the
DOM shared many strings between C++ and Dart. However, now that we don't
retain strings in C++ much anymore, we don't need this complexity.
This patch removes DartStringCache and the integration. It also unwinds
several cases where we were converting back and forth between
WTF::String and std::string for no reason. Now we use std::string more
consistently.
For the case of ParagraphBuilder::addText, we now take a raw const
char*, which more closely matches the API the DartVM exposes. That means
we do a single copy out of the VM and into the render tree at that
point.
Now we just depend on Skia and Base, which makes the compositor easier
to understand.
Also, update our skia/ext/refptr.h to match the current version of the
code in Chromium. This version adds support for several useful C++11
patterns.
Reading the Android docs, it sounds like an android.view.View can re-attach to
the window after detaching. Previously, we destroyed the engine when we
detached from the window. Now we wait for the activity to be destroyed.
Hopefully fixes#997
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.