From 67e9d139504b942552c769791a0e7657e840d872 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Sat, 2 Dec 2017 12:22:47 +0000 Subject: [PATCH] info: fix performance issue with registering categories after gst_init() When registering a new debug category after gst_init(), simply check the existing patterns against that new category. No need to iterate over all categories and recheck them all against the existing patterns. Also, no need to re-parse the existing pattern string set via GST_DEBUG and add the same set of match patterns all over again to the existing list of match patterns every time we register a new debug category. Combined with iterating all debug categories on a change this would make adding debug categories after gst_init() very very very slow. --- gst/gstinfo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/gst/gstinfo.c b/gst/gstinfo.c index 6500f2249e..79b43c1433 100644 --- a/gst/gstinfo.c +++ b/gst/gstinfo.c @@ -1692,6 +1692,18 @@ gst_debug_unset_threshold_for_name (const gchar * name) gst_debug_reset_all_thresholds (); } +static void +gst_debug_apply_patterns_to_category (GstDebugCategory * cat) +{ + GSList *l; + + g_mutex_lock (&__level_name_mutex); + for (l = __level_name; l != NULL; l = l->next) { + for_each_threshold_by_entry (cat, (LevelNameEntry *) l->data); + } + g_mutex_unlock (&__level_name_mutex); +} + GstDebugCategory * _gst_debug_category_new (const gchar * name, guint color, const gchar * description) @@ -1726,7 +1738,7 @@ _gst_debug_category_new (const gchar * name, guint color, /* ensure the filter is applied to categories registered after _debug_init */ if (_gst_debug_filter) { - gst_debug_set_threshold_from_string (_gst_debug_filter, FALSE); + gst_debug_apply_patterns_to_category (cat); } return cat;