diff options
author | Niels De Graef <nielsdegraef@gmail.com> | 2021-01-16 10:55:29 +0100 |
---|---|---|
committer | Niels De Graef <nielsdegraef@gmail.com> | 2021-01-16 10:55:29 +0100 |
commit | 935eb7fc426244cd0e24c8b858c17482d0a88853 (patch) | |
tree | 7f9bdf6dcb13d08a8dfad792d5aa15817d66b44a | |
parent | 6d2b699483d24e9d3bab244dd9693bd9a002414c (diff) | |
download | gcr-935eb7fc426244cd0e24c8b858c17482d0a88853.tar.gz |
gcr, ui: Use NULL for "simple" signals
Apart from being less code, this actually gives us a nice performance
improvement. Up until a few years ago, if you pass `NULL` as the
marshaller for a signal, GLib would fall back to
`g_cclosure_marshal_generic` which uses libffi to pack/unpack its
arguments. One could avoid this by specifying a more specific
marshaller which would then be used to immediately pack and unpack into
GValues with the correct type.
Lately however, as a way of optimizing signal emission (which can be
quite expensive), GLib added a possibility to set a va_marshaller, which
skips the unnecessary GValue packing and unpacking and just uses a
valist variant.
Since the performance difference is big enough, if the marshaller
argument is NULL, `g_signal_new()` will now check for the simple
marshallers (return type NONE and a single argument) and set both the
generic and the valist marshaller. In other words, less code for us with
bigger optimizations.
In case you also want va_marshallers for more complex signals, you can
use `g_signal_set_va_marshaller()`.
-rw-r--r-- | gcr/gcr-collection.c | 4 | ||||
-rw-r--r-- | gcr/gcr-parser.c | 2 | ||||
-rw-r--r-- | gcr/gcr-prompt.c | 2 | ||||
-rw-r--r-- | ui/gcr-import-button.c | 2 | ||||
-rw-r--r-- | ui/gcr-live-search.c | 3 | ||||
-rw-r--r-- | ui/gcr-renderer.c | 2 | ||||
-rw-r--r-- | ui/gcr-unlock-renderer.c | 2 |
7 files changed, 8 insertions, 9 deletions
diff --git a/gcr/gcr-collection.c b/gcr/gcr-collection.c index 576ba4c..54c4667 100644 --- a/gcr/gcr-collection.c +++ b/gcr/gcr-collection.c @@ -69,7 +69,7 @@ gcr_collection_default_init (GcrCollectionIface *iface) */ signals[ADDED] = g_signal_new ("added", GCR_TYPE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GcrCollectionIface, added), - NULL, NULL, g_cclosure_marshal_VOID__OBJECT, + NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_OBJECT); /** @@ -81,7 +81,7 @@ gcr_collection_default_init (GcrCollectionIface *iface) */ signals[REMOVED] = g_signal_new ("removed", GCR_TYPE_COLLECTION, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GcrCollectionIface, removed), - NULL, NULL, g_cclosure_marshal_VOID__OBJECT, + NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_OBJECT); g_once_init_leave (&initialized, 1); diff --git a/gcr/gcr-parser.c b/gcr/gcr-parser.c index f841535..adec310 100644 --- a/gcr/gcr-parser.c +++ b/gcr/gcr-parser.c @@ -2505,7 +2505,7 @@ gcr_parser_class_init (GcrParserClass *klass) */ signals[PARSED] = g_signal_new ("parsed", GCR_TYPE_PARSER, G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GcrParserClass, parsed), - NULL, NULL, g_cclosure_marshal_VOID__VOID, + NULL, NULL, NULL, G_TYPE_NONE, 0); init_quarks (); diff --git a/gcr/gcr-prompt.c b/gcr/gcr-prompt.c index 997c819..403f796 100644 --- a/gcr/gcr-prompt.c +++ b/gcr/gcr-prompt.c @@ -248,7 +248,7 @@ gcr_prompt_default_init (GcrPromptIface *iface) */ signals[PROMPT_CLOSE] = g_signal_new ("prompt-close", GCR_TYPE_PROMPT, G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GcrPromptIface, prompt_close), - NULL, NULL, g_cclosure_marshal_generic, + NULL, NULL, NULL, G_TYPE_NONE, 0); g_once_init_leave (&initialized, 1); diff --git a/ui/gcr-import-button.c b/ui/gcr-import-button.c index f2ba6dc..56de3e7 100644 --- a/ui/gcr-import-button.c +++ b/ui/gcr-import-button.c @@ -524,7 +524,7 @@ gcr_import_button_class_init (GcrImportButtonClass *klass) */ signals[IMPORTING] = g_signal_new ("importing", GCR_TYPE_IMPORT_BUTTON, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GcrImportButtonClass, importing), - NULL, NULL, g_cclosure_marshal_VOID__OBJECT, + NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_OBJECT); /** diff --git a/ui/gcr-live-search.c b/ui/gcr-live-search.c index 39272aa..a70bf30 100644 --- a/ui/gcr-live-search.c +++ b/ui/gcr-live-search.c @@ -491,8 +491,7 @@ _gcr_live_search_class_init (GcrLiveSearchClass *klass) G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST, 0, - NULL, NULL, - g_cclosure_marshal_VOID__VOID, + NULL, NULL, NULL, G_TYPE_NONE, 0); signals[KEYNAV] = g_signal_new ("key-navigation", diff --git a/ui/gcr-renderer.c b/ui/gcr-renderer.c index cd91190..4f76793 100644 --- a/ui/gcr-renderer.c +++ b/ui/gcr-renderer.c @@ -113,7 +113,7 @@ gcr_renderer_default_init (GcrRendererIface *iface) */ signals[DATA_CHANGED] = g_signal_new ("data-changed", GCR_TYPE_RENDERER, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GcrRendererIface, data_changed), - NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + NULL, NULL, NULL, G_TYPE_NONE, 0); initialized = TRUE; } diff --git a/ui/gcr-unlock-renderer.c b/ui/gcr-unlock-renderer.c index 7cb1b2e..f32dfef 100644 --- a/ui/gcr-unlock-renderer.c +++ b/ui/gcr-unlock-renderer.c @@ -216,7 +216,7 @@ _gcr_unlock_renderer_class_init (GcrUnlockRendererClass *klass) signals[UNLOCK_CLICKED] = g_signal_new ("unlock-clicked", GCR_TYPE_UNLOCK_RENDERER, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GcrUnlockRendererClass, unlock_clicked), - NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + NULL, NULL, NULL, G_TYPE_NONE, 0); } static void |