tesselating path renderer unit tests
authorjoshualitt <joshualitt@chromium.org>
Thu, 7 May 2015 20:06:41 +0000 (13:06 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 7 May 2015 20:06:42 +0000 (13:06 -0700)
BUG=skia:

Review URL: https://codereview.chromium.org/1127183006

include/gpu/GrTestUtils.h
src/gpu/GrTessellatingPathRenderer.cpp
src/gpu/GrTestUtils.cpp

index a98548bb2f9a9014f5b8807492d6d5702aa33eb0..2109ad657b97d310f5a204c548450265a93634a7 100644 (file)
@@ -27,6 +27,7 @@ namespace GrTest {
 const SkMatrix& TestMatrix(SkRandom*);
 const SkMatrix& TestMatrixPreservesRightAngles(SkRandom*);
 const SkMatrix& TestMatrixRectStaysRect(SkRandom*);
+const SkMatrix& TestMatrixInvertible(SkRandom*);
 const SkRect& TestRect(SkRandom*);
 const SkRRect& TestRRectSimple(SkRandom*);
 const SkPath& TestPath(SkRandom*);
index 24d4068cdb59d33556e2b3828344ed9ff2325c3d..e2707a9df31f761fef15e884b495bdf1c96b7e4e 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "GrBatch.h"
 #include "GrBatchTarget.h"
+#include "GrBatchTest.h"
 #include "GrDefaultGeoProcFactory.h"
 #include "GrPathUtils.h"
 #include "GrVertices.h"
@@ -1514,3 +1515,23 @@ bool GrTessellatingPathRenderer::onDrawPath(GrDrawTarget* target,
 
     return true;
 }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#ifdef GR_TEST_UTILS
+
+BATCH_TEST_DEFINE(TesselatingPathRenderer) {
+    GrColor color = GrRandomColor(random);
+    SkMatrix viewMatrix = GrTest::TestMatrixInvertible(random);
+    SkPath path = GrTest::TestPath(random);
+    SkRect clipBounds = GrTest::TestRect(random);
+    SkMatrix vmi;
+    bool result = viewMatrix.invert(&vmi);
+    if (!result) {
+        SkFAIL("Cannot invert matrix\n");
+    }
+    vmi.mapRect(&clipBounds);
+    return TessellatingPathBatch::Create(color, path, viewMatrix, clipBounds);
+}
+
+#endif
index 163fb56389ef1f6c308adc794d97bf8c6e41a7a3..0bb4044eaaf1299a1ecb99e74c270b4397b7b9d2 100644 (file)
@@ -12,9 +12,9 @@
 
 #ifdef GR_TEST_UTILS
 
-namespace GrTest {
-const SkMatrix& TestMatrix(SkRandom* random) {
+static const SkMatrix& test_matrix(SkRandom* random, bool includePerspective) {
     static SkMatrix gMatrices[5];
+    static const int kPerspectiveCount = 1;
     static bool gOnce;
     if (!gOnce) {
         gOnce = true;
@@ -24,13 +24,24 @@ const SkMatrix& TestMatrix(SkRandom* random) {
         gMatrices[3].setRotate(SkIntToScalar(185));
         gMatrices[3].postTranslate(SkIntToScalar(66), SkIntToScalar(-33));
         gMatrices[3].postScale(SkIntToScalar(2), SK_ScalarHalf);
+
+        // Perspective matrices
         gMatrices[4].setRotate(SkIntToScalar(215));
         gMatrices[4].set(SkMatrix::kMPersp0, 0.00013f);
         gMatrices[4].set(SkMatrix::kMPersp1, -0.000039f);
     }
-    return gMatrices[random->nextULessThan(static_cast<uint32_t>(SK_ARRAY_COUNT(gMatrices)))];
+
+    uint32_t count = static_cast<uint32_t>(SK_ARRAY_COUNT(gMatrices));
+    if (includePerspective) {
+        return gMatrices[random->nextULessThan(count)];
+    } else {
+        return gMatrices[random->nextULessThan(count - kPerspectiveCount)];
+    }
 }
 
+namespace GrTest {
+const SkMatrix& TestMatrix(SkRandom* random) { return test_matrix(random, true); }
+
 const SkMatrix& TestMatrixPreservesRightAngles(SkRandom* random) {
     static SkMatrix gMatrices[5];
     static bool gOnce;
@@ -83,6 +94,8 @@ const SkMatrix& TestMatrixRectStaysRect(SkRandom* random) {
     return gMatrices[random->nextULessThan(static_cast<uint32_t>(SK_ARRAY_COUNT(gMatrices)))];
 }
 
+const SkMatrix& TestMatrixInvertible(SkRandom* random) { return test_matrix(random, false); }
+
 const SkRect& TestRect(SkRandom* random) {
     static SkRect gRects[7];
     static bool gOnce;