From 3eb35308fe591be425e291ace900c969a879abf0 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 23 Aug 2020 00:22:06 -0400 Subject: Save coverage to a file 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. --- pango/pangofc-fontmap.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'pango/pangofc-fontmap.c') 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); -- cgit v1.2.1