skia2/site/dev/testing/skiagold.md

174 lines
6.3 KiB
Markdown
Raw Normal View History

Skia Gold
=========
Overview
--------
Gold is a web application that compares the images produced by our bots against
known baseline images.
Key features:
* Baselines are managed in Gold outside of Git, but in lockstep with Git commits.
* Each commit creates >500k images.
* Deviations from the baseline are triaged after a CL lands and images are
triaged as either `positive` or `negative`. 'Positive' means the diff is
considered acceptable. 'Negative' means the diff is considered unacceptable
and requires a fix.
If a CL causes Skia to break it is reverted or an additional CL is landed to
fix the problem.
* We test across a range of dimensions, e.g.:
- OS (Windows, Linux, Mac, Android, iOS)
- Architectures (Intel, ARM)
- Backends (CPU, OpenGL, Vulkan etc.)
- etc.
* Written in Go, Polymer and deployed on the Google Cloud. The code
is in the [Skia Infra Repository](https://github.com/google/skia-buildbot).
Recommended Workflows
---------------------
### How to best use Gold for commonly faced problems ###
These instructions will refer to various views which are accessible via the left
navigation on [gold.skia.org](https://gold.skia.org/).
View access is public, triage access is granted to
Skia contributors. You must be logged in to triage.
Problem #1: As sheriff, I need to triage and “assign” many incoming new images.
-------------------------------------------------------------------------------
Solution today:
* Access the By Blame view to see digests needing triage and associated
owners/CLs
+ Only untriaged digests will be shown by default
+ Blame is not sorted in any particular order
+ Digests are clustered by runs and the most minimal set of blame
<img src=BlameView.png style="margin-left:30px" align="left" width="800"/> <br clear="left">
* Select digests for triage
+ Digests will be listed in order with largest difference first
+ Click to open the digest view with detailed information
<img src=Digests.png style="margin-left:40px" align="left" width="780"/> <br clear="left">
* Open bugs for identified owner(s)
+ The digest detail view has a link to open a bug from the UI
+ Via the Gold UI or when manually entering a bug, copy the full URL of
single digest into a bug report
+ The URL reference to the digest in Issue Tracker will link the bug to
the digest in Gold
<img src="IssueHighlight.png" style="margin-left:60px" align="left" width="720" border=1/> <br clear="left">
<br>
Future improvements:
* Smarter, more granular blamelist
<br>
Problem #2: As a developer, I need to land a CL that may change many images.
----------------------------------------------------------------------------
To find your results:
* Immediately following commit, access the By Blame view to find untriaged
digest groupings associated with your ID
* Click on one of the clusters including your CL to triage
* Return to the By Blame view to walk through all untriaged digests involving
your change
* Note: It is not yet implemented in the UI but possible to filter the view
by CL. Delete hashes in the URL to only include the hash for your CL.
<img src=BlameView.png style="margin-left:30px" align="left" width="800"/> <br clear="left">
To rebaseline images:
* Access the Ignores view and create a new, short-interval (hours) ignore for
the most affected configuration(s)
<img src=Ignores.png style="margin-left:30px" align="left" width="800"/> <br clear="left">
* Click on the Ignore to bring up a search view filtered by the affected
configuration(s)
* Mark untriaged images as positive (or negative if appropriate)
* Follow one of two options for handling former positives:
+ Leave former positives as-is and let them fall off with time if there is
low risk of recurrence
+ Mark former positives as negative if needed to verify the change moving
forward
Future improvements:
* Trybot support prior to commit, with view limited to your CL
* Pre-triage prior to commit that will persist when the CL lands
<br>
Problem #3: As a developer or infrastructure engineer, I need to add a new or updated config.
---------------------------------------------------------------------------------------------
(ie: new bot, test mode, environment change)
Solution today:
* Follow the process for rebaselining images:
+ Wait for the bot/test/config to be committed and show up in the Gold UI
+ Access the Ignores view and create a short-interval ignore for the
configuration(s)
+ Triage the ignores for that config to identify positive images
+ Delete the ignore
Future improvements:
* Introduction of a new or updated test can make use of try jobs and pre-triage.
* New configs may be able to use these features as well.
<br>
Problem #4: As a developer, I need to analyze the details of a particular image digest.
---------------------------------------------------------------------------------------
Solution:
* Access the By Test view
<img src=ByTest.png style="margin-left:30px" align="left" width="800"/> <br clear="left">
* Click the magnifier to filter by configuration
* Access the Cluster view to see the distribution of digest results
+ Use control-click to select and do a direct compare between data points
+ Click on configurations under “parameters” to highlight data points and
compare
<img src=ClusterConfig.png style="margin-left:30px" align="left" width="800"/> <br clear="left">
* Access the Grid view to see NxN diffs
<img src=Grid.png style="margin-left:30px" align="left" width="800"/> <br clear="left">
* Access the Dot diagram to see history of commits for the trace
+ Each dot represents a commit
+ Each line represents a configuration
+ Dot colors distinguish between digests
<img src=DotDiagram.png style="margin-left:30px" align="left" width="800"/> <br clear="left">
<br>
Future improvements:
* Large diff display of image vs image
<br>
Problem #5: As a developer, I need to find results for a particular configuration.
----------------------------------------------------------------------------------
Solution:
* Access the Search view
* Select any parameters desired to search across tests
<img src=Search.png style="margin-left:30px" align="left" width="800"/> <br clear="left">