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);
+}