Dart invokes Start/StopTracing callbacks within the _setVMTimelineFlags service
method whenever the embedder timeline stream toggles on or off. Flutter's
implementation of these callbacks was modifying the set of enabled streams,
which could override the intended behavior of _setVMTimelineFlags.
Start/StopTracing will now only control Flutter's embedder-specific log.
Also needed to change the Flutter engine's --trace-startup flag to set the
corresponding timeline stream flag on the Dart VM.
- remove the unnecessary MessageLoop
- split stopping the trace from downloading it
- support waiting for the trace file to be finalized
- fix the missing null-termination in the trace data string
Instead, we can just concatenate the records together, which means you can view
the generated trace file without post-processing. Also, I've made the trace
file world-readable, so that you can trace a device without needing root
access.