1*c8dee2aaSAndroid Build Coastguard Worker--- 2*c8dee2aaSAndroid Build Coastguard Workertitle: 'Skia Gold' 3*c8dee2aaSAndroid Build Coastguard WorkerlinkTitle: 'Skia Gold' 4*c8dee2aaSAndroid Build Coastguard Worker--- 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Worker## Overview 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard WorkerGold is a web application that compares the images produced by our bots against 9*c8dee2aaSAndroid Build Coastguard Workerknown baseline images. 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard WorkerKey features: 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker- Baselines are managed in Gold outside of Git, but in lockstep with Git 14*c8dee2aaSAndroid Build Coastguard Worker commits. 15*c8dee2aaSAndroid Build Coastguard Worker- Each commit creates >500k images. 16*c8dee2aaSAndroid Build Coastguard Worker- Deviations from the baseline are triaged after a CL lands and images are 17*c8dee2aaSAndroid Build Coastguard Worker triaged as either `positive` or `negative`. 'Positive' means the diff is 18*c8dee2aaSAndroid Build Coastguard Worker considered acceptable. 'Negative' means the diff is considered unacceptable 19*c8dee2aaSAndroid Build Coastguard Worker and requires a fix. If a CL causes Skia to break it is reverted or an 20*c8dee2aaSAndroid Build Coastguard Worker additional CL is landed to fix the problem. 21*c8dee2aaSAndroid Build Coastguard Worker- We test across a range of dimensions, e.g.: 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker - OS (Windows, Linux, Mac, Android, iOS) 24*c8dee2aaSAndroid Build Coastguard Worker - Architectures (Intel, ARM) 25*c8dee2aaSAndroid Build Coastguard Worker - Backends (CPU, OpenGL, Vulkan etc.) 26*c8dee2aaSAndroid Build Coastguard Worker - etc. 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker- Written in Go, Polymer and deployed on the Google Cloud. The code is in the 29*c8dee2aaSAndroid Build Coastguard Worker [Skia Infra Repository](https://github.com/google/skia-buildbot). 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker## Recommended Workflows 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker### How to best use Gold for commonly faced problems 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard WorkerThese instructions will refer to various views which are accessible via the left 36*c8dee2aaSAndroid Build Coastguard Workernavigation on [gold.skia.org](https://gold.skia.org/). 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard WorkerView access is public, triage access is granted to Skia contributors. You must 39*c8dee2aaSAndroid Build Coastguard Workerbe logged in to triage. 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker## Problem #1: As Skia Gardener, I need to triage and “assign” many incoming new images. 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard WorkerSolution today: 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker- Access the By Blame view to see digests needing triage and associated 46*c8dee2aaSAndroid Build Coastguard Worker owners/CLs 47*c8dee2aaSAndroid Build Coastguard Worker - Only untriaged digests will be shown by default 48*c8dee2aaSAndroid Build Coastguard Worker - Blame is not sorted in any particular order 49*c8dee2aaSAndroid Build Coastguard Worker - Digests are clustered by runs and the most minimal set of blame 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker<img src=../BlameView.png style="margin-left:30px" align="left" width="800"/> 52*c8dee2aaSAndroid Build Coastguard Worker<br clear="left"> 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Worker- Select digests for triage 55*c8dee2aaSAndroid Build Coastguard Worker - Digests will be listed in order with largest difference first 56*c8dee2aaSAndroid Build Coastguard Worker - Click to open the digest view with detailed information 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker<img src=../Digests.png style="margin-left:40px" align="left" width="780"/> 59*c8dee2aaSAndroid Build Coastguard Worker<br clear="left"> 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker- Open bugs for identified owner(s) 62*c8dee2aaSAndroid Build Coastguard Worker - The digest detail view has a link to open a bug from the UI 63*c8dee2aaSAndroid Build Coastguard Worker - Via the Gold UI or when manually entering a bug, copy the full URL of single 64*c8dee2aaSAndroid Build Coastguard Worker digest into a bug report 65*c8dee2aaSAndroid Build Coastguard Worker - The URL reference to the digest in Issue Tracker will link the bug to the 66*c8dee2aaSAndroid Build Coastguard Worker digest in Gold 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Worker<img src="../IssueHighlight.png" style="margin-left:60px" align="left" width="720" border=1/> 69*c8dee2aaSAndroid Build Coastguard Worker<br clear="left"> 70*c8dee2aaSAndroid Build Coastguard Worker 71*c8dee2aaSAndroid Build Coastguard Worker<br> 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard WorkerFuture improvements: 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Worker- Smarter, more granular blamelist 76*c8dee2aaSAndroid Build Coastguard Worker 77*c8dee2aaSAndroid Build Coastguard Worker<br> 78*c8dee2aaSAndroid Build Coastguard Worker 79*c8dee2aaSAndroid Build Coastguard Worker## Problem #2: As a developer, I need to land a CL that may change many images. 80*c8dee2aaSAndroid Build Coastguard Worker 81*c8dee2aaSAndroid Build Coastguard WorkerTo find your results: 82*c8dee2aaSAndroid Build Coastguard Worker 83*c8dee2aaSAndroid Build Coastguard Worker- Immediately following commit, access the By Blame view to find untriaged 84*c8dee2aaSAndroid Build Coastguard Worker digest groupings associated with your ID 85*c8dee2aaSAndroid Build Coastguard Worker- Click on one of the clusters including your CL to triage 86*c8dee2aaSAndroid Build Coastguard Worker- Return to the By Blame view to walk through all untriaged digests involving 87*c8dee2aaSAndroid Build Coastguard Worker your change 88*c8dee2aaSAndroid Build Coastguard Worker- Note: It is not yet implemented in the UI but possible to filter the view by 89*c8dee2aaSAndroid Build Coastguard Worker CL. Delete hashes in the URL to only include the hash for your CL. 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard Worker<img src=../BlameView.png style="margin-left:30px" align="left" width="800"/> 92*c8dee2aaSAndroid Build Coastguard Worker<br clear="left"> 93*c8dee2aaSAndroid Build Coastguard Worker 94*c8dee2aaSAndroid Build Coastguard WorkerTo rebaseline images: 95*c8dee2aaSAndroid Build Coastguard Worker 96*c8dee2aaSAndroid Build Coastguard Worker- Access the Ignores view and create a new, short-interval (hours) ignore for 97*c8dee2aaSAndroid Build Coastguard Worker the most affected configuration(s) 98*c8dee2aaSAndroid Build Coastguard Worker 99*c8dee2aaSAndroid Build Coastguard Worker<img src=../Ignores.png style="margin-left:30px" align="left" width="800"/> 100*c8dee2aaSAndroid Build Coastguard Worker<br clear="left"> 101*c8dee2aaSAndroid Build Coastguard Worker 102*c8dee2aaSAndroid Build Coastguard Worker- Click on the Ignore to bring up a search view filtered by the affected 103*c8dee2aaSAndroid Build Coastguard Worker configuration(s) 104*c8dee2aaSAndroid Build Coastguard Worker- Mark untriaged images as positive (or negative if appropriate) 105*c8dee2aaSAndroid Build Coastguard Worker- Follow one of two options for handling former positives: 106*c8dee2aaSAndroid Build Coastguard Worker - Leave former positives as-is and let them fall off with time if there is low 107*c8dee2aaSAndroid Build Coastguard Worker risk of recurrence 108*c8dee2aaSAndroid Build Coastguard Worker - Mark former positives as negative if needed to verify the change moving 109*c8dee2aaSAndroid Build Coastguard Worker forward 110*c8dee2aaSAndroid Build Coastguard Worker 111*c8dee2aaSAndroid Build Coastguard WorkerFuture improvements: 112*c8dee2aaSAndroid Build Coastguard Worker 113*c8dee2aaSAndroid Build Coastguard Worker- Trybot support prior to commit, with view limited to your CL 114*c8dee2aaSAndroid Build Coastguard Worker- Pre-triage prior to commit that will persist when the CL lands 115*c8dee2aaSAndroid Build Coastguard Worker 116*c8dee2aaSAndroid Build Coastguard Worker<br> 117*c8dee2aaSAndroid Build Coastguard Worker 118*c8dee2aaSAndroid Build Coastguard Worker## Problem #3: As a developer or infrastructure engineer, I need to add a new or updated config. 119*c8dee2aaSAndroid Build Coastguard Worker 120*c8dee2aaSAndroid Build Coastguard Worker(ie: new bot, test mode, environment change) 121*c8dee2aaSAndroid Build Coastguard Worker 122*c8dee2aaSAndroid Build Coastguard WorkerSolution today: 123*c8dee2aaSAndroid Build Coastguard Worker 124*c8dee2aaSAndroid Build Coastguard Worker- Follow the process for rebaselining images: 125*c8dee2aaSAndroid Build Coastguard Worker - Wait for the bot/test/config to be committed and show up in the Gold UI 126*c8dee2aaSAndroid Build Coastguard Worker - Access the Ignores view and create a short-interval ignore for the 127*c8dee2aaSAndroid Build Coastguard Worker configuration(s) 128*c8dee2aaSAndroid Build Coastguard Worker - Triage the ignores for that config to identify positive images 129*c8dee2aaSAndroid Build Coastguard Worker - Delete the ignore 130*c8dee2aaSAndroid Build Coastguard Worker 131*c8dee2aaSAndroid Build Coastguard WorkerFuture improvements: 132*c8dee2aaSAndroid Build Coastguard Worker 133*c8dee2aaSAndroid Build Coastguard Worker- Introduction of a new or updated test can make use of try jobs and pre-triage. 134*c8dee2aaSAndroid Build Coastguard Worker- New configs may be able to use these features as well. 135*c8dee2aaSAndroid Build Coastguard Worker 136*c8dee2aaSAndroid Build Coastguard Worker<br> 137*c8dee2aaSAndroid Build Coastguard Worker 138*c8dee2aaSAndroid Build Coastguard Worker## Problem #4: As a developer, I need to analyze the details of a particular image digest. 139*c8dee2aaSAndroid Build Coastguard Worker 140*c8dee2aaSAndroid Build Coastguard WorkerSolution: 141*c8dee2aaSAndroid Build Coastguard Worker 142*c8dee2aaSAndroid Build Coastguard Worker- Access the By Test view 143*c8dee2aaSAndroid Build Coastguard Worker 144*c8dee2aaSAndroid Build Coastguard Worker<img src=../ByTest.png style="margin-left:30px" align="left" width="800"/> 145*c8dee2aaSAndroid Build Coastguard Worker<br clear="left"> 146*c8dee2aaSAndroid Build Coastguard Worker 147*c8dee2aaSAndroid Build Coastguard Worker- Click the magnifier to filter by configuration 148*c8dee2aaSAndroid Build Coastguard Worker- Access the Cluster view to see the distribution of digest results 149*c8dee2aaSAndroid Build Coastguard Worker - Use control-click to select and do a direct compare between data points 150*c8dee2aaSAndroid Build Coastguard Worker - Click on configurations under “parameters” to highlight data points and 151*c8dee2aaSAndroid Build Coastguard Worker compare 152*c8dee2aaSAndroid Build Coastguard Worker 153*c8dee2aaSAndroid Build Coastguard Worker<img src=../ClusterConfig.png style="margin-left:30px" align="left" width="800"/> 154*c8dee2aaSAndroid Build Coastguard Worker<br clear="left"> 155*c8dee2aaSAndroid Build Coastguard Worker 156*c8dee2aaSAndroid Build Coastguard Worker- Access the Grid view to see NxN diffs 157*c8dee2aaSAndroid Build Coastguard Worker 158*c8dee2aaSAndroid Build Coastguard Worker<img src=../Grid.png style="margin-left:30px" align="left" width="800"/> 159*c8dee2aaSAndroid Build Coastguard Worker<br clear="left"> 160*c8dee2aaSAndroid Build Coastguard Worker 161*c8dee2aaSAndroid Build Coastguard Worker- Access the Dot diagram to see history of commits for the trace 162*c8dee2aaSAndroid Build Coastguard Worker - Each dot represents a commit 163*c8dee2aaSAndroid Build Coastguard Worker - Each line represents a configuration 164*c8dee2aaSAndroid Build Coastguard Worker - Dot colors distinguish between digests 165*c8dee2aaSAndroid Build Coastguard Worker 166*c8dee2aaSAndroid Build Coastguard Worker<img src=../DotDiagram.png style="margin-left:30px" align="left" width="800"/> 167*c8dee2aaSAndroid Build Coastguard Worker<br clear="left"> 168*c8dee2aaSAndroid Build Coastguard Worker 169*c8dee2aaSAndroid Build Coastguard Worker<br> 170*c8dee2aaSAndroid Build Coastguard Worker 171*c8dee2aaSAndroid Build Coastguard WorkerFuture improvements: 172*c8dee2aaSAndroid Build Coastguard Worker 173*c8dee2aaSAndroid Build Coastguard Worker- Large diff display of image vs image 174*c8dee2aaSAndroid Build Coastguard Worker 175*c8dee2aaSAndroid Build Coastguard Worker<br> 176*c8dee2aaSAndroid Build Coastguard Worker 177*c8dee2aaSAndroid Build Coastguard Worker## Problem #5: As a developer, I need to find results for a particular configuration. 178*c8dee2aaSAndroid Build Coastguard Worker 179*c8dee2aaSAndroid Build Coastguard WorkerSolution: 180*c8dee2aaSAndroid Build Coastguard Worker 181*c8dee2aaSAndroid Build Coastguard Worker- Access the Search view 182*c8dee2aaSAndroid Build Coastguard Worker- Select any parameters desired to search across tests 183*c8dee2aaSAndroid Build Coastguard Worker 184*c8dee2aaSAndroid Build Coastguard Worker<img src=../Search.png style="margin-left:30px" align="left" width="800"/> 185*c8dee2aaSAndroid Build Coastguard Worker<br clear="left"> 186