protozero: simplify packed field and allow heap growth

This CL makes the code that handles packed repeated
field encoding simpler, more ergonomic and easy to use.
It mainly  adds support for dynamic growing on the heap.

The driving rationale of this CL is the upcoming code
that will handle proto parsing and re-encoding without
libprotobuf, which needs to deal with packed fields.
In that context, the code cannot have an upper bound,
it just needs to pass through as many fields as necessary.

This CL catches the occasion to simplify the code that
handles packed fields. The previous architecture was
too clever, had too many extensions points which turned
out to be hard to really extend.
This CL is simplifying that code making the following
assumptions:
- We don't really care about making the stack size
  configurable. One size should fit everybody.
- Having a hard-limit for StackAllocated has always been
  brittle. There seems to be lot of clever code in ftrace
  that tries to size everything accordingly to this limtation.
- Less code and less templates overall, the code seems easier
  to reason about now.

Bug: 132880619
Test: perfetto_unittests
Change-Id: Ic3397b101e14482358f9755673ce196c0a3a1bb7
10 files changed
tree: 24dd686ff3345e35abd02896443e67fc538c59fe
  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.