Correctness Testing
===================

Skia correctness testing is primarily served by a tool named DM.
This is a quickstart to building and running DM.

<!--?prettify lang=sh?-->

    python2 tools/git-sync-deps
    bin/gn gen out/Debug
    ninja -C out/Debug dm
    out/Debug/dm -v -w dm_output

When you run this, you may notice your CPU peg to 100% for a while, then taper
off to 1 or 2 active cores as the run finishes.  This is intentional.  DM is
very multithreaded, but some of the work, particularly GPU-backed work, is
still forced to run on a single thread.  You can use `--threads N` to limit DM to
N threads if you like.  This can sometimes be helpful on machines that have
relatively more CPU available than RAM.

As DM runs, you ought to see a giant spew of output that looks something like this.
~~~
Skipping nonrendering: Don't understand 'nonrendering'.
Skipping angle: Don't understand 'angle'.
Skipping nvprmsaa4: Could not create a surface.
492 srcs * 3 sinks + 382 tests == 1858 tasks

(  25MB  1857) 1.36ms   8888 image mandrill_132x132_12x12.astc-5-subsets
(  25MB  1856) 1.41ms   8888 image mandrill_132x132_6x6.astc-5-subsets
(  25MB  1855) 1.35ms   8888 image mandrill_132x130_6x5.astc-5-subsets
(  25MB  1854) 1.41ms   8888 image mandrill_132x130_12x10.astc-5-subsets
(  25MB  1853) 151µs    8888 image mandrill_130x132_10x6.astc-5-subsets
(  25MB  1852) 154µs    8888 image mandrill_130x130_5x5.astc-5-subsets
                                  ...
( 748MB     5) 9.43ms   unit test GLInterfaceValidation
( 748MB     4) 30.3ms   unit test HalfFloatTextureTest
( 748MB     3) 31.2ms   unit test FloatingPointTextureTest
( 748MB     2) 32.9ms   unit test DeferredCanvas_GPU
( 748MB     1) 49.4ms   unit test ClipCache
( 748MB     0) 37.2ms   unit test Blur
~~~
Do not panic.

As you become more familiar with DM, this spew may be a bit annoying. If you
remove -v from the command line, DM will spin its progress on a single line
rather than print a new line for each status update.

Don't worry about the "Skipping something: Here's why." lines at startup.  DM
supports many test configurations, which are not all appropriate for all
machines.  These lines are a sort of FYI, mostly in case DM can't run some
configuration you might be expecting it to run.

Don't worry about the "skps: Couldn't read skps." messages either, you won't
have those by default and can do without them. If you wish to test with them
too, you can download them separately.

The next line is an overview of the work DM is about to do.
~~~
492 srcs * 3 sinks + 382 tests == 1858 tasks
~~~

DM has found 382 unit tests (code linked in from tests/), and 492 other drawing
sources.  These drawing sources may be GM integration tests (code linked in
from gm/), image files (from `--images`, which defaults to "resources") or .skp
files (from `--skps`, which defaults to "skps").  You can control the types of
sources DM will use with `--src` (default, "tests gm image skp").

DM has found 3 usable ways to draw those 492 sources.  This is controlled by
`--config`. The defaults are operating system dependent. On Linux they are "8888 gl nonrendering".
DM has skipped nonrendering leaving two usable configs:
8888 and gl.  These two name different ways to draw using Skia:

  -    8888: draw using the software backend into a 32-bit RGBA bitmap
  -    gl:  draw using the OpenGL backend (Ganesh) into a 32-bit RGBA bitmap

Sometimes DM calls these configs, sometimes sinks.  Sorry.  There are many
possible configs but generally we pay most attention to 8888 and gl.

DM always tries to draw all sources into all sinks, which is why we multiply
492 by 3.  The unit tests don't really fit into this source-sink model, so they
stand alone.  A couple thousand tasks is pretty normal.  Let's look at the
status line for one of those tasks.
~~~
(  25MB  1857) 1.36ms   8888 image mandrill_132x132_12x12.astc-5-subsets
   [1]   [2]   [3]      [4]
~~~

This status line tells us several things.

  1. The maximum amount of memory DM had ever used was 25MB. Note this is a 
  high water mark, not the current memory usage.  This is mostly useful for us 
  to track on our buildbots, some of which run perilously close to the system 
  memory limit.

  2. The number of unfinished tasks, in this example there are 1857, either
  currently running or waiting to run.  We generally run one task per hardware
  thread available, so on a typical laptop there are probably 4 or 8 running at
  once.  Sometimes the counts appear to show up out of order, particularly at DM
  startup; it's harmless, and doesn't affect the correctness of the run.

  3. Next, we see this task took 1.36 milliseconds to run.  Generally, the 
  precision of this timer is around 1 microsecond.  The time is purely there for
  informational purposes, to make it easier for us to find slow tests.

  4. The configuration and name of the test we ran.  We drew the test
  "mandrill_132x132_12x12.astc-5-subsets", which is an "image" source, into an
  "8888" sink.

When DM finishes running, you should find a directory with file named `dm.json`,
and some nested directories filled with lots of images.
~~~
$ ls dm_output
8888    dm.json gl

$ find dm_output -name '*.png'
dm_output/8888/gm/3x3bitmaprect.png
dm_output/8888/gm/aaclip.png
dm_output/8888/gm/aarectmodes.png
dm_output/8888/gm/alphagradients.png
dm_output/8888/gm/arcofzorro.png
dm_output/8888/gm/arithmode.png
dm_output/8888/gm/astcbitmap.png
dm_output/8888/gm/bezier_conic_effects.png
dm_output/8888/gm/bezier_cubic_effects.png
dm_output/8888/gm/bezier_quad_effects.png
                ...
~~~

The directories are nested first by sink type (`--config`), then by source type (`--src`).
The image from the task we just looked at, "8888 image mandrill_132x132_12x12.astc-5-subsets",
can be found at `dm_output/8888/image/mandrill_132x132_12x12.astc-5-subsets.png`.

`dm.json` is used by our automated testing system, so you can ignore it if you
like.  It contains a listing of each test run and a checksum of the image
generated for that run.

### Detail <a name="digests"></a>
Boring technical detail: The checksum is not a checksum of the
.png file, but rather a checksum of the raw pixels used to create that .png.
That means it is possible for two different configurations to produce
the same exact .png, but have their checksums differ.

Unit tests don't generally output anything but a status update when they pass.
If a test fails, DM will print out its assertion failures, both at the time
they happen and then again all together after everything is done running.
These failures are also included in the `dm.json` file.

DM has a simple facility to compare against the results of a previous run:

<!--?prettify lang=sh?-->

    ninja -C out/Debug dm
    out/Debug/dm -w good

    # do some work

    ninja -C out/Debug dm
    out/Debug/dm -r good -w bad

When using `-r`, DM will display a failure for any test that didn't produce the
same image as the `good` run.

For anything fancier, I suggest using skdiff:

<!--?prettify lang=sh?-->

    ninja -C out/Debug dm
    out/Debug/dm -w good

    # do some work

    ninja -C out/Debug dm
    out/Debug/dm -w bad

    ninja -C out/Debug skdiff
    mkdir diff
    out/Debug/skdiff good bad diff

    # open diff/index.html in your web browser

That's the basics of DM.  DM supports many other modes and flags.  Here are a
few examples you might find handy.

<!--?prettify lang=sh?-->

    out/Debug/dm --help        # Print all flags, their defaults, and a brief explanation of each.
    out/Debug/dm --src tests   # Run only unit tests.
    out/Debug/dm --nocpu       # Test only GPU-backed work.
    out/Debug/dm --nogpu       # Test only CPU-backed work.
    out/Debug/dm --match blur  # Run only work with "blur" in its name.
    out/Debug/dm --dryRun      # Don't really do anything, just print out what we'd do.

