Move target_buffer from ShmABI to IPC

Background:
-----------
The SharedMemoryBuffer is a pool of pages shared
between all data sources in a producer. If the
tracing session involves >1 buffer, data sources
might be producing data that is targeted to different
buffers. We need a way for the producer to tell the
tracing service what is the target buffer for each
chunk in the SMB.

So far this information has been stored into the
ShmemABI. This however introduced lot of unnecessary
complexity, mainly because there isn't enough space to
store the target_buffer in the chunk header, so we ended
up storing it in the page header. In turn this made both
page partitioning and finding a free chunk too complex.

This CL gets rid of most of this complexity and moves the
signaling of the target buffer to the CommitData IPC. We
are going to send an IPC to the service for each chunk that
needs to be drained anyways, that seems the most logical
place to plumb the target_buffer.

Test: perfetto_unittest
Bug: 73612642
Change-Id: Icd2b9b7394a74ad0c39b39072995cb89db4106ba
9 files changed
tree: 68d6b3cf14ce45a0dbfa34747778b58004016f49
  1. build_overrides/
  2. buildtools/
  3. debian/
  4. docs/
  5. gn/
  6. include/
  7. infra/
  8. protos/
  9. src/
  10. test/
  11. tools/
  12. .clang-format
  13. .gitignore
  14. .gn
  15. .travis.yml
  16. Android.bp
  17. Android.bp.extras
  18. BUILD.gn
  19. codereview.settings
  20. MODULE_LICENSE_APACHE2
  21. NOTICE
  22. OWNERS
  23. perfetto.rc
  24. PRESUBMIT.py
  25. README.chromium
  26. README.md
README.md

Perfetto - Performance instrumentation and logging for POSIX platforms

This project is meant to be built both as part of the Android tree and from a standalone checkout

For internal docs see this page

Supported platforms

Android is the platform targeted in the first milestones. Right now Linux desktop and OSX are maintained best-effort.

Contributing

This project uses Android AOSP Gerrit for code reviews and uses the Google C++ style. Currently targets -std=c++11.

You can use both git cl upload from Chromium depot tools or Android repo to upload patches.

git cl is quite convenient as it supports code auto-formatting via git cl format.

See https://source.android.com/source/contributing for more details about external contributions and CLA signing.

Build instructions

See docs/build_instructions.md

Running Perfetto

See docs/running_perfetto.md

Continuous integration

Continuous build and test coverage is available at perfetto-ci.appspot.com. Trybots: CLs uploaded to gerrit are automatically submitted to TravisCI within one minute and made available on the CI page above. The relevant code lives in the infra/ directory.

Run tests

On the host (Linux / OSX)

$ tools/ninja -C out/default (tracing_unittests | tracing_benchmarks)
$ out/default/tracing_unittests --gtest_help

On Android

Either connect a device in ADB mode or use the bundled emulator.

To start the emulator:
$ tools/run_android_emulator (arm | arm64) &

To run the tests (either on the emulator or physical device):
$ tools/run_android_test out/default tracing_unittests