xref: /aosp_15_r20/external/skia/site/docs/dev/testing/skiagold.md (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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