EdgeWalker_TestUtility.cpp revision 752b60e633a349c5b9f7bcc6a28b8064fc77bb41
1cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com#include "EdgeWalker_Test.h" 2cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com#include "Intersection_Tests.h" 3cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com#include "SkBitmap.h" 4cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com#include "SkCanvas.h" 5cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com#include "SkPaint.h" 6cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com 72e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic bool gShowPath = false; 8752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.comstatic bool gComparePaths = false; 9752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.comstatic bool gDrawLastAsciiPaths = true; 10cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic bool gDrawAllAsciiPaths = false; 112e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comstatic bool gShowAsciiPaths = false; 12752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.comstatic bool gComparePathsAssert = true; 13cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com 142e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.comvoid showPath(const SkPath& path, const char* str) { 15752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com SkDebugf("%s\n", !str ? "original:" : str); 16cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkPath::Iter iter(path, true); 17cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com uint8_t verb; 18cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkPoint pts[4]; 19cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { 20cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com switch (verb) { 21cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com case SkPath::kMove_Verb: 222e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com SkDebugf("path.moveTo(%3.6g, %3.6g);\n", pts[0].fX, pts[0].fY); 23cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com continue; 24cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com case SkPath::kLine_Verb: 252e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com SkDebugf("path.lineTo(%3.6g, %3.6g);\n", pts[1].fX, pts[1].fY); 26cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com break; 27cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com case SkPath::kQuad_Verb: 282e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com SkDebugf("path.quadTo(%3.6g, %3.6g, %3.6g, %3.6g);\n", 29cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY); 30cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com break; 31cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com case SkPath::kCubic_Verb: 322e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com SkDebugf("path.cubicTo(%3.6g, %3.6g, %3.6g, %3.6g);\n", 33cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, 34cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com pts[3].fX, pts[3].fY); 35cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com break; 36cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com case SkPath::kClose_Verb: 37cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkDebugf("path.close();\n"); 38cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com continue; 39cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com default: 40cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkDEBUGFAIL("bad verb"); 41cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com return; 42cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 43cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 44cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com} 45cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com 46cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic bool pathsDrawTheSame(const SkPath& one, const SkPath& two) { 47cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com const SkRect& bounds1 = one.getBounds(); 48cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com const SkRect& bounds2 = two.getBounds(); 49cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkRect larger = bounds1; 50cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com larger.join(bounds2); 51cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkBitmap bits; 52cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com int bitWidth = SkScalarCeil(larger.width()) + 2; 53cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com int bitHeight = SkScalarCeil(larger.height()) + 2; 54cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com bits.setConfig(SkBitmap::kARGB_8888_Config, bitWidth * 2, bitHeight); 55cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com bits.allocPixels(); 56cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkCanvas canvas(bits); 57cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.drawColor(SK_ColorWHITE); 58cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkPaint paint; 59cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.save(); 60cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.translate(-bounds1.fLeft + 1, -bounds1.fTop + 1); 61cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.drawPath(one, paint); 62cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.restore(); 63cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.save(); 64cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.translate(-bounds1.fLeft + 1 + bitWidth, -bounds1.fTop + 1); 65cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.drawPath(two, paint); 66cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.restore(); 67cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com for (int y = 0; y < bitHeight; ++y) { 68cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com uint32_t* addr1 = bits.getAddr32(0, y); 69cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com uint32_t* addr2 = bits.getAddr32(bitWidth, y); 70cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com for (int x = 0; x < bitWidth; ++x) { 71cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com if (addr1[x] != addr2[x]) { 72cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com return false; 73cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com break; 74cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 75cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 76cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 77cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com return true; 78cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com} 79cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com 80752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.combool drawAsciiPaths(const SkPath& one, const SkPath& two, 81cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com bool drawPaths) { 82cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com if (!drawPaths) { 83752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com return true; 84cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 852e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com if (gShowAsciiPaths) { 862e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com showPath(one, "one:"); 872e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com showPath(two, "two:"); 88cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 89cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com const SkRect& bounds1 = one.getBounds(); 90cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com const SkRect& bounds2 = two.getBounds(); 91cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkRect larger = bounds1; 92cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com larger.join(bounds2); 93cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkBitmap bits; 94752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com char out[256]; 95cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com int bitWidth = SkScalarCeil(larger.width()) + 2; 96752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com if (bitWidth * 2 + 1 >= (int) sizeof(out)) { 97752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com return false; 98752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com } 99cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com int bitHeight = SkScalarCeil(larger.height()) + 2; 100752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com if (bitHeight >= (int) sizeof(out)) { 101752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com return false; 102752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com } 103cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com bits.setConfig(SkBitmap::kARGB_8888_Config, bitWidth * 2, bitHeight); 104cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com bits.allocPixels(); 105cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkCanvas canvas(bits); 106cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.drawColor(SK_ColorWHITE); 107cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkPaint paint; 108cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.save(); 109cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.translate(-bounds1.fLeft + 1, -bounds1.fTop + 1); 110cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.drawPath(one, paint); 111cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.restore(); 112cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.save(); 113cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.translate(-bounds2.fLeft + 1 + bitWidth, -bounds2.fTop + 1); 114cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.drawPath(two, paint); 115cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.restore(); 116cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com for (int y = 0; y < bitHeight; ++y) { 117cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com uint32_t* addr1 = bits.getAddr32(0, y); 118cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com int x; 119cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com char* outPtr = out; 120cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com for (x = 0; x < bitWidth; ++x) { 121cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com *outPtr++ = addr1[x] == (uint32_t) -1 ? '_' : 'x'; 122cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 123cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com *outPtr++ = '|'; 124cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com for (x = bitWidth; x < bitWidth * 2; ++x) { 125cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com *outPtr++ = addr1[x] == (uint32_t) -1 ? '_' : 'x'; 126cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 127cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com *outPtr++ = '\0'; 128cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkDebugf("%s\n", out); 129cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 130752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com return true; 131cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com} 132cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com 133cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comstatic bool scaledDrawTheSame(const SkPath& one, const SkPath& two, 134cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com int a, int b, bool drawPaths) { 135cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkMatrix scale; 136cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com scale.reset(); 137752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com float aScale = 1.21f; 138752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com float bScale = 1.11f; 139752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com scale.preScale(a * aScale, b * bScale); 140cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkPath scaledOne, scaledTwo; 141cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com one.transform(scale, &scaledOne); 142cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com two.transform(scale, &scaledTwo); 143cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com if (pathsDrawTheSame(scaledOne, scaledTwo)) { 144cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com return true; 145cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 146752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com while (!drawAsciiPaths(scaledOne, scaledTwo, drawPaths)) { 147752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com scale.reset(); 148752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com aScale *= 0.5f; 149752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com bScale *= 0.5f; 150752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com scale.preScale(a * aScale, b * bScale); 151752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com one.transform(scale, &scaledOne); 152752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com two.transform(scale, &scaledTwo); 153752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com } 154cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com return false; 155cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com} 156cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com 1572e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.combool comparePaths(const SkPath& one, const SkPath& two) { 158cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com if (pathsDrawTheSame(one, two)) { 1592e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com return true; 160cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 161cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com drawAsciiPaths(one, two, gDrawAllAsciiPaths); 162cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com for (int x = 9; x <= 33; ++x) { 163cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com if (scaledDrawTheSame(one, two, x, x - (x >> 2), gDrawAllAsciiPaths)) { 1642e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com return true; 165cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 166cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 167cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com if (!gDrawAllAsciiPaths) { 168cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com scaledDrawTheSame(one, two, 9, 7, gDrawLastAsciiPaths); 169cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 1702e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com if (gComparePathsAssert) { 1712e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com showPath(one); 1722e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com showPath(two, "simplified:"); 1732e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com SkASSERT(0); 1742e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com } 1752e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com return false; 176cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com} 177cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com 178cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com// doesn't work yet 179cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.comvoid comparePathsTiny(const SkPath& one, const SkPath& two) { 180cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com const SkRect& bounds1 = one.getBounds(); 181cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com const SkRect& bounds2 = two.getBounds(); 182cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkRect larger = bounds1; 183cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com larger.join(bounds2); 184cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkBitmap bits; 185cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com int bitWidth = SkScalarCeil(larger.width()) + 2; 186cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com int bitHeight = SkScalarCeil(larger.height()) + 2; 187cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com bits.setConfig(SkBitmap::kA1_Config, bitWidth * 2, bitHeight); 188cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com bits.allocPixels(); 189cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkCanvas canvas(bits); 190cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.drawColor(SK_ColorWHITE); 191cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkPaint paint; 192cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.save(); 193cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.translate(-bounds1.fLeft + 1, -bounds1.fTop + 1); 194cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.drawPath(one, paint); 195cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.restore(); 196cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.save(); 197cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.translate(-bounds2.fLeft + 1, -bounds2.fTop + 1); 198cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.drawPath(two, paint); 199cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com canvas.restore(); 200cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com for (int y = 0; y < bitHeight; ++y) { 201cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com uint8_t* addr1 = bits.getAddr1(0, y); 202cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com uint8_t* addr2 = bits.getAddr1(bitWidth, y); 203cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com for (int x = 0; x < bits.rowBytes(); ++x) { 204cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com SkASSERT(addr1[x] == addr2[x]); 205cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 206cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com } 207cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com} 208cd4421df5012b75c792c6c8bf2c5ee0410921c15caryclark@google.com 2092e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.combool testSimplify(const SkPath& path, bool fill, SkPath& out) { 2102e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com if (gShowPath) { 2112e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com showPath(path); 2122e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com } 2132e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com simplify(path, fill, out); 214752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com if (!gComparePaths) { 215752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com return true; 216752b60e633a349c5b9f7bcc6a28b8064fc77bb41caryclark@google.com } 2172e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com return comparePaths(path, out); 2182e7f4c810dc717383df42d27bdba862514ab6d51caryclark@google.com} 219