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