Perfetto trace format

This doc is WIP, stay tuned.

A Perfetto trace is guaranteed to be a a linear sequence of TracePacket(s) (see trace_packet.proto).

As a key part of the Perfetto design, the tracing service is agnostic of the content of TracePacket, modulo the few fields defined in trusted_packet.proto that are produced by the service itself.

Each data source can extend the trace with their app-specific protobuf schema.

TODO(primiano): we should reserve an extension range and figure out / comment a hash to assign sub-message IDs, even without checking them into trace_packet.proto.

Linearity guarantees
The tracing service guarantees that all TracePacket(s) written by a given TraceWriter are seen in-order, without gaps or duplicates. If, for any reason, a TraceWriter sequence becomes invalid, no more packets are returned to the Consumer (or written into the trace file).

However, TracePacket(s) written by different TraceWriter (hence even different producers) can be seen in no particular order. The consumer can re-establish a total order, if interested, using the packet timestamps (after having synchronized the different clocks onto a global clock).