Add support for symbolizing kernel symbols for ftrace events

Makes use of the kallsyms parser perviously introduced
by aosp/1196774. The parser is enabled only when setting
symbolize_ksyms=true in the FtraceConfig proto.
For now the CL works only when perfetto is run as root
on dev phones. Will follow up with security team to
figure out a way forward.

This CL uses the FtraceMetadata to keep track of the
incremental symbols discovered. FtraceMetadata is
shared across all cpus, but is per-session. As a
summary this is the whole callstack of a ftrace read
cycle:

FtraceController::ReadTick()
  for cpu = 0 .. num_cpus
    CpuReader[i].ReadCycle(data_sources)
      for (batch = 0; ...; batch++)
        ReadAndProcessBatch(data_sources)
          for (ds : data_sources)
            ProcessPagesForDataSource(ds)
              writes metadata
    OnFtraceDataWrittenIntoDataSourceBuffers()
      for (ds : data_souces)
        // Forward metadata to other data souces.
        metadata->Clear()


Design doc: go/perfetto-kallsyms
Bug: 147809529
Test: still TODO (but tested manually)
Change-Id: I59be90da96513c9e99981f73035dd7ee3a822d49
25 files changed
tree: abf299d3f9157a8f430c38c443e7e6c2c700e4f0
  1. bazel/
  2. build_overrides/
  3. buildtools/
  4. debian/
  5. docs/
  6. examples/
  7. gn/
  8. include/
  9. infra/
  10. protos/
  11. src/
  12. test/
  13. tools/
  14. ui/
  15. .clang-format
  16. .clang-tidy
  17. .gitignore
  18. .gn
  19. .style.yapf
  20. Android.bp
  21. Android.bp.extras
  22. BUILD
  23. BUILD.extras
  24. BUILD.gn
  25. CHANGELOG
  26. codereview.settings
  27. heapprofd.rc
  28. LICENSE
  29. METADATA
  30. MODULE_LICENSE_APACHE2
  31. OWNERS
  32. perfetto.rc
  33. PRESUBMIT.py
  34. README.chromium
  35. README.md
  36. TEST_MAPPING
  37. traced_perf.rc
  38. 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.