Add a UMA histogram for type of web font usage

This patch adds WebFont.PackageFormat histogram that tracks the usage of
different format of web fonts. It records container format of font file;
both TrueType fonts and OpenType fonts are recorded as SFNT format.
If a font didn't pass OTS sanitization, it's recoreded as Unknown.

BUG=380988
TEST=manually tested with chrome://histograms

Review URL: https://codereview.chromium.org/324003002

git-svn-id: svn://svn.chromium.org/blink/trunk@175991 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 029ee37f
...@@ -46,6 +46,33 @@ namespace WebCore { ...@@ -46,6 +46,33 @@ namespace WebCore {
static const double fontLoadWaitLimitSec = 3.0; static const double fontLoadWaitLimitSec = 3.0;
enum FontPackageFormat {
PackageFormatUnknown,
PackageFormatSFNT,
PackageFormatWOFF,
PackageFormatWOFF2,
PackageFormatSVG,
PackageFormatEnumMax
};
static FontPackageFormat packageFormatOf(SharedBuffer* buffer)
{
if (buffer->size() < 4)
return PackageFormatUnknown;
const char* data = buffer->data();
if (data[0] == 'w' && data[1] == 'O' && data[2] == 'F' && data[3] == 'F')
return PackageFormatWOFF;
if (data[0] == 'w' && data[1] == 'O' && data[2] == 'F' && data[3] == '2')
return PackageFormatWOFF2;
return PackageFormatSFNT;
}
static void recordPackageFormatHistogram(FontPackageFormat format)
{
blink::Platform::current()->histogramEnumeration("WebFont.PackageFormat", format, PackageFormatEnumMax);
}
FontResource::FontResource(const ResourceRequest& resourceRequest) FontResource::FontResource(const ResourceRequest& resourceRequest)
: Resource(resourceRequest, Font) : Resource(resourceRequest, Font)
, m_loadInitiated(false) , m_loadInitiated(false)
...@@ -91,8 +118,13 @@ bool FontResource::ensureCustomFontData() ...@@ -91,8 +118,13 @@ bool FontResource::ensureCustomFontData()
if (!m_fontData && !errorOccurred() && !isLoading()) { if (!m_fontData && !errorOccurred() && !isLoading()) {
if (m_data) if (m_data)
m_fontData = FontCustomPlatformData::create(m_data.get()); m_fontData = FontCustomPlatformData::create(m_data.get());
if (!m_fontData)
if (m_fontData) {
recordPackageFormatHistogram(packageFormatOf(m_data.get()));
} else {
setStatus(DecodeError); setStatus(DecodeError);
recordPackageFormatHistogram(PackageFormatUnknown);
}
} }
return m_fontData; return m_fontData;
} }
...@@ -123,8 +155,12 @@ bool FontResource::ensureSVGFontData() ...@@ -123,8 +155,12 @@ bool FontResource::ensureSVGFontData()
if (decoder->sawError()) if (decoder->sawError())
m_externalSVGDocument = nullptr; m_externalSVGDocument = nullptr;
} }
if (!m_externalSVGDocument) if (m_externalSVGDocument) {
recordPackageFormatHistogram(PackageFormatSVG);
} else {
setStatus(DecodeError); setStatus(DecodeError);
recordPackageFormatHistogram(PackageFormatUnknown);
}
} }
return m_externalSVGDocument; return m_externalSVGDocument;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment