Fix gradient background sizing

This is a hard-to-fix situation. We size generated background images
according to the tile size, which is a snapped rectangle sized according
to the destination values, in general. But then we compute a src rect
for image drawing using the unsnapped values, because that is best for
bitmap images where we want to pull out the most accurate src rect
possible. However, that source rect ends up larger than the tile size
due to rounding without the original offset in the layer (because now
we are working in image space).

The gradient painting code then sees that it has a src rect that is
larger than the tile size and hence the gradient image size. The code
thinks that we want to have some more pixels than the gradient
provides, which is true in some cases, and scales things to get those
extra pixels in the painted output. Hence empty pixels on the screen
when we really want the gradient to be filling the dest rect.

Changing the gradient painting code will break valid use cases. Changing
the tile size breaks things in a different way and doesn't really fix
the problem. So change the src rect computation to use snapped sizes
for generated content in an attempt to get a src that matches the tile
size.

R=fmalita@chromium.org

Bug: 898950
Change-Id: I100575ad4f4fa3004fbc232a72c90b0032ccef4e
Reviewed-on: https://chromium-review.googlesource.com/c/1376814
Commit-Queue: Stephen Chenney <schenney@chromium.org>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Cr-Commit-Position: refs/heads/master@{#616944}
9 files changed