tp: always try and scan out where possible

This CL improves the behaviour of filtering when we have a range/index
vector in output. Instead of scanning on of the source RowMap, we only
look at the available rows.

This CL also has some misc cleanups to increase code reuse.
Before:
                                                   ns       it
---------------------------------------------- ---------- ------
BM_RowMapFilterIntoRangeWithRange                  27358   25415
BM_RowMapFilterIntoIvWithRange                    253892    2846
BM_RowMapFilterIntoIvWithBv                       832153     827
BM_TableFilterRootNonNullEqMatchMany/2097152     6992083     100
BM_TableFilterRootMultipleNonNull/2097152        8053785      87
BM_TableFilterRootNullableEqMatchMany/2097152   34362321      20
BM_TableFilterParentSortedAndOther/2097152       3880135     177

After:
                                                   ns        it
---------------------------------------------- ---------- -------
BM_RowMapFilterIntoRangeWithRange                   2507   275405
BM_RowMapFilterIntoIvWithRange                    142639     4970
BM_RowMapFilterIntoIvWithBv                       918092      743
BM_TableFilterRootNonNullEqMatchMany/2097152     6149328      115
BM_TableFilterRootMultipleNonNull/2097152        3924791      177
BM_TableFilterRootNullableEqMatchMany/2097152   31969190       22
BM_TableFilterParentSortedAndOther/2097152         11040    61066

Analysis:
There's a small regression in BM_RowMapFilterIntoIvWithBv which is a
bit unexpected but as this case is not so common and there are big
gains elsewhere, it seems worth landing this.

Bug: b/148135145
Change-Id: I06357379b42a588002e3aeb2031503759c841d1b
2 files changed
tree: d3b783e27b5b169a8b7cea4b6f47304c639e8276
  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.

Contributing

See /docs/contributing.md for instructions.

The source-of-truth repo is Android's Gerrit. The GitHub repo is a read-only mirror.

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.