diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/pathops/SkPathOpsDebug.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/pathops/SkPathOpsDebug.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,161 @@ +/* + * Copyright 2013 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "SkPathOpsDebug.h" +#include "SkPath.h" + +#if defined SK_DEBUG || !FORCE_RELEASE + +int SkPathOpsDebug::gMaxWindSum = SK_MaxS32; +int SkPathOpsDebug::gMaxWindValue = SK_MaxS32; + +const char* SkPathOpsDebug::kLVerbStr[] = {"", "line", "quad", "cubic"}; +int SkPathOpsDebug::gContourID; +int SkPathOpsDebug::gSegmentID; + +#if DEBUG_SORT || DEBUG_SWAP_TOP +int SkPathOpsDebug::gSortCountDefault = SK_MaxS32; +int SkPathOpsDebug::gSortCount; +#endif + +#if DEBUG_ACTIVE_OP +const char* SkPathOpsDebug::kPathOpStr[] = {"diff", "sect", "union", "xor"}; +#endif + +void SkPathOpsDebug::MathematicaIze(char* str, size_t bufferLen) { + size_t len = strlen(str); + bool num = false; + for (size_t idx = 0; idx < len; ++idx) { + if (num && str[idx] == 'e') { + if (len + 2 >= bufferLen) { + return; + } + memmove(&str[idx + 2], &str[idx + 1], len - idx); + str[idx] = '*'; + str[idx + 1] = '^'; + ++len; + } + num = str[idx] >= '0' && str[idx] <= '9'; + } +} + +bool SkPathOpsDebug::ValidWind(int wind) { + return wind > SK_MinS32 + 0xFFFF && wind < SK_MaxS32 - 0xFFFF; +} + +void SkPathOpsDebug::WindingPrintf(int wind) { + if (wind == SK_MinS32) { + SkDebugf("?"); + } else { + SkDebugf("%d", wind); + } +} + +#if DEBUG_SHOW_TEST_NAME +void* SkPathOpsDebug::CreateNameStr() { + return SkNEW_ARRAY(char, DEBUG_FILENAME_STRING_LENGTH); +} + +void SkPathOpsDebug::DeleteNameStr(void* v) { + SkDELETE_ARRAY(reinterpret_cast(v)); +} + +void SkPathOpsDebug::BumpTestName(char* test) { + char* num = test + strlen(test); + while (num[-1] >= '0' && num[-1] <= '9') { + --num; + } + if (num[0] == '\0') { + return; + } + int dec = atoi(num); + if (dec == 0) { + return; + } + ++dec; + SK_SNPRINTF(num, DEBUG_FILENAME_STRING_LENGTH - (num - test), "%d", dec); +} +#endif + +#include "SkOpSegment.h" + +void SkPathOpsDebug::DumpAngles(const SkTArray& angles) { + int count = angles.count(); + for (int index = 0; index < count; ++index) { + angles[index].dump(); + } +} + +void SkPathOpsDebug::DumpAngles(const SkTArray& angles) { + int count = angles.count(); + for (int index = 0; index < count; ++index) { + angles[index]->dump(); + } +} +#endif // SK_DEBUG || !FORCE_RELEASE + +#ifdef SK_DEBUG +void SkOpSpan::dump() const { + SkDebugf("t="); + DebugDumpDouble(fT); + SkDebugf(" pt="); + SkDPoint::dump(fPt); + SkDebugf(" other.fID=%d", fOther->debugID()); + SkDebugf(" [%d] otherT=", fOtherIndex); + DebugDumpDouble(fOtherT); + SkDebugf(" windSum="); + SkPathOpsDebug::WindingPrintf(fWindSum); + if (SkPathOpsDebug::ValidWind(fOppSum) || fOppValue != 0) { + SkDebugf(" oppSum="); + SkPathOpsDebug::WindingPrintf(fOppSum); + } + SkDebugf(" windValue=%d", fWindValue); + if (SkPathOpsDebug::ValidWind(fOppSum) || fOppValue != 0) { + SkDebugf(" oppValue=%d", fOppValue); + } + if (fDone) { + SkDebugf(" done"); + } + if (fUnsortableStart) { + SkDebugf(" unsortable-start"); + } + if (fUnsortableEnd) { + SkDebugf(" unsortable-end"); + } + if (fTiny) { + SkDebugf(" tiny"); + } else if (fSmall) { + SkDebugf(" small"); + } + if (fLoop) { + SkDebugf(" loop"); + } + SkDebugf("\n"); +} + +void Dump(const SkTArray& angles) { + SkPathOpsDebug::DumpAngles(angles); +} + +void Dump(const SkTArray& angles) { + SkPathOpsDebug::DumpAngles(angles); +} + +void Dump(const SkTArray* angles) { + SkPathOpsDebug::DumpAngles(*angles); +} + +void Dump(const SkTArray* angles) { + SkPathOpsDebug::DumpAngles(*angles); +} + +#endif + +#if !FORCE_RELEASE && 0 // enable when building without extended test +void SkPathOpsDebug::ShowPath(const SkPath& one, const SkPath& two, SkPathOp op, const char* name) { +} +#endif