tp: convert to index vector when filter is followed by sort

This CL adds the ability to choose whether to switch the RowMap from a
range to an index vector or bit vector depending on whether the filter
will be follwed up with a sort.

This significantly speeds up the situation where we have a single filter
constraint followed by a sort (which the UI occasionally does).

Old:
+-----------------------------------+-----------+-------+
|                                   | Time (ns) |  It   |
+-----------------------------------+-----------+-------+
| BM_TableFilterAndSortRoot/1024    |      9207 | 72455 |
| BM_TableFilterAndSortRoot/4096    |    628240 |  1095 |
| BM_TableFilterAndSortRoot/32768   |   7132940 |    99 |
| BM_TableFilterAndSortRoot/262144  |  79529315 |     9 |
| BM_TableFilterAndSortRoot/2097152 | 757143771 |     1 |
+-----------------------------------+-----------+-------+

New:
+-----------------------------------+-----------+-------+
|                                   | Time (ns) |  It   |
+-----------------------------------+-----------+-------+
| BM_TableFilterAndSortRoot/1024    |      9446 | 75692 |
| BM_TableFilterAndSortRoot/4096    |     29897 | 23489 |
| BM_TableFilterAndSortRoot/32768   |    416539 |  1692 |
| BM_TableFilterAndSortRoot/262144  |   4779007 |   144 |
| BM_TableFilterAndSortRoot/2097152 |  50467757 |    13 |
+-----------------------------------+-----------+-------+

Bug: 135177627
Change-Id: Id6e41f3dcea0121684105e2c84ee5aa039613d06
5 files changed
tree: d28330280daccf8e4fc82cf727b76340a8f4558e
  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.