processor: Support TrackDescriptor's parent_uuid + pid/tid reuse

Refactors tokenization and parsing of TrackDescriptors so that:
 - Only a single ProcessDescriptor track is supported per process.
 - Only a single ThreadDescriptor track is supported per thread.
 - Such a process/thread track is merged with slice-type system events
   into a single track.
 - Other tracks (e.g. async tracks) can be associated with a thread
   or process using the "parent_uuid" field.
 - pid/tid reuse (i.e. new process/thread spawns with same pid/tid
   after old process/thread terminates) is detected based on changing
   uuids of Process/ThreadDescriptor tracks.

To accomplish this, tokenization now only makes reservations for tracks
without actually inserting anything into the track table - since
TrackDescriptors may appear in any order in the file, and we cannot
know the track's type/context until we see its parent's descriptor.

During parsing, the reservations will be resolved and inserted into the
track table. If the uuid of a process's or thread's track changes, we
assume that the pid/tid of the process/thread was reused.

Change-Id: Iec1d019db211773eb15ee517ae0dac1ce87553c9
23 files changed
tree: e5c6650e9e8c4416b52a470bdee089344bf9b7da
  1. bazel/
  2. build_overrides/
  3. buildtools/
  4. debian/
  5. docs/
  6. gn/
  7. include/
  8. infra/
  9. protos/
  10. src/
  11. test/
  12. tools/
  13. ui/
  14. .clang-format
  15. .gitignore
  16. .gn
  17. .style.yapf
  18. Android.bp
  19. Android.bp.extras
  20. BUILD
  21. BUILD.extras
  22. BUILD.gn
  23. codereview.settings
  24. heapprofd.rc
  25. LICENSE
  26. MODULE_LICENSE_APACHE2
  27. NOTICE
  28. OWNERS
  29. perfetto.rc
  30. PRESUBMIT.py
  31. README.chromium
  32. README.md
  33. TEST_MAPPING
  34. WORKSPACE
README.md

Perfetto - Performance instrumentation and tracing

Perfetto is an open-source project for performance instrumentation and tracing of Linux/Android/Chrome platforms and user-space apps.

See www.perfetto.dev for docs.

Contributing

See /docs/contributing.md for instructions.

The source-of-truth repo is Android's Gerrit. The GitHub repo is a read-only mirror.

Bugs

  • For bugs affecting Android or the tracing internals use the internal bug tracker (go/perfetto-bugs).
  • For bugs affecting Chrome use http://crbug.com, Component:Speed>Tracing label:Perfetto.

Community

You can reach us on our Discord channel. If you prefer using IRC we have an experimental Discord <> IRC bridge synced with #perfetto-dev on Freenode.