Use base::FlatSet for pid tracking in ftrace metadata

The old code was appending to a never-ending vector,
speculating that the last pid inserted would show up
over and over again.
That speculation was wrong and in some cases it would
cause the metadata vector to grow to +16MB.
Use FlatSet, reduce overhead, make memory bounded to
the number of distinct pids.
Also add a bitset cache ahead of the FlatSet. It makes
AddPid() even faster, saving 1% to 2% on very large
workloads.

Bug: 145398368
Change-Id: I3baffa772ace8267e49daa6101ed92ff913d67c2
11 files changed
tree: 406219e0201ccdb74f1b4ed468f83014a04a6459
  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.

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.