Fixes for saveBehind/drawBehind

- fixes bug in device restore (was passing the wrong matrix)
- use drawbehind for the clear, to avoid rounding differences between canvas and gpu

Change-Id: I9c130e38437d8d34242620750f11a6ae7e62ff97
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/209801
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Derek Sollenberger <djsollen@google.com>
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index a0c956b..fdc7d59 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1141,11 +1141,7 @@
 
     SkPaint paint;
     paint.setBlendMode(SkBlendMode::kClear);
-    if (localBounds) {
-        this->drawRect(*localBounds, paint);
-    } else {
-        this->drawPaint(paint);
-    }
+    this->drawClippedToSaveBehind(paint);
 }
 
 void SkCanvas::internalRestore() {
@@ -2146,7 +2142,6 @@
     while (iter.next()) {
         SkBaseDevice* dev = iter.fDevice;
 
-        SkMatrix ctm = dev->ctm();
         dev->save();
         // We use clipRegion because it is already defined to operate in dev-space
         // (i.e. ignores the ctm). However, it is going to first translate by -origin,
@@ -2154,7 +2149,7 @@
         SkRegion rgn(bounds.makeOffset(dev->fOrigin.fX, dev->fOrigin.fY));
         dev->clipRegion(rgn, SkClipOp::kIntersect);
         dev->drawPaint(looper.paint());
-        dev->restore(ctm);
+        dev->restore(fMCRec->fMatrix);
     }
 
     LOOPER_END