[SkTextBlob] Remove incorrect builder assert
authorfmalita <fmalita@chromium.org>
Tue, 13 Oct 2015 15:59:23 +0000 (08:59 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 13 Oct 2015 15:59:23 +0000 (08:59 -0700)
At the end of TightRunBounds, glyphPosX cannot exceed the start of the
next run.  But glyphPosY is running ahead of glyphPosX (for
kFull_Positioning) => the glyphPosY assert is incorrect.

Since the two pointers advance in lock-step, there isn't much value in
the glyphPosY assert anyway - we might as well remove it.

BUG=chromium:542643
R=reed@google.com,bungeman@google.com

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

src/core/SkTextBlob.cpp
tests/TextBlobTest.cpp

index 2ccf26b..7fd96ad 100644 (file)
@@ -403,8 +403,6 @@ SkRect SkTextBlobBuilder::TightRunBounds(const SkTextBlob::RunRecord& run) {
     }
 
     SkASSERT((void*)glyphPosX <= SkTextBlob::RunRecord::Next(&run));
-    SkASSERT(run.positioning() == SkTextBlob::kHorizontal_Positioning ||
-             (void*)glyphPosY <= SkTextBlob::RunRecord::Next(&run));
 
     return bounds.makeOffset(run.offset().x(), run.offset().y());
 }
index ec748e7..2a74e5a 100644 (file)
@@ -149,7 +149,22 @@ public:
         }
 
         // Implicit bounds
-        // FIXME: not supported yet.
+
+        {
+            // Exercise the empty bounds path, and ensure that RunRecord-aligned pos buffers
+            // don't trigger asserts (http://crbug.com/542643).
+            SkPaint p;
+            p.setTextSize(0);
+            p.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+
+            const char* txt = "BOOO";
+            const size_t len = strlen(txt);
+            const SkTextBlobBuilder::RunBuffer& buffer = builder.allocRunPos(p, (int)len);
+            p.textToGlyphs(txt, len, buffer.glyphs);
+            memset(buffer.pos, 0, sizeof(SkScalar) * len * 2);
+            SkAutoTUnref<const SkTextBlob> blob(builder.build());
+            REPORTER_ASSERT(reporter, blob->bounds().isEmpty());
+        }
     }
 
 private: