32 while (iterA.experimentalNext(&runAInfo)) {
35 SkASSERT(iterB.experimentalNext(&runBInfo));
36 for (
int i = 0; i < runAInfo.
count; ++i) {
43 pathA.
dump(&streamA,
false);
44 pathB.
dump(&streamB,
false);
47 if (dataA->size() != dataB->size() ||
48 memcmp(dataA->data(), dataB->data(), dataA->size() - 1)) {
50 "Different path in font %s for glyph index: %d glyph id: %d, data sizes "
58 std::string fontationsPath(
reinterpret_cast<const char*
>(dataA->bytes()),
60 std::string freetypePath(
reinterpret_cast<const char*
>(dataB->bytes()),
62 SkDebugf(
"Path A (Fontations): \n%s\n", fontationsPath.c_str());
63 SkDebugf(
"Path B (FreeType): \n%s\n", freetypePath.c_str());
71class FontationsFtComparison {
73 FontationsFtComparison(std::string fontMatch, std::string langMatch)
74 : fTestDataIterator(fontMatch, langMatch) {}
78 size_t numTestsExecuted = 0;
79 while (fTestDataIterator.next(&
testSet)) {
88 int upem = fontationsTypeface->getUnitsPerEm();
89 SkFont fontationsFont(fontationsTypeface);
90 SkFont freetypeFont(freetypeTypeface);
95 font.setSubpixel(
true);
99 configureFont(fontationsFont);
100 configureFont(freetypeFont);
102 for (
const auto& sampleLang :
testSet.langSamples) {
104 makeTextBlobWithFontAndText(fontationsFont, sampleLang.sampleLong);
106 makeTextBlobWithFontAndText(freetypeFont, sampleLang.sampleLong);
109 textBlobsAllPathsEqual(
110 fontationsTextBlob, freetypeTextBlob,
testSet.fontName),
111 "paths not equal for %s",
117 numTestsExecuted > 0,
118 "Error: FontationsFtComparison did not run any tests, missing third-party "
119 "googlefonts_testdata resource? See bin/fetch-fonts-testdata.");
128 font.getTypeface()->getFamilyName(&fam);
131 SkScalar shapeWidth =
font.getTypeface()->getUnitsPerEm() * testPhrase.
size() * 1.10f;
133 testPhrase.
c_str(), testPhrase.
size(), font,
true, shapeWidth, &textBlobBuilder);
134 return textBlobBuilder.makeBlob();
143 FontationsFtComparison(
"Noto Sans",
144 "en_Latn|es_Latn|pt_Latn|id_Latn|ru_Cyrl|fr_Latn|tr_Latn|vi_Latn|de_"
145 "Latn|it_Latn|pl_Latn|nl_Latn|uk_Cyrl|gl_Latn|ro_Latn|cs_Latn|hu_Latn|"
146 "el_Grek|se_Latn|da_Latn|bg_Latn|sk_Latn|fi_Latn|bs_Latn|ca_Latn|no_"
147 "Latn|sr_Latn|sr_Cyrl|lt_Latn|hr_Latn|sl_Latn|uz_Latn|uz_Cyrl|lv_Latn|"
148 "et_Latn|az_Latn|az_Cyrl|la_Latn|tg_Latn|tg_Cyrl|sw_Latn|mn_Cyrl|kk_"
149 "Latn|kk_Cyrl|sq_Latn|af_Latn|ha_Latn|ky_Cyrl")
154 FontationsFtComparison(
"Noto Sans Devanagari",
"hi_Deva|mr_Deva").assertAllPathsEqual(
reporter);
158 FontationsFtComparison(
"Noto Sans Arabic",
"ar_Arab|uz_Arab|kk_Arab|ky_Arab")
163 FontationsFtComparison(
"Noto Sans Bengali",
"bn_Beng").assertAllPathsEqual(
reporter);
167 FontationsFtComparison(
"Noto Sans JP",
"ja_Jpan").assertAllPathsEqual(
reporter);
171 FontationsFtComparison(
"Noto Sans Thai",
"th_Thai").assertAllPathsEqual(
reporter);
175 FontationsFtComparison(
"Noto Sans SC",
"zh_Hans").assertAllPathsEqual(
reporter);
179 FontationsFtComparison(
"Noto Sans TC",
"zh_Hant").assertAllPathsEqual(
reporter);
183 FontationsFtComparison(
"Noto Sans KR",
"ko_Kore").assertAllPathsEqual(
reporter);
187 FontationsFtComparison(
"Noto Sans Tamil",
"ta_Taml").assertAllPathsEqual(
reporter);
191 FontationsFtComparison(
"Noto Sans Newa",
"new_Newa").assertAllPathsEqual(
reporter);
195 FontationsFtComparison(
"Noto Sans Kannada",
"kn_Knda").assertAllPathsEqual(
reporter);
199 FontationsFtComparison(
"Noto Sans Tagalog",
"fil_Tglg").assertAllPathsEqual(
reporter);
203 FontationsFtComparison(
"Noto Sans Telugu",
"te_Telu").assertAllPathsEqual(
reporter);
207 FontationsFtComparison(
"Noto Sans Gujarati",
"gu_Gujr").assertAllPathsEqual(
reporter);
211 FontationsFtComparison(
"Noto Sans Georgian",
"ka_Geor").assertAllPathsEqual(
reporter);
215 FontationsFtComparison(
"Noto Sans Malayalam",
"ml_Mlym").assertAllPathsEqual(
reporter);
219 FontationsFtComparison(
"Noto Sans Khmer",
"km_Khmr").assertAllPathsEqual(
reporter);
223 FontationsFtComparison(
"Noto Sans Sinhala",
"si_Sinh").assertAllPathsEqual(
reporter);
227 FontationsFtComparison(
"Noto Sans Myanmar",
"my_Mymr").assertAllPathsEqual(
reporter);
231 FontationsFtComparison(
"Noto Sans Javanese",
"jv_Java").assertAllPathsEqual(
reporter);
235 FontationsFtComparison(
"Noto Sans Mongolian",
"mn_Mong").assertAllPathsEqual(
reporter);
239 FontationsFtComparison(
"Noto Sans Armenian",
"hy_Armn").assertAllPathsEqual(
reporter);
243 FontationsFtComparison(
"Noto Sans Elbasan",
"sq_Elba").assertAllPathsEqual(
reporter);
247 FontationsFtComparison(
"Noto Sans Vithkuqi",
"sq_Vith").assertAllPathsEqual(
reporter);
251 FontationsFtComparison(
"Noto Sans Gurmukhi",
"pa_Guru").assertAllPathsEqual(
reporter);
static const ConicPts testSet[]
#define SkASSERT_RELEASE(cond)
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1
@ kNone
glyph outlines unchanged
SK_API sk_sp< SkTypeface > SkTypeface_Make_Fontations(std::unique_ptr< SkStreamAsset > fontData, const SkFontArguments &args)
#define DEF_TEST(name, reporter)
#define REPORTER_ASSERT(r, cond,...)
sk_sp< SkData > detachAsData()
bool getPath(SkGlyphID glyphID, SkPath *path) const
@ kSubpixelAntiAlias
glyph positioned in pixel using transparency
void dump(SkWStream *stream, bool dumpAsHex) const
static std::unique_ptr< SkShaper > Make(sk_sp< SkFontMgr > fallback=nullptr)
static std::unique_ptr< SkStreamAsset > MakeFromFile(const char path[])
const char * c_str() const
static sk_sp< SkTypeface > MakeFromStream(std::unique_ptr< SkStreamAsset >, const SkFontArguments &)
font
Font Metadata and Metrics.