Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(815)

Unified Diff: src/ports/SkFontConfigParser_android.cpp

Issue 888923003: Don't read unecessary font files on Android. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Make usage more obvious. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ports/SkFontConfigParser_android.cpp
diff --git a/src/ports/SkFontConfigParser_android.cpp b/src/ports/SkFontConfigParser_android.cpp
index 2e9054d36d62527eab17a5497f0b1a7c9b48eb0f..e5483c8000a518a85eefed963b80cc4f3e4bf91a 100644
--- a/src/ports/SkFontConfigParser_android.cpp
+++ b/src/ports/SkFontConfigParser_android.cpp
@@ -57,13 +57,15 @@ struct FamilyData {
, fCurrentFamily(NULL)
, fCurrentFontInfo(NULL)
, fCurrentTag(NO_TAG)
- { };
+ , fVersion(0)
+ { }
XML_Parser fParser; // The expat parser doing the work, owned by caller
SkTDArray<FontFamily*>& fFamilies; // The array to append families, owned by caller
SkAutoTDelete<FontFamily> fCurrentFamily; // The family being created, owned by this
FontFileInfo* fCurrentFontInfo; // The fontInfo being created, owned by currentFamily
int fCurrentTag; // Flag to indicate when we're in nameset/fileset tags
+ int fVersion; // The version of the file parsed.
};
/** http://www.w3.org/TR/html-markup/datatypes.html#common.data.integer.non-negative-def */
@@ -331,6 +333,7 @@ static void startElementHandler(void* data, const char* tag, const char** atts)
XML_SetElementHandler(familyData->fParser,
lmpParser::startElementHandler,
lmpParser::endElementHandler);
+ familyData->fVersion = version;
}
}
} else if (len == 6 && strncmp(tag, "family", len) == 0) {
@@ -387,16 +390,16 @@ static void endElementHandler(void* data, const char* tag) {
/**
* This function parses the given filename and stores the results in the given
- * families array.
+ * families array. Returns the version of the file, negative if the file does not exist.
*/
-static void parseConfigFile(const char* filename, SkTDArray<FontFamily*> &families) {
+static int parseConfigFile(const char* filename, SkTDArray<FontFamily*> &families) {
FILE* file = fopen(filename, "r");
// Some of the files we attempt to parse (in particular, /vendor/etc/fallback_fonts.xml)
// are optional - failure here is okay because one of these optional files may not exist.
if (NULL == file) {
- return;
+ return -1;
}
XML_Parser parser = XML_ParserCreate(NULL);
@@ -417,15 +420,17 @@ static void parseConfigFile(const char* filename, SkTDArray<FontFamily*> &famili
}
XML_ParserFree(parser);
fclose(file);
+ return familyData.fVersion;
}
-static void getSystemFontFamilies(SkTDArray<FontFamily*> &fontFamilies) {
+/** Returns the version of the system font file actually found, negative if none. */
+static int appendSystemFontFamilies(SkTDArray<FontFamily*> &fontFamilies) {
mtklein 2015/02/02 16:55:49 Let's update to static_function_name_style and T&
bungeman-skia 2015/02/02 18:36:37 Done.
int initialCount = fontFamilies.count();
- parseConfigFile(LMP_SYSTEM_FONTS_FILE, fontFamilies);
-
- if (initialCount == fontFamilies.count()) {
- parseConfigFile(OLD_SYSTEM_FONTS_FILE, fontFamilies);
+ int version = parseConfigFile(LMP_SYSTEM_FONTS_FILE, fontFamilies);
+ if (version < 0 || fontFamilies.count() == initialCount) {
+ version = parseConfigFile(OLD_SYSTEM_FONTS_FILE, fontFamilies);
}
+ return version;
}
/**
@@ -435,7 +440,9 @@ static void getSystemFontFamilies(SkTDArray<FontFamily*> &fontFamilies) {
* directory for those files,add all of their entries to the fallback chain, and
* include the locale as part of each entry.
*/
-static void getFallbackFontFamiliesForLocale(SkTDArray<FontFamily*> &fallbackFonts, const char* dir) {
+static void appendFallbackFontFamiliesForLocale(SkTDArray<FontFamily*> &fallbackFonts,
+ const char* dir)
+{
#if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK)
// The framework is beyond Android 4.2 and can therefore skip this function
return;
@@ -482,13 +489,15 @@ static void getFallbackFontFamiliesForLocale(SkTDArray<FontFamily*> &fallbackFon
}
}
-static void getFallbackFontFamilies(SkTDArray<FontFamily*> &fallbackFonts) {
- SkTDArray<FontFamily*> vendorFonts;
+static void appendSystemFallbackFontFamilies(SkTDArray<FontFamily*> &fallbackFonts) {
parseConfigFile(FALLBACK_FONTS_FILE, fallbackFonts);
- parseConfigFile(VENDOR_FONTS_FILE, vendorFonts);
+ appendFallbackFontFamiliesForLocale(fallbackFonts, LOCALE_FALLBACK_FONTS_SYSTEM_DIR);
+}
- getFallbackFontFamiliesForLocale(fallbackFonts, LOCALE_FALLBACK_FONTS_SYSTEM_DIR);
- getFallbackFontFamiliesForLocale(vendorFonts, LOCALE_FALLBACK_FONTS_VENDOR_DIR);
+static void mixinVendorFallbackFontFamilies(SkTDArray<FontFamily*> &fallbackFonts) {
+ SkTDArray<FontFamily*> vendorFonts;
+ parseConfigFile(VENDOR_FONTS_FILE, vendorFonts);
+ appendFallbackFontFamiliesForLocale(vendorFonts, LOCALE_FALLBACK_FONTS_VENDOR_DIR);
// This loop inserts the vendor fallback fonts in the correct order in the
// overall fallbacks list.
@@ -519,12 +528,15 @@ static void getFallbackFontFamilies(SkTDArray<FontFamily*> &fallbackFonts) {
* resulting data is returned in the given fontFamilies array.
*/
void SkFontConfigParser::GetFontFamilies(SkTDArray<FontFamily*> &fontFamilies) {
-
- getSystemFontFamilies(fontFamilies);
+ // Version 21 of the system font configuration does not need any fallback configuration files.
+ if (appendSystemFontFamilies(fontFamilies) >= 21) {
+ return;
+ }
// Append all the fallback fonts to system fonts
SkTDArray<FontFamily*> fallbackFonts;
- getFallbackFontFamilies(fallbackFonts);
+ appendSystemFallbackFontFamilies(fallbackFonts);
+ mixinVendorFallbackFontFamilies(fallbackFonts);
for (int i = 0; i < fallbackFonts.count(); ++i) {
fallbackFonts[i]->fIsFallbackFont = true;
*fontFamilies.append() = fallbackFonts[i];
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698