diff options
author | Mike Reed <reed@google.com> | 2018-11-21 15:10:08 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-11-21 20:44:03 +0000 |
commit | 2ed78209704418aebfb99e858866af249da594c7 (patch) | |
tree | 46541338da544799cbbb27c4c0be5fbd379eb65b /fuzz | |
parent | 3065b5223dc44050753d973d77fbc8e6429f0649 (diff) | |
download | skia-2ed78209704418aebfb99e858866af249da594c7.tar.gz |
use SkFont in a lot of places
Bug: skia:
Change-Id: I86df3f650eb5bb0219b3251ef5f8e95403838bba
Reviewed-on: https://skia-review.googlesource.com/c/172482
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'fuzz')
-rw-r--r-- | fuzz/FuzzCanvas.cpp | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/fuzz/FuzzCanvas.cpp b/fuzz/FuzzCanvas.cpp index 1df50b68f4..aea7405a81 100644 --- a/fuzz/FuzzCanvas.cpp +++ b/fuzz/FuzzCanvas.cpp @@ -892,16 +892,16 @@ static void fuzz_paint_text(Fuzz* fuzz, SkPaint* paint) { kFull_SkFontHinting)); } -static void fuzz_paint_text_encoding(Fuzz* fuzz, SkPaint* paint) { - paint->setTextEncoding(make_fuzz_t_range<SkPaint::TextEncoding>(fuzz, 0, 3)); +static SkTextEncoding fuzz_paint_text_encoding(Fuzz* fuzz) { + return make_fuzz_t_range<SkTextEncoding>(fuzz, 0, 3); } constexpr int kMaxGlyphCount = 30; -static SkTDArray<uint8_t> make_fuzz_text(Fuzz* fuzz, const SkPaint& paint) { +static SkTDArray<uint8_t> make_fuzz_text(Fuzz* fuzz, const SkFont& font, SkTextEncoding encoding) { SkTDArray<uint8_t> array; - if (SkPaint::kGlyphID_TextEncoding == paint.getTextEncoding()) { - int glyphRange = paint.getTypeface() ? paint.getTypeface()->countGlyphs() + if (kGlyphID_SkTextEncoding == encoding) { + int glyphRange = font.getTypeface() ? font.getTypeface()->countGlyphs() : SkTypeface::MakeDefault()->countGlyphs(); if (glyphRange == 0) { // Some fuzzing environments have no fonts, so empty array is the best @@ -941,8 +941,8 @@ static SkTDArray<uint8_t> make_fuzz_text(Fuzz* fuzz, const SkPaint& paint) { } } } - switch (paint.getTextEncoding()) { - case SkPaint::kUTF8_TextEncoding: { + switch (encoding) { + case kUTF8_SkTextEncoding: { size_t utf8len = 0; for (int j = 0; j < length; ++j) { utf8len += SkUTF::ToUTF8(buffer[j], nullptr); @@ -952,7 +952,7 @@ static SkTDArray<uint8_t> make_fuzz_text(Fuzz* fuzz, const SkPaint& paint) { ptr += SkUTF::ToUTF8(buffer[j], ptr); } } break; - case SkPaint::kUTF16_TextEncoding: { + case kUTF16_SkTextEncoding: { size_t utf16len = 0; for (int j = 0; j < length; ++j) { utf16len += SkUTF::ToUTF16(buffer[j]); @@ -962,7 +962,7 @@ static SkTDArray<uint8_t> make_fuzz_text(Fuzz* fuzz, const SkPaint& paint) { ptr += SkUTF::ToUTF16(buffer[j], ptr); } } break; - case SkPaint::kUTF32_TextEncoding: + case kUTF32_SkTextEncoding: memcpy(array.append(length * sizeof(SkUnichar)), buffer, length * sizeof(SkUnichar)); break; default: @@ -972,17 +972,21 @@ static SkTDArray<uint8_t> make_fuzz_text(Fuzz* fuzz, const SkPaint& paint) { return array; } +static SkTDArray<uint8_t> make_fuzz_text(Fuzz* fuzz, const SkPaint& paint) { + return make_fuzz_text(fuzz, SkFont::LEGACY_ExtractFromPaint(paint), + (SkTextEncoding)paint.getTextEncoding()); +} + static sk_sp<SkTextBlob> make_fuzz_textblob(Fuzz* fuzz) { SkTextBlobBuilder textBlobBuilder; int8_t runCount; fuzz->nextRange(&runCount, (int8_t)1, (int8_t)8); while (runCount-- > 0) { - SkPaint paint; - fuzz_paint_text_encoding(fuzz, &paint); - paint.setAntiAlias(make_fuzz_t<bool>(fuzz)); - paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); - SkTDArray<uint8_t> text = make_fuzz_text(fuzz, paint); - int glyphCount = paint.countText(text.begin(), SkToSizeT(text.count())); + SkFont font; + SkTextEncoding encoding = fuzz_paint_text_encoding(fuzz); + font.setEdging(make_fuzz_t<bool>(fuzz) ? SkFont::Edging::kAlias : SkFont::Edging::kAntiAlias); + SkTDArray<uint8_t> text = make_fuzz_text(fuzz, font, encoding); + int glyphCount = font.countText(text.begin(), SkToSizeT(text.count()), encoding); SkASSERT(glyphCount <= kMaxGlyphCount); SkScalar x, y; const SkTextBlobBuilder::RunBuffer* buffer; @@ -992,19 +996,19 @@ static sk_sp<SkTextBlob> make_fuzz_textblob(Fuzz* fuzz) { case 0: fuzz->next(&x, &y); // TODO: Test other variations of this. - buffer = &textBlobBuilder.allocRun(paint, glyphCount, x, y); + buffer = &textBlobBuilder.allocRun(font, glyphCount, x, y); memcpy(buffer->glyphs, text.begin(), SkToSizeT(text.count())); break; case 1: fuzz->next(&y); // TODO: Test other variations of this. - buffer = &textBlobBuilder.allocRunPosH(paint, glyphCount, y); + buffer = &textBlobBuilder.allocRunPosH(font, glyphCount, y); memcpy(buffer->glyphs, text.begin(), SkToSizeT(text.count())); fuzz->nextN(buffer->pos, glyphCount); break; case 2: // TODO: Test other variations of this. - buffer = &textBlobBuilder.allocRunPos(paint, glyphCount); + buffer = &textBlobBuilder.allocRunPos(font, glyphCount); memcpy(buffer->glyphs, text.begin(), SkToSizeT(text.count())); fuzz->nextN(buffer->pos, glyphCount * 2); break; @@ -1460,7 +1464,7 @@ static void fuzz_canvas(Fuzz* fuzz, SkCanvas* canvas, int depth = 9) { case 45: { fuzz_paint(fuzz, &paint, depth - 1); fuzz_paint_text(fuzz, &paint); - fuzz_paint_text_encoding(fuzz, &paint); + paint.setTextEncoding(fuzz_paint_text_encoding(fuzz)); SkScalar x, y; fuzz->next(&x, &y); SkTDArray<uint8_t> text = make_fuzz_text(fuzz, paint); @@ -1470,7 +1474,7 @@ static void fuzz_canvas(Fuzz* fuzz, SkCanvas* canvas, int depth = 9) { case 46: { fuzz_paint(fuzz, &paint, depth - 1); fuzz_paint_text(fuzz, &paint); - fuzz_paint_text_encoding(fuzz, &paint); + paint.setTextEncoding(fuzz_paint_text_encoding(fuzz)); SkTDArray<uint8_t> text = make_fuzz_text(fuzz, paint); int glyphCount = paint.countText(text.begin(), SkToSizeT(text.count())); if (glyphCount < 1) { @@ -1491,7 +1495,7 @@ static void fuzz_canvas(Fuzz* fuzz, SkCanvas* canvas, int depth = 9) { case 47: { fuzz_paint(fuzz, &paint, depth - 1); fuzz_paint_text(fuzz, &paint); - fuzz_paint_text_encoding(fuzz, &paint); + paint.setTextEncoding(fuzz_paint_text_encoding(fuzz)); SkTDArray<uint8_t> text = make_fuzz_text(fuzz, paint); int glyphCount = paint.countText(text.begin(), SkToSizeT(text.count())); SkAutoTMalloc<SkScalar> widths(glyphCount); @@ -1525,7 +1529,7 @@ static void fuzz_canvas(Fuzz* fuzz, SkCanvas* canvas, int depth = 9) { case 50: { fuzz_paint(fuzz, &paint, depth - 1); fuzz_paint_text(fuzz, &paint); - fuzz_paint_text_encoding(fuzz, &paint); + paint.setTextEncoding(fuzz_paint_text_encoding(fuzz)); SkTDArray<uint8_t> text = make_fuzz_text(fuzz, paint); SkRSXform rSXform[kMaxGlyphCount]; int glyphCount = paint.countText(text.begin(), SkToSizeT(text.count())); |