summaryrefslogtreecommitdiff
path: root/pango/pangofc-fontmap.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-08-23 00:22:06 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-02-22 08:34:16 -0500
commit3eb35308fe591be425e291ace900c969a879abf0 (patch)
treeae97495335a7a589901a04644d237865cb14e4ec /pango/pangofc-fontmap.c
parentbed28dede9b6272183347ba05e2dbfc02bf71ec4 (diff)
downloadpango-3eb35308fe591be425e291ace900c969a879abf0.tar.gz
Save coverage to a filewip-bitmatrix
Save coverage order in $XDG_CONFIG_HOME/pango/coverage.order. We compare the hashes of all fonts to identify when the coverage order needs to be recomputed. Rough numbers show that loading the coverage from a file takes < 10ms, while computing it from scratch takes >400ms. So this is clearly a win.
Diffstat (limited to 'pango/pangofc-fontmap.c')
-rw-r--r--pango/pangofc-fontmap.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c
index 68a642cd..f1eae391 100644
--- a/pango/pangofc-fontmap.c
+++ b/pango/pangofc-fontmap.c
@@ -2431,8 +2431,33 @@ compute_coverage_order_in_thread (GTask *task,
FcFontSet *fonts = task_data;
CoverageOrder *coverage_order;
gint64 before = PANGO_TRACE_CURRENT_TIME;
+ char *parentdir;
+ char *filename;
+ GError *error = NULL;
+
+ parentdir = g_build_filename (g_get_user_cache_dir (), "pango", NULL);
+ filename = g_build_filename (parentdir, "coverage.order", NULL);
+
+ coverage_order = coverage_order_load (fonts, filename, &error);
+
+ if (!coverage_order)
+ {
+ if (error && !g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
+ g_debug ("Failed to load coverage order: %s", error->message);
+ g_clear_error (&error);
+
+ coverage_order = coverage_order_new (fonts);
+
+ if (g_mkdir_with_parents (parentdir, 0700) != 0 ||
+ !coverage_order_save (coverage_order, fonts, filename, &error))
+ {
+ g_debug ("Failed to save coverage order: %s", error->message);
+ g_error_free (error);
+ }
+ }
- coverage_order = coverage_order_new (fonts);
+ g_free (filename);
+ g_free (parentdir);
pango_trace_mark (before, "compute_coverage_order", NULL);