1*6dbdd20aSAndroid Build Coastguard Worker# Contributing to Perfetto 2*6dbdd20aSAndroid Build Coastguard Worker 3*6dbdd20aSAndroid Build Coastguard Worker## Quickstart 4*6dbdd20aSAndroid Build Coastguard Worker 5*6dbdd20aSAndroid Build Coastguard WorkerNOTE: Perfetto can be built on Windows, Mac or Linux. However, setting up the environment on Windows is complicated so is not covered by this quickstart. 6*6dbdd20aSAndroid Build Coastguard Worker 7*6dbdd20aSAndroid Build Coastguard WorkerPrerequisites: git and python3. 8*6dbdd20aSAndroid Build Coastguard Worker 9*6dbdd20aSAndroid Build Coastguard WorkerSetup: 10*6dbdd20aSAndroid Build Coastguard Worker```sh 11*6dbdd20aSAndroid Build Coastguard Workergit clone https://android.googlesource.com/platform/external/perfetto/ 12*6dbdd20aSAndroid Build Coastguard Workercd perfetto 13*6dbdd20aSAndroid Build Coastguard Workertools/install-build-deps 14*6dbdd20aSAndroid Build Coastguard Workertools/setup_all_configs.py 15*6dbdd20aSAndroid Build Coastguard Worker``` 16*6dbdd20aSAndroid Build Coastguard Worker 17*6dbdd20aSAndroid Build Coastguard Worker### Building 18*6dbdd20aSAndroid Build Coastguard Worker 19*6dbdd20aSAndroid Build Coastguard Worker#### On Linux 20*6dbdd20aSAndroid Build Coastguard Worker 21*6dbdd20aSAndroid Build Coastguard WorkerFor production: 22*6dbdd20aSAndroid Build Coastguard Worker```sh 23*6dbdd20aSAndroid Build Coastguard Workertools/ninja -C out/linux_clang_release 24*6dbdd20aSAndroid Build Coastguard Worker``` 25*6dbdd20aSAndroid Build Coastguard Worker 26*6dbdd20aSAndroid Build Coastguard WorkerFor debug: 27*6dbdd20aSAndroid Build Coastguard Worker```sh 28*6dbdd20aSAndroid Build Coastguard Workertools/ninja -C out/linux_clang_debug 29*6dbdd20aSAndroid Build Coastguard Worker``` 30*6dbdd20aSAndroid Build Coastguard Worker 31*6dbdd20aSAndroid Build Coastguard Worker#### On Mac 32*6dbdd20aSAndroid Build Coastguard Worker 33*6dbdd20aSAndroid Build Coastguard WorkerFor production: 34*6dbdd20aSAndroid Build Coastguard Worker```sh 35*6dbdd20aSAndroid Build Coastguard Workertools/ninja -C out/mac_release 36*6dbdd20aSAndroid Build Coastguard Worker``` 37*6dbdd20aSAndroid Build Coastguard Worker 38*6dbdd20aSAndroid Build Coastguard WorkerFor debug: 39*6dbdd20aSAndroid Build Coastguard Worker```sh 40*6dbdd20aSAndroid Build Coastguard Workertools/ninja -C out/mac_debug 41*6dbdd20aSAndroid Build Coastguard Worker``` 42*6dbdd20aSAndroid Build Coastguard Worker 43*6dbdd20aSAndroid Build Coastguard Worker### Contributing 44*6dbdd20aSAndroid Build Coastguard Worker 45*6dbdd20aSAndroid Build Coastguard Worker1. Create an account at [android.googlesource.com](https://android.googlesource.com/). 46*6dbdd20aSAndroid Build Coastguard Worker2. (if you are a Googler) Follow go/sync#get-credentials to allow uploading to 47*6dbdd20aSAndroid Build Coastguard WorkerAndroid Gerrit. 48*6dbdd20aSAndroid Build Coastguard Worker3. Download `depot_tools`, a collection of helper scripts which make uploading changes 49*6dbdd20aSAndroid Build Coastguard Workerto Android Gerrit easier. 50*6dbdd20aSAndroid Build Coastguard Worker```sh 51*6dbdd20aSAndroid Build Coastguard Workercd perfetto 52*6dbdd20aSAndroid Build Coastguard Workergit clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 53*6dbdd20aSAndroid Build Coastguard Worker``` 54*6dbdd20aSAndroid Build Coastguard Worker4. Add `depot_tools` to your PATH (you may want to add this to your .bashrc/.zshrc): 55*6dbdd20aSAndroid Build Coastguard Worker```sh 56*6dbdd20aSAndroid Build Coastguard Workerdepot_path="$(realpath depot_tools)" 57*6dbdd20aSAndroid Build Coastguard Workerexport PATH=$depot_path:$PATH 58*6dbdd20aSAndroid Build Coastguard Worker``` 59*6dbdd20aSAndroid Build Coastguard Worker5. Create a branch with the change: 60*6dbdd20aSAndroid Build Coastguard Worker```sh 61*6dbdd20aSAndroid Build Coastguard Workergit new-branch first-contribution 62*6dbdd20aSAndroid Build Coastguard Worker``` 63*6dbdd20aSAndroid Build Coastguard Worker6. Make change in the repo. 64*6dbdd20aSAndroid Build Coastguard Worker7. Add, commit and upload the change: 65*6dbdd20aSAndroid Build Coastguard Worker```sh 66*6dbdd20aSAndroid Build Coastguard Workergit add . 67*6dbdd20aSAndroid Build Coastguard Workergit commit -m "My first contribution" 68*6dbdd20aSAndroid Build Coastguard Workergit cl upload 69*6dbdd20aSAndroid Build Coastguard Worker``` 70*6dbdd20aSAndroid Build Coastguard Worker 71*6dbdd20aSAndroid Build Coastguard Worker## Repository 72*6dbdd20aSAndroid Build Coastguard Worker 73*6dbdd20aSAndroid Build Coastguard WorkerThis project uses [Android AOSP Gerrit][perfetto-gerrit] for code reviews, 74*6dbdd20aSAndroid Build Coastguard Workerfollows the [Google C++ style][google-cpp-style], and targets `-std=c++17`. 75*6dbdd20aSAndroid Build Coastguard Worker 76*6dbdd20aSAndroid Build Coastguard WorkerDevelopment happens in the AOSP repository: 77*6dbdd20aSAndroid Build Coastguard Workerhttps://android.googlesource.com/platform/external/perfetto/ 78*6dbdd20aSAndroid Build Coastguard Worker 79*6dbdd20aSAndroid Build Coastguard Workerhttps://github.com/google/perfetto is an up-to-date and actively maintained 80*6dbdd20aSAndroid Build Coastguard Workerread-only mirror of the above. Pull requests through GitHub are not accepted. 81*6dbdd20aSAndroid Build Coastguard Worker 82*6dbdd20aSAndroid Build Coastguard Worker## Code Reviews 83*6dbdd20aSAndroid Build Coastguard Worker 84*6dbdd20aSAndroid Build Coastguard WorkerAll submissions, including submissions by project members, require review. 85*6dbdd20aSAndroid Build Coastguard WorkerWe use [Android AOSP Gerrit][perfetto-gerrit] for this purpose. 86*6dbdd20aSAndroid Build Coastguard Worker 87*6dbdd20aSAndroid Build Coastguard Worker`git cl upload` from [Chromium depot tools][depot-tools] is the preferred 88*6dbdd20aSAndroid Build Coastguard Workerworkflow to upload patches, as it takes care of runing presubmit tests, 89*6dbdd20aSAndroid Build Coastguard Workerbuild-file generators and code formatting. 90*6dbdd20aSAndroid Build Coastguard Worker 91*6dbdd20aSAndroid Build Coastguard WorkerIf you submit code directly through `repo` and your CL touches build files or 92*6dbdd20aSAndroid Build Coastguard Worker.proto files, it's very likely that it will fail in the CI because the 93*6dbdd20aSAndroid Build Coastguard Workeraforementioned generators are bypassed. 94*6dbdd20aSAndroid Build Coastguard Worker 95*6dbdd20aSAndroid Build Coastguard Worker## Continuous integration 96*6dbdd20aSAndroid Build Coastguard Worker 97*6dbdd20aSAndroid Build Coastguard WorkerThere are two levels of CI / TryBots involved when submitting a Perfetto CL: 98*6dbdd20aSAndroid Build Coastguard Worker 99*6dbdd20aSAndroid Build Coastguard Worker- [ci.perfetto.dev](https://ci.perfetto.dev): it covers building and testing 100*6dbdd20aSAndroid Build Coastguard Worker on most platforms and toolchains within ~15 mins. Anecdotally most build 101*6dbdd20aSAndroid Build Coastguard Worker failures and bugs are detected at the Perfetto CI level. 102*6dbdd20aSAndroid Build Coastguard Worker 103*6dbdd20aSAndroid Build Coastguard Worker- The [Android CI](https://ci.android.com) (also known as TreeHugger) builds a 104*6dbdd20aSAndroid Build Coastguard Worker full system image and runs full integration tests within ~2-4 hours. This can 105*6dbdd20aSAndroid Build Coastguard Worker shake a number of more rare integration bugs, often related with SELinux, 106*6dbdd20aSAndroid Build Coastguard Worker initrc files or similar. 107*6dbdd20aSAndroid Build Coastguard Worker 108*6dbdd20aSAndroid Build Coastguard WorkerBoth CIs are kicked in when the `Presubmit-Ready: +1` is set and will publish a 109*6dbdd20aSAndroid Build Coastguard Workercomment like [this][ci-example] on the CL. 110*6dbdd20aSAndroid Build Coastguard Worker 111*6dbdd20aSAndroid Build Coastguard WorkerYou need to wait for both CIs to go green before submitting. The only 112*6dbdd20aSAndroid Build Coastguard Workerexceptions are UI-only, docs-only or GN-only changes, for which the Android CI 113*6dbdd20aSAndroid Build Coastguard Workercan be bypassed, as those are not built as part of the Android tree. 114*6dbdd20aSAndroid Build Coastguard Worker 115*6dbdd20aSAndroid Build Coastguard WorkerYou can also 116*6dbdd20aSAndroid Build Coastguard Worker[test a pending Perfetto CL against Chrome's TryBots](testing.md#chromium). 117*6dbdd20aSAndroid Build Coastguard Worker 118*6dbdd20aSAndroid Build Coastguard Worker## Community 119*6dbdd20aSAndroid Build Coastguard Worker 120*6dbdd20aSAndroid Build Coastguard WorkerYou can reach us on our [Discord channel](https://discord.gg/35ShE3A). 121*6dbdd20aSAndroid Build Coastguard Worker 122*6dbdd20aSAndroid Build Coastguard WorkerMailing list: https://groups.google.com/forum/#!forum/perfetto-dev 123*6dbdd20aSAndroid Build Coastguard Worker 124*6dbdd20aSAndroid Build Coastguard WorkerThis project follows 125*6dbdd20aSAndroid Build Coastguard Worker[Google's Open Source Community Guidelines](https://opensource.google/conduct/). 126*6dbdd20aSAndroid Build Coastguard Worker 127*6dbdd20aSAndroid Build Coastguard Worker### Bugs 128*6dbdd20aSAndroid Build Coastguard Worker 129*6dbdd20aSAndroid Build Coastguard WorkerFor bugs affecting Android or the tracing internals: 130*6dbdd20aSAndroid Build Coastguard Worker 131*6dbdd20aSAndroid Build Coastguard Worker* **Googlers**: use the internal bug tracker [go/perfetto-bugs](http://goto.google.com/perfetto-bugs) 132*6dbdd20aSAndroid Build Coastguard Worker* **Non-Googlers**: use [GitHub issues](https://github.com/google/perfetto/issues). 133*6dbdd20aSAndroid Build Coastguard Worker 134*6dbdd20aSAndroid Build Coastguard WorkerFor bugs affecting Chrome Tracing: 135*6dbdd20aSAndroid Build Coastguard Worker 136*6dbdd20aSAndroid Build Coastguard Worker* Use http://crbug.com `Component:Speed>Tracing label:Perfetto`. 137*6dbdd20aSAndroid Build Coastguard Worker 138*6dbdd20aSAndroid Build Coastguard Worker## Contributor License Agreement 139*6dbdd20aSAndroid Build Coastguard Worker 140*6dbdd20aSAndroid Build Coastguard WorkerContributions to this project must be accompanied by a Contributor License 141*6dbdd20aSAndroid Build Coastguard WorkerAgreement. You (or your employer) retain the copyright to your contribution; 142*6dbdd20aSAndroid Build Coastguard Workerthis simply gives us permission to use and redistribute your contributions as 143*6dbdd20aSAndroid Build Coastguard Workerpart of the project. Head over to <https://cla.developers.google.com/> to see 144*6dbdd20aSAndroid Build Coastguard Workeryour current agreements on file or to sign a new one. 145*6dbdd20aSAndroid Build Coastguard Worker 146*6dbdd20aSAndroid Build Coastguard WorkerYou generally only need to submit a CLA once, so if you've already submitted one 147*6dbdd20aSAndroid Build Coastguard Worker(even if it was for a different project), you probably don't need to do it 148*6dbdd20aSAndroid Build Coastguard Workeragain. 149*6dbdd20aSAndroid Build Coastguard Worker 150*6dbdd20aSAndroid Build Coastguard Worker[perfetto-gerrit]: https://android-review.googlesource.com/q/project:platform%252Fexternal%252Fperfetto+status:open 151*6dbdd20aSAndroid Build Coastguard Worker[google-cpp-style]: https://google.github.io/styleguide/cppguide.html 152*6dbdd20aSAndroid Build Coastguard Worker[depot-tools]: https://dev.chromium.org/developers/how-tos/depottools 153*6dbdd20aSAndroid Build Coastguard Worker[ci-example]: https://android-review.googlesource.com/c/platform/external/perfetto/+/1108253/3#message-09fd27fb92ca8357abade3ec725919ac3445f3af 154