|  | # Contributing to Perfetto | 
|  |  | 
|  | ## Quickstart | 
|  |  | 
|  | NOTE: 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. | 
|  |  | 
|  | Prerequisites: git and python3. | 
|  |  | 
|  | Setup: | 
|  | ```sh | 
|  | git clone https://android.googlesource.com/platform/external/perfetto/ | 
|  | cd perfetto | 
|  | tools/install-build-deps | 
|  | tools/setup_all_configs.py | 
|  | ``` | 
|  |  | 
|  | ### Building | 
|  |  | 
|  | #### On Linux | 
|  |  | 
|  | For production: | 
|  | ```sh | 
|  | tools/ninja -C out/linux_clang_release | 
|  | ``` | 
|  |  | 
|  | For debug: | 
|  | ```sh | 
|  | tools/ninja -C out/linux_clang_debug | 
|  | ``` | 
|  |  | 
|  | #### On Mac | 
|  |  | 
|  | For production: | 
|  | ```sh | 
|  | tools/ninja -C out/mac_release | 
|  | ``` | 
|  |  | 
|  | For debug: | 
|  | ```sh | 
|  | tools/ninja -C out/mac_debug | 
|  | ``` | 
|  |  | 
|  | ### Contributing | 
|  |  | 
|  | 1. Create an account at [android.googlesource.com](https://android.googlesource.com/). | 
|  | 2. Download `depot_tools`, a collection of helper scripts which make uploading changes to Android gerrit easier. | 
|  | ```sh | 
|  | cd perfetto | 
|  | git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git | 
|  | ``` | 
|  | 3. Add `depot_tools` to your path: | 
|  | ```sh | 
|  | depot_path="$(realpath depot_tools)" | 
|  | export PATH=$depot_path:$PATH | 
|  | ``` | 
|  | 4. Create a branch with the change: | 
|  | ```sh | 
|  | git new-branch first-contribution | 
|  | ``` | 
|  | 5. Make change in the repo. | 
|  | 5. Add and commit the change: | 
|  | ```sh | 
|  | git add . | 
|  | git commit -m "My first contribution" | 
|  | git cl upload | 
|  | ``` | 
|  |  | 
|  | ## Repository | 
|  |  | 
|  | This project uses [Android AOSP Gerrit][perfetto-gerrit] for code reviews, | 
|  | follows the [Google C++ style][google-cpp-style], and targets `-std=c++17`. | 
|  |  | 
|  | Development happens in the AOSP repository: | 
|  | https://android.googlesource.com/platform/external/perfetto/ | 
|  |  | 
|  | https://github.com/google/perfetto is an up-to-date and actively maintained | 
|  | read-only mirror of the above. Pull requests through GitHub are not accepted. | 
|  |  | 
|  | ## Code Reviews | 
|  |  | 
|  | All submissions, including submissions by project members, require review. | 
|  | We use [Android AOSP Gerrit][perfetto-gerrit] for this purpose. | 
|  |  | 
|  | `git cl upload` from [Chromium depot tools][depot-tools] is the preferred | 
|  | workflow to upload patches, as it takes care of runing presubmit tests, | 
|  | build-file generators and code formatting. | 
|  |  | 
|  | If you submit code directly through `repo` and your CL touches build files or | 
|  | .proto files, it's very likely that it will fail in the CI because the | 
|  | aforementioned generators are bypassed. | 
|  |  | 
|  | ## Continuous integration | 
|  |  | 
|  | There are two levels of CI / TryBots involved when submitting a Perfetto CL: | 
|  |  | 
|  | - [ci.perfetto.dev](https://ci.perfetto.dev): it covers building and testing | 
|  | on most platforms and toolchains within ~15 mins. Anecdotally most build | 
|  | failures and bugs are detected at the Perfetto CI level. | 
|  |  | 
|  | - The [Android CI](https://ci.android.com) (also known as TreeHugger) builds a | 
|  | full system image and runs full integration tests within ~2-4 hours. This can | 
|  | shake a number of more rare integration bugs, often related with SELinux, | 
|  | initrc files or similar. | 
|  |  | 
|  | Both CIs are kicked in when the `Presubmit-Ready: +1` is set and will publish a | 
|  | comment like [this][ci-example] on the CL. | 
|  |  | 
|  | You need to wait for both CIs to go green before submitting. The only | 
|  | exceptions are UI-only, docs-only or GN-only changes, for which the Android CI | 
|  | can be bypassed, as those are not built as part of the Android tree. | 
|  |  | 
|  | You can also | 
|  | [test a pending Perfetto CL against Chrome's TryBots](testing.md#chromium). | 
|  |  | 
|  | ## Community | 
|  |  | 
|  | You can reach us on our [Discord channel](https://discord.gg/35ShE3A). | 
|  |  | 
|  | Mailing list: https://groups.google.com/forum/#!forum/perfetto-dev | 
|  |  | 
|  | This project follows | 
|  | [Google's Open Source Community Guidelines](https://opensource.google/conduct/). | 
|  |  | 
|  | ### Bugs | 
|  |  | 
|  | For bugs affecting Android or the tracing internals: | 
|  |  | 
|  | * **Googlers**: use the internal bug tracker [go/perfetto-bugs](http://goto.google.com/perfetto-bugs) | 
|  | * **Non-Googlers**: use [GitHub issues](https://github.com/google/perfetto/issues). | 
|  |  | 
|  | For bugs affecting Chrome Tracing: | 
|  |  | 
|  | * Use http://crbug.com `Component:Speed>Tracing label:Perfetto`. | 
|  |  | 
|  | ## Contributor License Agreement | 
|  |  | 
|  | Contributions to this project must be accompanied by a Contributor License | 
|  | Agreement. You (or your employer) retain the copyright to your contribution; | 
|  | this simply gives us permission to use and redistribute your contributions as | 
|  | part of the project. Head over to <https://cla.developers.google.com/> to see | 
|  | your current agreements on file or to sign a new one. | 
|  |  | 
|  | You generally only need to submit a CLA once, so if you've already submitted one | 
|  | (even if it was for a different project), you probably don't need to do it | 
|  | again. | 
|  |  | 
|  | [perfetto-gerrit]: https://android-review.googlesource.com/q/project:platform%252Fexternal%252Fperfetto+status:open | 
|  | [google-cpp-style]: https://google.github.io/styleguide/cppguide.html | 
|  | [depot-tools]: https://dev.chromium.org/developers/how-tos/depottools | 
|  | [ci-example]: https://android-review.googlesource.com/c/platform/external/perfetto/+/1108253/3#message-09fd27fb92ca8357abade3ec725919ac3445f3af |