processor: Walk up stack to find matching begin event

Today we don't match an end event with a begin event if the begin event
is not the last one in stack. This CL walks up the stack to find begin
event with same name and category.

Here is a real example from a chrome trace:
[ ]         V8.GC_HEAP_EXTERNAL_PROLOGUE
 [          MajorGC Begin
   [ ]      V8.GC_HEAP_EXTERNAL_EPILOGUE
    ]       MajorGC End

We throw away the MajorGC End event here, because its timestamp is in
the middle of the last slice in the stack. But then the MajorGC Begin
event is never closed, and all other slices become a descendant of it.

Technically this is an invalid trace because duration events on the same
thread should not intersect like this, and we should find and fix the
problem in the producer. Recording a new error stat for this so we're
aware of the issue.

Change-Id: I74a0b32bdcec37086f5b0109f87a406e528c4c9e
4 files changed
tree: ea6cff2c25a41d7a63c3b41a031eccde82d0a6ff
  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. MODULE_LICENSE_APACHE2
  26. NOTICE
  27. OWNERS
  28. perfetto.rc
  29. PRESUBMIT.py
  30. README.chromium
  31. README.md
  32. TEST_MAPPING
  33. 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.