Added the framework for having canvas/recorder/picture record depth_set's.
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2127233002

Committed: https://skia.googlesource.com/skia/+/6d3fb898d5f73a82e36f11c712a633c3921ed518
Committed: https://skia.googlesource.com/skia/+/1185d90c785f743364cc9113d7007a59af07470c
Review-Url: https://codereview.chromium.org/2127233002
diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp
index 82e065f..1e5f9e1 100644
--- a/tests/CanvasTest.cpp
+++ b/tests/CanvasTest.cpp
@@ -779,6 +779,45 @@
     canvas.restore();
 }
 
+#define SHADOW_TEST_CANVAS_CONST 10
+
+class SkShadowTestCanvas : public SkPaintFilterCanvas {
+public:
+
+    SkShadowTestCanvas(int x, int y, skiatest::Reporter* reporter)
+        : INHERITED(x,y)
+        , fReporter(reporter) {}
+
+    bool onFilter(SkTCopyOnFirstWrite<SkPaint>* paint, Type type) const {
+        REPORTER_ASSERT(this->fReporter, this->getZ() == SHADOW_TEST_CANVAS_CONST);
+
+        return true;
+    }
+
+    void testUpdateDepth(skiatest::Reporter *reporter) {
+        // set some depths (with picture enabled), then check them as they get set
+
+        REPORTER_ASSERT(reporter, this->getZ() == 0);
+        this->translateZ(-10);
+        REPORTER_ASSERT(reporter, this->getZ() == -10);
+
+        this->save();
+        this->translateZ(20);
+        REPORTER_ASSERT(reporter, this->getZ() == 10);
+
+        this->restore();
+        REPORTER_ASSERT(reporter, this->getZ() == -10);
+
+        this->translateZ(13.14f);
+        REPORTER_ASSERT(reporter, SkScalarNearlyEqual(this->getZ(), 3.14f));
+    }
+
+private:
+    skiatest::Reporter* fReporter;
+
+    typedef SkPaintFilterCanvas INHERITED;
+};
+
 namespace {
 
 class MockFilterCanvas : public SkPaintFilterCanvas {
@@ -812,6 +851,20 @@
     REPORTER_ASSERT(reporter, canvas.getTotalMatrix() == filterCanvas.getTotalMatrix());
     REPORTER_ASSERT(reporter, canvas.getClipBounds(&clip1) == filterCanvas.getClipBounds(&clip2));
     REPORTER_ASSERT(reporter, clip1 == clip2);
+
+    SkShadowTestCanvas* tCanvas = new SkShadowTestCanvas(100,100, reporter);
+    tCanvas->testUpdateDepth(reporter);
+    delete(tCanvas);
+
+    SkPictureRecorder recorder;
+    SkShadowTestCanvas *tSCanvas = new SkShadowTestCanvas(100, 100, reporter);
+    SkCanvas *tPCanvas = recorder.beginRecording(SkRect::MakeIWH(100, 100));
+
+    tPCanvas->translateZ(SHADOW_TEST_CANVAS_CONST);
+    sk_sp<SkPicture> pic = recorder.finishRecordingAsPicture();
+    tSCanvas->drawPicture(pic);
+
+    delete(tSCanvas);
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////