diff options
author | Edward Hervey <bilboed@bilboed.com> | 2009-12-02 08:57:54 +0100 |
---|---|---|
committer | Edward Hervey <bilboed@bilboed.com> | 2009-12-29 13:13:23 +0100 |
commit | 0924b3fa4a12afc46b9b79a49564edc584d160e7 (patch) | |
tree | 2fdcdee6ff0a4c0a2e7498db43a4697cd706f623 | |
parent | 11586629bf07a528c98f184c32b13adcd8f33b9b (diff) |
g_value_set_pointer: reduce calls to g_type_value_table_peek
Trims off 8% cpu time from calling this method.
-rw-r--r-- | gobject/gvalue.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/gobject/gvalue.c b/gobject/gvalue.c index 46a03d535..1315fd8d8 100644 --- a/gobject/gvalue.c +++ b/gobject/gvalue.c @@ -350,18 +350,22 @@ g_value_set_instance (GValue *value, GTypeValueTable *value_table; GTypeCValue cvalue; gchar *error_msg; - + g_return_if_fail (G_IS_VALUE (value)); + g_type = G_VALUE_TYPE (value); + value_table = g_type_value_table_peek (g_type); + g_return_if_fail (strcmp (value_table->collect_format, "p") == 0); + if (instance) { g_return_if_fail (G_TYPE_CHECK_INSTANCE (instance)); - g_return_if_fail (VALUE_TYPE_COMPATIBLE (G_TYPE_FROM_INSTANCE (instance), G_VALUE_TYPE (value))); + /* This is the expanded value of VALUE_TYPE_COMPATIBLE, but re-using the value-table + * we have already queried force the value. This avoids calling + * g_value_table_peek() twice. Saves 8% cpu time on calling this method */ + g_return_if_fail (g_type_is_a (G_TYPE_FROM_INSTANCE(instance), g_type) && + value_table == g_type_value_table_peek (G_TYPE_FROM_INSTANCE (instance))); } - g_type = G_VALUE_TYPE (value); - value_table = g_type_value_table_peek (g_type); - - g_return_if_fail (strcmp (value_table->collect_format, "p") == 0); memset (&cvalue, 0, sizeof (cvalue)); cvalue.v_pointer = instance; |