[stdlib]: Cache critical path join with thread_states

The current impl of span_join has a limitation that there
must be no overlaps within a partition. This is a challenge when
span joining all critical paths with all thread_states because
multiple threads can share the same critical paths.

This restriction means that the result of querying the critical_path
+ thread_state table for more than one critical path thread at a time
is undefined. This is fine because the exposed APIs don't allow you
do that anyways.

With the introduction of macros, it would be great to expose APIs
to extract the critical path over arbitrary (overlapping) time windows.
This change makes such queries possible on the critical_path
+ thread_state table. The limitation still applies for slices but having
this functionality for thread_states is quite powerful for instance to
extract the critical paths over all monitor contentions in a trace.

There is a performance hit to caching this result but it should speed
up subsequent queries.

Test: tools/diff_test_trace_processor.py out/android/trace_processor_shell --name-filter '.*thread_executing_span.*'
Change-Id: I5a44f91df4d6e08e8ffae4422dc88ad7c3ea4ff8
1 file changed
tree: 8508c5a0cb26ec61d12be85bfabae03cc9c00e29
  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.