Always mark bitmap glyph runs as such, to ensure they are properly regenerated
If all glyphs were culled (by being too small), we could end up with a
run that never called setHasBitmap. That would prevent us from looking
at the view matrix on a subsequent draw, when deciding if we needed to
regenerate.
Bug: skia:8955
Change-Id: Ic7a2539762527f91bdb50ab78bdf5801bfda0034
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/206266
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Herb Derby <herb@google.com>
diff --git a/gm/skbug_8955.cpp b/gm/skbug_8955.cpp
new file mode 100644
index 0000000..82c94c2
--- /dev/null
+++ b/gm/skbug_8955.cpp
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2019 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "gm.h"
+
+#include "SkFont.h"
+#include "SkPaint.h"
+#include "SkTextBlob.h"
+
+DEF_SIMPLE_GM(skbug_8955, canvas, 100, 100) {
+ SkPaint p;
+ SkFont font;
+ font.setSize(50);
+ auto blob = SkTextBlob::MakeFromText("+", 1, font);
+
+ // This bug only appeared when drawing the same text blob. We would generate no glyphs on the
+ // first draw, and fail to mark the blob as having any bitmap runs. That would prevent us from
+ // re-generating the blob on the second draw, even though the matrix had been restored.
+ canvas->save();
+ canvas->scale(0, 0);
+ canvas->drawTextBlob(blob, 30, 60, p);
+ canvas->restore();
+ canvas->drawTextBlob(blob, 30, 60, p);
+}