From: Christian Hergert Date: Wed, 27 Sep 2023 01:28:11 +0000 (-0700) Subject: gsk: remove excessive type checking within GSK X-Git-Tag: archive/raspbian/4.12.4+ds-3+rpi1^2~21^2~1^2~3 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=28e97f028ad4cc26ecda4dde6735f28967e0f2cb;p=gtk4.git gsk: remove excessive type checking within GSK Anything that includes gskrendernodeprivate.h will get an alternate form of ref/unref for render nodes which does not need to do type checking on the parameter. We can expect that things are correct within GTK itself and this saves excessive amounts of TypeNode conformities checking. --- diff --git a/gsk/gskrendernode.c b/gsk/gskrendernode.c index bd640c6179..ed7ec05f97 100644 --- a/gsk/gskrendernode.c +++ b/gsk/gskrendernode.c @@ -287,15 +287,21 @@ gsk_render_node_alloc (GskRenderNodeType node_type) * Returns: (transfer full): the `GskRenderNode` with an additional reference */ GskRenderNode * -gsk_render_node_ref (GskRenderNode *node) +(gsk_render_node_ref) (GskRenderNode *node) { g_return_val_if_fail (GSK_IS_RENDER_NODE (node), NULL); - g_atomic_ref_count_inc (&node->ref_count); + return _gsk_render_node_ref (node); +} - return node; +void +_gsk_render_node_unref (GskRenderNode *node) +{ + if G_UNLIKELY (g_atomic_ref_count_dec (&node->ref_count)) + GSK_RENDER_NODE_GET_CLASS (node)->finalize (node); } + /** * gsk_render_node_unref: * @node: (transfer full): a `GskRenderNode` @@ -306,12 +312,11 @@ gsk_render_node_ref (GskRenderNode *node) * freed. */ void -gsk_render_node_unref (GskRenderNode *node) +(gsk_render_node_unref) (GskRenderNode *node) { g_return_if_fail (GSK_IS_RENDER_NODE (node)); - if (g_atomic_ref_count_dec (&node->ref_count)) - GSK_RENDER_NODE_GET_CLASS (node)->finalize (node); + _gsk_render_node_unref (node); } diff --git a/gsk/gskrendernodeprivate.h b/gsk/gskrendernodeprivate.h index 4ad79bd593..9cf453d13f 100644 --- a/gsk/gskrendernodeprivate.h +++ b/gsk/gskrendernodeprivate.h @@ -57,6 +57,8 @@ GType gsk_render_node_type_register_static (const char gpointer gsk_render_node_alloc (GskRenderNodeType node_type); +void _gsk_render_node_unref (GskRenderNode *node); + gboolean gsk_render_node_can_diff (const GskRenderNode *node1, const GskRenderNode *node2) G_GNUC_PURE; void gsk_render_node_diff (GskRenderNode *node1, @@ -87,6 +89,15 @@ gboolean gsk_container_node_is_disjoint (const GskRenderNode gboolean gsk_render_node_use_offscreen_for_opacity (const GskRenderNode *node); +#define gsk_render_node_ref(node) _gsk_render_node_ref(node) +#define gsk_render_node_unref(node) _gsk_render_node_unref(node) + +static inline GskRenderNode * +_gsk_render_node_ref (GskRenderNode *node) +{ + g_atomic_ref_count_inc (&node->ref_count); + return node; +} G_END_DECLS