[glib] signal emission: Allocate instance_and_param with alloca
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] signal emission: Allocate instance_and_param with alloca
- Date: Fri, 9 Mar 2012 10:36:10 +0000 (UTC)
commit bbe4b5719502c934e3a2f931773babd858997e43
Author: Alexander Larsson <alexl redhat com>
Date: Fri Mar 9 09:32:06 2012 +0100
signal emission: Allocate instance_and_param with alloca
This Gives a 5% performance increase in e.g. the emit-handled test.
gobject/gsignal.c | 10 ++++------
1 files changed, 4 insertions(+), 6 deletions(-)
---
diff --git a/gobject/gsignal.c b/gobject/gsignal.c
index fafe0ae..a45b334 100644
--- a/gobject/gsignal.c
+++ b/gobject/gsignal.c
@@ -2121,7 +2121,8 @@ g_signal_chain_from_overridden_handler (gpointer instance,
va_start (var_args, instance);
signal_return_type = node->return_type;
- instance_and_params = g_slice_alloc0 (sizeof (GValue) * (n_params + 1));
+ instance_and_params = g_alloca (sizeof (GValue) * (n_params + 1));
+ memset (instance_and_params, 0, sizeof (GValue) * (n_params + 1));
param_values = instance_and_params + 1;
for (i = 0; i < node->n_params; i++)
@@ -2146,7 +2147,6 @@ g_signal_chain_from_overridden_handler (gpointer instance,
while (i--)
g_value_unset (param_values + i);
- g_slice_free1 (sizeof (GValue) * (n_params + 1), instance_and_params);
va_end (var_args);
return;
}
@@ -2207,7 +2207,6 @@ g_signal_chain_from_overridden_handler (gpointer instance,
for (i = 0; i < n_params; i++)
g_value_unset (param_values + i);
g_value_unset (instance_and_params);
- g_slice_free1 (sizeof (GValue) * (n_params + 1), instance_and_params);
va_end (var_args);
@@ -3256,7 +3255,8 @@ g_signal_emit_valist (gpointer instance,
n_params = node->n_params;
signal_return_type = node->return_type;
- instance_and_params = g_slice_alloc0 (sizeof (GValue) * (n_params + 1));
+ instance_and_params = g_alloca (sizeof (GValue) * (n_params + 1));
+ memset (instance_and_params, 0, sizeof (GValue) * (n_params + 1));
param_values = instance_and_params + 1;
for (i = 0; i < node->n_params; i++)
@@ -3281,7 +3281,6 @@ g_signal_emit_valist (gpointer instance,
while (i--)
g_value_unset (param_values + i);
- g_slice_free1 (sizeof (GValue) * (n_params + 1), instance_and_params);
return;
}
SIGNAL_LOCK ();
@@ -3323,7 +3322,6 @@ g_signal_emit_valist (gpointer instance,
for (i = 0; i < n_params; i++)
g_value_unset (param_values + i);
g_value_unset (instance_and_params);
- g_slice_free1 (sizeof (GValue) * (n_params + 1), instance_and_params);
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]