[metrics]: Improve android.monitor_contention metric

1. parent_id: The previous definition of the parent_id was unintuitive.
Previously, it was the lock contentions that were blocked by the current
node. This meant that a node could have multiple parents. Now, it's been
redefined to child_id. And a new parent_id field has been added which
has the intuitive definition of the node blocking the current node.

2. Speed: The previous computations used some LEFT JOINs to compute the
contention graph relationships. This turned out to quite expensive.
Now, we use JOINs to find the parents and children separately. We can
then efficiently find all the other isolated nodes with an EXCEPT.
This yields a ~3x improvement on a 100MB boot trace. And makes some
previously unloadable 1.6G traces load in ~6s.

Test: tools/diff_test_trace_processor.py out/android/trace_processor_shell --name-filter '.*monitor.*'

Change-Id: Icbf5b70fda472423028fbb33afb9186ed6354be2
7 files changed
tree: 0aeddc815d5fe7fbdf4d80bf743f02c06eccc318
  1. .github/
  2. bazel/
  3. build_overrides/
  4. buildtools/
  5. debian/
  6. docs/
  7. examples/
  8. gn/
  9. include/
  10. infra/
  11. protos/
  12. python/
  13. src/
  14. test/
  15. third_party/
  16. tools/
  17. ui/
  18. .clang-format
  19. .clang-tidy
  20. .git-blame-ignore-revs
  21. .gitattributes
  22. .gitignore
  23. .gn
  24. .style.yapf
  25. Android.bp
  26. Android.bp.extras
  27. BUILD
  28. BUILD.extras
  29. BUILD.gn
  30. CHANGELOG
  31. codereview.settings
  32. DIR_METADATA
  33. heapprofd.rc
  34. LICENSE
  35. meson.build
  36. METADATA
  37. MODULE_LICENSE_APACHE2
  38. OWNERS
  39. perfetto.rc
  40. PerfettoIntegrationTests.xml
  41. PRESUBMIT.py
  42. README.chromium
  43. README.md
  44. TEST_MAPPING
  45. traced_perf.rc
  46. WORKSPACE
README.md

Perfetto - System profiling, app tracing and trace analysis

Perfetto is a production-grade open-source stack for performance instrumentation and trace analysis. It offers services and libraries and for recording system-level and app-level traces, native + java heap profiling, a library for analyzing traces using SQL and a web-based UI to visualize and explore multi-GB traces.

See https://perfetto.dev/docs or the /docs/ directory for documentation.