Index: tests/CanvasTest.cpp |
diff --git a/tests/CanvasTest.cpp b/tests/CanvasTest.cpp |
index 1f217e21ca076dd76ee0e82fef74efa29a33b0a5..70c2c04ffabf511239239fe8fe3cf91ab78582af 100644 |
--- a/tests/CanvasTest.cpp |
+++ b/tests/CanvasTest.cpp |
@@ -18,6 +18,7 @@ |
* function of the form: |
* |
* static void MyTestStepFunction(SkCanvas* canvas, |
+ * const TestData& d, |
* skiatest::Reporter* reporter, |
* CanvasTestStep* testStep) |
* { |
@@ -498,6 +499,45 @@ static void NestedSaveRestoreWithFlushTestStep(SkCanvas* canvas, const TestData& |
} |
TEST_STEP(NestedSaveRestoreWithFlush, NestedSaveRestoreWithFlushTestStep); |
+static void DescribeTopLayerTestStep(SkCanvas* canvas, |
+ const TestData& d, |
+ skiatest::Reporter* reporter, |
+ CanvasTestStep* testStep) { |
+ SkMatrix m; |
+ SkIRect r; |
+ // NOTE: adjustToTopLayer() does *not* reduce the clip size, even if the canvas |
+ // is smaller than 10x10! |
+ |
+ canvas->temporary_internal_describeTopLayer(&m, &r); |
+ REPORTER_ASSERT_MESSAGE(reporter, m.isIdentity(), testStep->assertMessage()); |
+ REPORTER_ASSERT_MESSAGE(reporter, r == SkIRect::MakeXYWH(0, 0, 2, 2), |
+ testStep->assertMessage()); |
+ |
+ // Putting a full-canvas layer on it should make no change to the results. |
+ SkRect layerBounds = SkRect::MakeXYWH(0.f, 0.f, 10.f, 10.f); |
+ canvas->saveLayer(layerBounds, nullptr); |
+ canvas->temporary_internal_describeTopLayer(&m, &r); |
+ REPORTER_ASSERT_MESSAGE(reporter, m.isIdentity(), testStep->assertMessage()); |
+ REPORTER_ASSERT_MESSAGE(reporter, r == SkIRect::MakeXYWH(0, 0, 2, 2), |
+ testStep->assertMessage()); |
+ canvas->restore(); |
+ |
+ // Adding a translated layer translates the results. |
+ // Default canvas is only 2x2, so can't offset our layer by very much at all; |
+ // saveLayer() aborts if the bounds don't intersect. |
+ layerBounds = SkRect::MakeXYWH(1.f, 1.f, 6.f, 6.f); |
+ canvas->saveLayer(layerBounds, nullptr); |
+ canvas->temporary_internal_describeTopLayer(&m, &r); |
+ REPORTER_ASSERT_MESSAGE(reporter, m == SkMatrix::MakeTrans(-1.f, -1.f), |
+ testStep->assertMessage()); |
+ REPORTER_ASSERT_MESSAGE(reporter, r == SkIRect::MakeXYWH(0, 0, 1, 1), |
+ testStep->assertMessage()); |
+ canvas->restore(); |
+ |
+} |
+TEST_STEP(DescribeTopLayer, DescribeTopLayerTestStep); |
+ |
+ |
class CanvasTestingAccess { |
public: |
static bool SameState(const SkCanvas* canvas1, const SkCanvas* canvas2) { |