1*6dbdd20aSAndroid Build Coastguard Worker# Branching Perfetto for Chrome milestones 2*6dbdd20aSAndroid Build Coastguard Worker 3*6dbdd20aSAndroid Build Coastguard WorkerMerging a (set of) Perfetto change(s) to a Chrome milestone release requires 4*6dbdd20aSAndroid Build Coastguard Workercreation of a branch in the perfetto repo, cherry-picking of the change(s) to 5*6dbdd20aSAndroid Build Coastguard Workerthe branch, and updating the `DEPS` file in Chrome's milestone branch to point 6*6dbdd20aSAndroid Build Coastguard Workerto the new perfetto branch's head. 7*6dbdd20aSAndroid Build Coastguard Worker 8*6dbdd20aSAndroid Build Coastguard Worker## Creating the perfetto branch {#branch} 9*6dbdd20aSAndroid Build Coastguard Worker 10*6dbdd20aSAndroid Build Coastguard Worker1. Determine the branch name: **`chromium/XXXX`**, where `XXXX` is the branch 11*6dbdd20aSAndroid Build Coastguard Worker number of the milestone (see 12*6dbdd20aSAndroid Build Coastguard Worker [Chromium Dash](https://chromiumdash.appspot.com/branches)). Example for 13*6dbdd20aSAndroid Build Coastguard Worker M87: `chromium/4280`. 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard Worker1. Check if the branch already exists: if yes, skip to 16*6dbdd20aSAndroid Build Coastguard Worker [cherry-picking](#all-tables). To check, you can search for it in 17*6dbdd20aSAndroid Build Coastguard Worker [Gerrit's branch page](https://android-review.googlesource.com/admin/repos/platform/external/perfetto,branches). 18*6dbdd20aSAndroid Build Coastguard Worker 19*6dbdd20aSAndroid Build Coastguard Worker1. Look up the appropriate base revision for the branch. You should use the 20*6dbdd20aSAndroid Build Coastguard Worker revision that Chromium's `DEPS` of the milestone branch points to (search 21*6dbdd20aSAndroid Build Coastguard Worker for `perfetto` in the file). The `DEPS` file for branch XXXX is at: 22*6dbdd20aSAndroid Build Coastguard Worker 23*6dbdd20aSAndroid Build Coastguard Worker `https://chromium.googlesource.com/chromium/src.git/+/refs/branch-heads/XXXX/DEPS` 24*6dbdd20aSAndroid Build Coastguard Worker 25*6dbdd20aSAndroid Build Coastguard Worker Example for M87: 26*6dbdd20aSAndroid Build Coastguard Worker [`DEPS`](https://chromium.googlesource.com/chromium/src.git/+/refs/branch-heads/4280/DEPS) 27*6dbdd20aSAndroid Build Coastguard Worker (at time of writing) points to `f4cf78e052c9427d8b6c49faf39ddf2a2e236069`. 28*6dbdd20aSAndroid Build Coastguard Worker 29*6dbdd20aSAndroid Build Coastguard Worker1. Create the branch - the easiest way to do this is via 30*6dbdd20aSAndroid Build Coastguard Worker [Gerrit's branch page](https://android-review.googlesource.com/admin/repos/platform/external/perfetto,branches). 31*6dbdd20aSAndroid Build Coastguard Worker The `NEW BRANCH` button on the top right opens a wizard - fill in the branch 32*6dbdd20aSAndroid Build Coastguard Worker name and base revision determined above. If this fails with a permission 33*6dbdd20aSAndroid Build Coastguard Worker issue, contact the [Discord chat](https://discord.gg/35ShE3A) or 34*6dbdd20aSAndroid Build Coastguard Worker [perfetto-dev](https://groups.google.com/forum/#!forum/perfetto-dev) mailing 35*6dbdd20aSAndroid Build Coastguard Worker list. 36*6dbdd20aSAndroid Build Coastguard Worker 37*6dbdd20aSAndroid Build Coastguard Worker## Cherry-picking the change(s) {#cherry-pick} 38*6dbdd20aSAndroid Build Coastguard Worker 39*6dbdd20aSAndroid Build Coastguard Worker1. If there are no merge conflicts, cherry-picking via Gerrit will be easiest. 40*6dbdd20aSAndroid Build Coastguard Worker To attempt this, open your change in Gerrit and use the `Cherry pick` entry 41*6dbdd20aSAndroid Build Coastguard Worker in the overflow menu on the top right, providing the `chromium/XXXX` branch 42*6dbdd20aSAndroid Build Coastguard Worker name (see [above](#branch)). 43*6dbdd20aSAndroid Build Coastguard Worker 44*6dbdd20aSAndroid Build Coastguard Worker1. Otherwise, merge the patch locally into a branch tracking 45*6dbdd20aSAndroid Build Coastguard Worker `origin/chromium/XXXX` and upload a Gerrit change as usual: 46*6dbdd20aSAndroid Build Coastguard Worker 47*6dbdd20aSAndroid Build Coastguard Worker ``` 48*6dbdd20aSAndroid Build Coastguard Worker $ git fetch origin 49*6dbdd20aSAndroid Build Coastguard Worker $ git checkout -tb cpick origin/chromium/XXXX 50*6dbdd20aSAndroid Build Coastguard Worker $ git cherry-pick -x <commit hash> # Resolve conflicts manually. 51*6dbdd20aSAndroid Build Coastguard Worker $ tools/gen_all out/xxx # If necessary. 52*6dbdd20aSAndroid Build Coastguard Worker $ git cl upload # Remove "Change-Id:" lines from commit message. 53*6dbdd20aSAndroid Build Coastguard Worker ``` 54*6dbdd20aSAndroid Build Coastguard Worker 55*6dbdd20aSAndroid Build Coastguard Worker1. Send the patch for review and land it. Note the commit's revision hash. 56*6dbdd20aSAndroid Build Coastguard Worker 57*6dbdd20aSAndroid Build Coastguard Worker## Updating the DEPS file in Chromium 58*6dbdd20aSAndroid Build Coastguard Worker 59*6dbdd20aSAndroid Build Coastguard Worker1. Create, send for review, and land a Chromium patch that edits the top-level 60*6dbdd20aSAndroid Build Coastguard Worker `DEPS` file on the Chromium's milestone branch. You can also combine this 61*6dbdd20aSAndroid Build Coastguard Worker step with cherry-picks of any chromium changes. For details, see 62*6dbdd20aSAndroid Build Coastguard Worker [Chromium's docs](https://www.chromium.org/developers/how-tos/drover). It 63*6dbdd20aSAndroid Build Coastguard Worker amounts to: 64*6dbdd20aSAndroid Build Coastguard Worker 65*6dbdd20aSAndroid Build Coastguard Worker ``` 66*6dbdd20aSAndroid Build Coastguard Worker $ gclient sync --with_branch_heads 67*6dbdd20aSAndroid Build Coastguard Worker $ git fetch 68*6dbdd20aSAndroid Build Coastguard Worker $ git checkout -tb perfetto_uprev refs/remotes/branch-heads/XXXX 69*6dbdd20aSAndroid Build Coastguard Worker $ ... # Edit DEPS. 70*6dbdd20aSAndroid Build Coastguard Worker $ git cl upload 71*6dbdd20aSAndroid Build Coastguard Worker ``` 72