When restoring a saveLayer, SkBitmapDevice::drawSpecial is used
to composite layer contents onto the parent layer. The parent layer's
backing pixmap was not being notified that its content was modified.
In some circumstances Chromium's 2D canvas implementation uses a
saveLayer internally for applying certain compositing operations.
Because the draw op was not causing a bump in gen ID, we were getting
key collisions inside cc::PaintOpBuffer's image cache. This was causing
the wrong version of the content of a canvas to be used in a
canavas-to-canvas drawImage calls where the source canvas is software
rendered and the destination canvas uses gpu-accelerated or
out-of-process rasterization.
BUG=chromium:1281185
Change-Id: I3aacae27e3cc1c68d130b782aa99517ffee890a2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/501237
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: Justin Novosad <junov@chromium.org>
Commit-Queue: Robert Phillips <robertphillips@google.com>