xref: /aosp_15_r20/external/perfetto/docs/contributing/getting-started.md (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
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