commit | d52e627deeeeae323e65ee266d2bf0dcedee3c98 | [log] [tgz] |
---|---|---|
author | Primiano Tucci <primiano@google.com> | Fri Apr 06 19:06:53 2018 +0200 |
committer | Primiano Tucci <primiano@google.com> | Fri Apr 06 19:06:53 2018 +0200 |
tree | fbfef12034ea3f0dd6154ec0ff7b66246b550258 | |
parent | 97c4f32037e216ce2553ce02e27f704d15401e04 [diff] |
Add Flush support to Producer and expose API to Consumer Background ---------- Before this CL, when tracing is disabled we might lose the last trace packets produced near the end of the trace. This happens because the service sees data in the SMB only when it's notified by the producer via a CommitData() request. In turn, in the current implementation, a Producer commits data only when the chunk is full. Hence the last chunk for each data source will never been seen by the service when disabling tracing. This causes partial data losses. Changes ------- This CL introduces a Flush() signaling mechanism as follows: 3) Introduces a flush request from the service to producers. Producers are supposed to flush all their trace writers in response to that. 2) Introduces a flush request from the consumer to the service. This allows the consumer to request all data to be committed at any time (not just while disabling tracing). The flush request has also a callback that is invoked by the service only after all producers have acked the flush (so the consumer is guaranteed that the next ReadBuffers will contain the result of the flush), or after a given timeout (so that the callback doesn't hang forever). 3) Causes time-based traces (which are handled by the service) to automatically flush before disabling tracing. This CL does NOT fix the underlying problem in the ftrace reader (see bug 73886018) where, because of the splice, we don't see the latest trace event even on the producer side. Fixing this problem requires the Flush() to abort the splice in ftrace's CpuReader and commit the data (see TODO in SinkDelegate::Flush()). Change-Id: Ifdec9f241b2ff98a7b4925b02fdd0beb16942e0e Bug: 77684460
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
Android is the platform targeted in the first milestones. Right now Linux desktop and OSX are maintained best-effort.
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.
See docs/build_instructions.md
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.
$ tools/ninja -C out/default (tracing_unittests | tracing_benchmarks) $ out/default/tracing_unittests --gtest_help
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