Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: src/pathops/SkPathOpsOp.cpp

Issue 2441763003: formalize host debugging (Closed)
Patch Set: merge with ToT Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/pathops/SkPathOpsDebug.cpp ('k') | src/pathops/SkPathOpsSimplify.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/pathops/SkPathOpsOp.cpp
diff --git a/src/pathops/SkPathOpsOp.cpp b/src/pathops/SkPathOpsOp.cpp
index e622451a92534c27a4ad59693b166a1e9a370d3f..f423ba9123b8f5a80f05bed23754a5008585723c 100644
--- a/src/pathops/SkPathOpsOp.cpp
+++ b/src/pathops/SkPathOpsOp.cpp
@@ -198,44 +198,6 @@ static const bool gOutInverse[kReverseDifference_SkPathOp + 1][2][2] = {
{{ false, true }, { false, false }}, // rev diff
};
-#define DEBUGGING_PATHOPS_FROM_HOST 0 // enable to debug svg in chrome -- note path hardcoded below
-#if DEBUGGING_PATHOPS_FROM_HOST
-#include "SkData.h"
-#include "SkStream.h"
-
-static void dump_path(FILE* file, const SkPath& path, bool force, bool dumpAsHex) {
- SkDynamicMemoryWStream wStream;
- path.dump(&wStream, force, dumpAsHex);
- sk_sp<SkData> data(wStream.detachAsData());
- fprintf(file, "%.*s\n", (int) data->size(), (char*) data->data());
-}
-
-static int dumpID = 0;
-
-static void dump_op(const SkPath& one, const SkPath& two, SkPathOp op) {
-#if SK_BUILD_FOR_MAC
- FILE* file = fopen("/Users/caryclark/Documents/svgop.txt", "w");
-#else
- FILE* file = fopen("/usr/local/google/home/caryclark/Documents/svgop.txt", "w");
-#endif
- fprintf(file,
- "\nstatic void fuzz763_%d(skiatest::Reporter* reporter, const char* filename) {\n",
- ++dumpID);
- fprintf(file, " SkPath path;\n");
- fprintf(file, " path.setFillType((SkPath::FillType) %d);\n", one.getFillType());
- dump_path(file, one, false, true);
- fprintf(file, " SkPath path1(path);\n");
- fprintf(file, " path.reset();\n");
- fprintf(file, " path.setFillType((SkPath::FillType) %d);\n", two.getFillType());
- dump_path(file, two, false, true);
- fprintf(file, " SkPath path2(path);\n");
- fprintf(file, " testPathOp(reporter, path1, path2, (SkPathOp) %d, filename);\n", op);
- fprintf(file, "}\n");
- fclose(file);
-}
-#endif
-
-
#if DEBUG_T_SECT_LOOP_COUNT
#include "SkMutex.h"
@@ -261,8 +223,10 @@ bool OpDebug(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result
SkOpGlobalState globalState(contourList, &allocator
SkDEBUGPARAMS(skipAssert) SkDEBUGPARAMS(testName));
SkOpCoincidence coincidence(&globalState);
-#if DEBUGGING_PATHOPS_FROM_HOST
- dump_op(one, two, op);
+#ifdef SK_DEBUG
+ if (SkPathOpsDebug::gDumpOp) {
+ SkPathOpsDebug::DumpOp(one, two, op, testName);
+ }
#endif
op = gOpInverse[op][one.isInverseFillType()][two.isInverseFillType()];
SkPath::FillType fillType = gOutInverse[op][one.isInverseFillType()][two.isInverseFillType()]
@@ -351,122 +315,16 @@ bool OpDebug(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result
return true;
}
-#define DEBUG_VERIFY 0
-
-#if DEBUG_VERIFY
-#include "SkBitmap.h"
-#include "SkCanvas.h"
-#include "SkPaint.h"
-
-const int bitWidth = 64;
-const int bitHeight = 64;
-
-static void debug_scale_matrix(const SkPath& one, const SkPath& two, SkMatrix& scale) {
- SkRect larger = one.getBounds();
- larger.join(two.getBounds());
- SkScalar largerWidth = larger.width();
- if (largerWidth < 4) {
- largerWidth = 4;
- }
- SkScalar largerHeight = larger.height();
- if (largerHeight < 4) {
- largerHeight = 4;
- }
- SkScalar hScale = (bitWidth - 2) / largerWidth;
- SkScalar vScale = (bitHeight - 2) / largerHeight;
- scale.reset();
- scale.preScale(hScale, vScale);
- larger.fLeft *= hScale;
- larger.fRight *= hScale;
- larger.fTop *= vScale;
- larger.fBottom *= vScale;
- SkScalar dx = -16000 > larger.fLeft ? -16000 - larger.fLeft
- : 16000 < larger.fRight ? 16000 - larger.fRight : 0;
- SkScalar dy = -16000 > larger.fTop ? -16000 - larger.fTop
- : 16000 < larger.fBottom ? 16000 - larger.fBottom : 0;
- scale.preTranslate(dx, dy);
-}
-
-static int debug_paths_draw_the_same(const SkPath& one, const SkPath& two, SkBitmap& bits) {
- if (bits.width() == 0) {
- bits.allocN32Pixels(bitWidth * 2, bitHeight);
- }
- SkCanvas canvas(bits);
- canvas.drawColor(SK_ColorWHITE);
- SkPaint paint;
- canvas.save();
- const SkRect& bounds1 = one.getBounds();
- canvas.translate(-bounds1.fLeft + 1, -bounds1.fTop + 1);
- canvas.drawPath(one, paint);
- canvas.restore();
- canvas.save();
- canvas.translate(-bounds1.fLeft + 1 + bitWidth, -bounds1.fTop + 1);
- canvas.drawPath(two, paint);
- canvas.restore();
- int errors = 0;
- for (int y = 0; y < bitHeight - 1; ++y) {
- uint32_t* addr1 = bits.getAddr32(0, y);
- uint32_t* addr2 = bits.getAddr32(0, y + 1);
- uint32_t* addr3 = bits.getAddr32(bitWidth, y);
- uint32_t* addr4 = bits.getAddr32(bitWidth, y + 1);
- for (int x = 0; x < bitWidth - 1; ++x) {
- // count 2x2 blocks
- bool err = addr1[x] != addr3[x];
- if (err) {
- errors += addr1[x + 1] != addr3[x + 1]
- && addr2[x] != addr4[x] && addr2[x + 1] != addr4[x + 1];
- }
+bool Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result) {
+#ifdef SK_DEBUG
+ if (SkPathOpsDebug::gVerifyOp) {
+ if (!OpDebug(one, two, op, result SkDEBUGPARAMS(false) SkDEBUGPARAMS(nullptr))) {
+ SkPathOpsDebug::ReportOpFail(one, two, op);
+ return false;
}
+ SkPathOpsDebug::VerifyOp(one, two, op, *result);
+ return true;
}
- return errors;
-}
-
#endif
-
-bool Op(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result) {
-#if DEBUG_VERIFY
- if (!OpDebug(one, two, op, result SkDEBUGPARAMS(nullptr))) {
- SkDebugf("%s did not expect failure\none: fill=%d\n", __FUNCTION__, one.getFillType());
- one.dumpHex();
- SkDebugf("two: fill=%d\n", two.getFillType());
- two.dumpHex();
- SkASSERT(0);
- return false;
- }
- SkPath pathOut, scaledPathOut;
- SkRegion rgnA, rgnB, openClip, rgnOut;
- openClip.setRect(-16000, -16000, 16000, 16000);
- rgnA.setPath(one, openClip);
- rgnB.setPath(two, openClip);
- rgnOut.op(rgnA, rgnB, (SkRegion::Op) op);
- rgnOut.getBoundaryPath(&pathOut);
- SkMatrix scale;
- debug_scale_matrix(one, two, scale);
- SkRegion scaledRgnA, scaledRgnB, scaledRgnOut;
- SkPath scaledA, scaledB;
- scaledA.addPath(one, scale);
- scaledA.setFillType(one.getFillType());
- scaledB.addPath(two, scale);
- scaledB.setFillType(two.getFillType());
- scaledRgnA.setPath(scaledA, openClip);
- scaledRgnB.setPath(scaledB, openClip);
- scaledRgnOut.op(scaledRgnA, scaledRgnB, (SkRegion::Op) op);
- scaledRgnOut.getBoundaryPath(&scaledPathOut);
- SkBitmap bitmap;
- SkPath scaledOut;
- scaledOut.addPath(*result, scale);
- scaledOut.setFillType(result->getFillType());
- int errors = debug_paths_draw_the_same(scaledPathOut, scaledOut, bitmap);
- const int MAX_ERRORS = 9;
- if (errors > MAX_ERRORS) {
- SkDebugf("%s did not expect failure\none: fill=%d\n", __FUNCTION__, one.getFillType());
- one.dumpHex();
- SkDebugf("two: fill=%d\n", two.getFillType());
- two.dumpHex();
- SkASSERT(0);
- }
- return true;
-#else
return OpDebug(one, two, op, result SkDEBUGPARAMS(true) SkDEBUGPARAMS(nullptr));
-#endif
}
« no previous file with comments | « src/pathops/SkPathOpsDebug.cpp ('k') | src/pathops/SkPathOpsSimplify.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698