aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar caryclark <caryclark@google.com>2014-09-15 09:26:09 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-09-15 09:26:09 -0700
commite956259c5a4f71768afb34ec032eaed49dcbe9f2 (patch)
tree99370ea8387aa4100730718fba544a7442e5df87 /src/core
parenta63d5df455e5fb32ac995f753709893221de6147 (diff)
add dumpHex() option to SkPath
This provides exact precision to help debugging when the float representation of a SkScalar may introduce error. R=reed@google.com Author: caryclark@google.com Review URL: https://codereview.chromium.org/571973003
Diffstat (limited to 'src/core')
-rw-r--r--src/core/SkClipStack.cpp2
-rw-r--r--src/core/SkPath.cpp30
2 files changed, 20 insertions, 12 deletions
diff --git a/src/core/SkClipStack.cpp b/src/core/SkClipStack.cpp
index 3093c314f4..cf2e71e671 100644
--- a/src/core/SkClipStack.cpp
+++ b/src/core/SkClipStack.cpp
@@ -891,7 +891,7 @@ void SkClipStack::Element::dump() const {
SkDebugf("\n");
break;
case kPath_Type:
- this->getPath().dump(NULL, true);
+ this->getPath().dump(NULL, true, false);
break;
}
}
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index b89aec31fa..33a0617da9 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -2019,7 +2019,11 @@ size_t SkPath::readFromMemory(const void* storage, size_t length) {
#include "SkString.h"
#include "SkStream.h"
-static void append_scalar(SkString* str, SkScalar value) {
+static void append_scalar(SkString* str, SkScalar value, bool dumpAsHex) {
+ if (dumpAsHex) {
+ str->appendf("SkBits2Float(0x%08x)", SkFloat2Bits(value));
+ return;
+ }
SkString tmp;
tmp.printf("%g", value);
if (tmp.contains('.')) {
@@ -2029,7 +2033,7 @@ static void append_scalar(SkString* str, SkScalar value) {
}
static void append_params(SkString* str, const char label[], const SkPoint pts[],
- int count, SkScalar conicWeight = -1) {
+ int count, bool dumpAsHex, SkScalar conicWeight = -1) {
str->append(label);
str->append("(");
@@ -2037,19 +2041,19 @@ static void append_params(SkString* str, const char label[], const SkPoint pts[]
count *= 2;
for (int i = 0; i < count; ++i) {
- append_scalar(str, values[i]);
+ append_scalar(str, values[i], dumpAsHex);
if (i < count - 1) {
str->append(", ");
}
}
if (conicWeight >= 0) {
str->append(", ");
- append_scalar(str, conicWeight);
+ append_scalar(str, conicWeight, dumpAsHex);
}
str->append(");\n");
}
-void SkPath::dump(SkWStream* wStream, bool forceClose) const {
+void SkPath::dump(SkWStream* wStream, bool forceClose, bool dumpAsHex) const {
Iter iter(*this, forceClose);
SkPoint pts[4];
Verb verb;
@@ -2062,19 +2066,19 @@ void SkPath::dump(SkWStream* wStream, bool forceClose) const {
while ((verb = iter.next(pts, false)) != kDone_Verb) {
switch (verb) {
case kMove_Verb:
- append_params(&builder, "path.moveTo", &pts[0], 1);
+ append_params(&builder, "path.moveTo", &pts[0], 1, dumpAsHex);
break;
case kLine_Verb:
- append_params(&builder, "path.lineTo", &pts[1], 1);
+ append_params(&builder, "path.lineTo", &pts[1], 1, dumpAsHex);
break;
case kQuad_Verb:
- append_params(&builder, "path.quadTo", &pts[1], 2);
+ append_params(&builder, "path.quadTo", &pts[1], 2, dumpAsHex);
break;
case kConic_Verb:
- append_params(&builder, "path.conicTo", &pts[1], 2, iter.conicWeight());
+ append_params(&builder, "path.conicTo", &pts[1], 2, dumpAsHex, iter.conicWeight());
break;
case kCubic_Verb:
- append_params(&builder, "path.cubicTo", &pts[1], 3);
+ append_params(&builder, "path.cubicTo", &pts[1], 3, dumpAsHex);
break;
case kClose_Verb:
builder.append("path.close();\n");
@@ -2093,7 +2097,11 @@ void SkPath::dump(SkWStream* wStream, bool forceClose) const {
}
void SkPath::dump() const {
- this->dump(NULL, false);
+ this->dump(NULL, false, false);
+}
+
+void SkPath::dumpHex() const {
+ this->dump(NULL, false, true);
}
#ifdef SK_DEBUG