| Index: site/dev/testing/fonts.md
|
| diff --git a/site/dev/testing/fonts.md b/site/dev/testing/fonts.md
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..317ee9f1fa9d146e9f16f0904aeb102b4e1a4ede
|
| --- /dev/null
|
| +++ b/site/dev/testing/fonts.md
|
| @@ -0,0 +1,118 @@
|
| +Fonts and GM Tests
|
| +==================
|
| +
|
| +Overview
|
| +--------
|
| +
|
| +Each test in the gm directory draws a reference image. Their primary purpose is
|
| +to detect when images change unexpectedly, indicating that a rendering bug has
|
| +been introduced.
|
| +
|
| +The gm tests have a secondary purpose: they detect when rendering is different
|
| +across platforms and configurations.
|
| +
|
| +The dm \(Diamond Master\) tool supports flags that minimize or eliminate the
|
| +differences introduced by the font scaler native to each platform.
|
| +
|
| +
|
| +Portable fonts
|
| +--------------
|
| +
|
| +The most portable font format uses Skia to draw characters directly from paths,
|
| +and contains a idealized set of font metrics. This does not exercise platform
|
| +specific fonts at all, but does support specifying the font name, font size,
|
| +font style, and attributes like fakeBold. The paths are generated on a reference
|
| +platform \(currently a Mac\) and are stored as data in
|
| +'tools/test_font_data.cpp' .
|
| +
|
| +To use portable fonts, pass '\-\-portableFonts' to dm.
|
| +
|
| +
|
| +Resource fonts
|
| +--------------
|
| +
|
| +The '\-\-resourceFonts' flag directs dm to use font files present in the resources
|
| +directory. By using the same font set on all buildbots, the generated gm images
|
| +become more uniform across platforms.
|
| +
|
| +Today, the set of fonts used by gm, and present in my resources directory,
|
| +include:
|
| +
|
| + * Courier New Bold Italic.ttf
|
| + * Courier New Bold.ttf
|
| + * Courier New Italic.ttf
|
| + * Courier New.ttf
|
| + * LiberationSans-Bold.ttf
|
| + * LiberationSans-BoldItalic.ttf
|
| + * LiberationSans-Italic.ttf
|
| + * LiberationSans-Regular.ttf
|
| + * Papyrus.ttc
|
| + * Pro W4.otf
|
| + * Times New Roman Bold Italic.ttf
|
| + * Times New Roman Bold.ttf
|
| + * Times New Roman Italic.ttf
|
| + * Times New Roman.ttf
|
| +
|
| +
|
| +System fonts
|
| +------------
|
| +
|
| +If neither '\-\-portableFonts' nor '\-\-resourceFonts' is specified, dm uses the fonts
|
| +present on the system. Also, if '\-\-portableFonts' or '\-\-resourceFonts' is specified
|
| +and the desired font is not available, the native font lookup algorithm is
|
| +invoked.
|
| +
|
| +
|
| +GM font selection
|
| +-----------------
|
| +
|
| +Each gm specifies the typeface to use when drawing text. For now, to set the
|
| +portable typeface on the paint, call:
|
| +
|
| +~~~~
|
| +sk_tool_utils::set_portable_typeface(SkPaint* , const char* name = NULL,
|
| +SkTypeface::Style style = SkTypeface::kNormal );
|
| +~~~~
|
| +
|
| +To create a portable typeface, use:
|
| +
|
| +~~~~
|
| +SkTypeface* typeface = sk_tool_utils::create_portable_typeface(const char* name,
|
| +SkTypeface::Style style);
|
| +~~~~
|
| +
|
| +Eventually, both 'set_portable_typeface()' and 'create_portable_typeface()' will be
|
| +removed. Instead, a test-wide 'SkFontMgr' will be selected to choose portable
|
| +fonts or resource fonts.
|
| +
|
| +
|
| +Adding new fonts and glyphs to a GM
|
| +-----------------------------------
|
| +
|
| +If a font is missing from the portable data or the resource directory, the
|
| +system font is used instead. If a glyph is missing from the portable data, the
|
| +first character, usually a space, is drawn instead.
|
| +
|
| +Running dm with '\-\-portableFonts' and '\-\-reportUsedChars' generates
|
| +'tools/test_font_data_chars.cpp', which describes the fonts and characters used by
|
| +all gm tests. Subsequently running the 'create_test_font' tool generates new paths
|
| +and writes them into 'tools/test_font_data.cpp' .
|
| +
|
| +
|
| +Future work
|
| +-----------
|
| +
|
| +The font set used by gm tests today is arbitrary and not intended to be
|
| +cross-platform. By choosing fonts without licensing issues, all bots can freely
|
| +contain the same fonts. By narrowing the font selection, the size of the test
|
| +font data will be more manageable.
|
| +
|
| +Adding support for selecting from multiple font managers at runtime permits
|
| +removing manual typeface selection in the gm tests. Today, options to dm like
|
| +'\-\-pipe' fail with '\-\-portableFonts' because we're hard-coded to using the default
|
| +font manage when pictures are serialized.
|
| +
|
| +Some gm tests explicitly always want to use system fonts and system metrics;
|
| +other gm tests use text only to label the drawing; yet other gm tests use text
|
| +to generate paths for testing. Additional discrimination is needed to
|
| +distinguish these cases.
|
|
|