[glib/gobject-speedups: 6/20] Improve GObject perf test




commit 19081d78c57e05d147620f3e7e2643927ad74841
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Sep 29 07:17:46 2021 -0400

    Improve GObject perf test
    
    Make the 'complex construction' case more
    realistic by adding a string property.
    
    And mark the properties as G_PARAM_STATIC_NAME,
    since this enables some optimizations.

 tests/gobject/performance.c | 133 +++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 120 insertions(+), 13 deletions(-)
---
diff --git a/tests/gobject/performance.c b/tests/gobject/performance.c
index 5208172bde..d15d3be8ec 100644
--- a/tests/gobject/performance.c
+++ b/tests/gobject/performance.c
@@ -254,7 +254,7 @@ struct _ComplexObject
 {
   GObject parent_instance;
   int val1;
-  int val2;
+  char *val2;
 };
 
 struct _ComplexObjectClass
@@ -298,6 +298,10 @@ static guint complex_signals[COMPLEX_LAST_SIGNAL] = { 0 };
 static void
 complex_object_finalize (GObject *object)
 {
+  ComplexObject *c = COMPLEX_OBJECT (object);
+
+  g_free (c->val2);
+
   G_OBJECT_CLASS (complex_object_parent_class)->finalize (object);
 }
 
@@ -315,7 +319,8 @@ complex_object_set_property (GObject         *object,
       complex->val1 = g_value_get_int (value);
       break;
     case PROP_VAL2:
-      complex->val2 = g_value_get_int (value);
+      g_free (complex->val2);
+      complex->val2 = g_value_dup_string (value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -337,7 +342,7 @@ complex_object_get_property (GObject         *object,
       g_value_set_int (value, complex->val1);
       break;
     case PROP_VAL2:
-      g_value_set_int (value, complex->val2);
+      g_value_set_string (value, complex->val2);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -413,16 +418,14 @@ complex_object_class_init (ComplexObjectClass *class)
                                                     0,
                                                     G_MAXINT,
                                                     42,
-                                                    G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
+                                                    G_PARAM_STATIC_NAME | G_PARAM_CONSTRUCT | 
G_PARAM_READWRITE));
   g_object_class_install_property (object_class,
                                   PROP_VAL2,
-                                  g_param_spec_int ("val2",
-                                                    "val2",
-                                                    "val2",
-                                                    0,
-                                                    G_MAXINT,
-                                                    43,
-                                                    G_PARAM_READWRITE));
+                                  g_param_spec_string ("val2",
+                                                       "val2",
+                                                       "val2",
+                                                       NULL,
+                                                       G_PARAM_STATIC_NAME | G_PARAM_READWRITE));
 
 
 }
@@ -445,7 +448,7 @@ complex_test_iface_init (gpointer         g_iface,
 static void
 complex_object_init (ComplexObject *complex_object)
 {
-  complex_object->val2 = 43;
+  complex_object->val1 = 42;
 }
 
 /*************************************************************
@@ -501,6 +504,69 @@ test_construction_run (PerformanceTest *test,
     objects[i] = g_object_new (type, NULL);
 }
 
+static void
+test_construction_run1 (PerformanceTest *test,
+                       gpointer _data)
+{
+  struct ConstructionTest *data = _data;
+  GObject **objects = data->objects;
+  int i, n_objects;
+
+  n_objects = data->n_objects;
+  for (i = 0; i < n_objects; i++)
+    objects[i] = (GObject *) g_slice_new0 (SimpleObject);
+}
+
+static void
+test_complex_construction_run (PerformanceTest *test,
+                               gpointer _data)
+{
+  struct ConstructionTest *data = _data;
+  GObject **objects = data->objects;
+  GType type = data->type;
+  int i, n_objects;
+
+  n_objects = data->n_objects;
+  for (i = 0; i < n_objects; i++)
+    objects[i] = g_object_new (type, "val1", 5, "val2", "thousand", NULL);
+}
+
+static void
+test_complex_construction_run1 (PerformanceTest *test,
+                                gpointer _data)
+{
+  struct ConstructionTest *data = _data;
+  GObject **objects = data->objects;
+  GType type = data->type;
+  int i, n_objects;
+
+  n_objects = data->n_objects;
+  for (i = 0; i < n_objects; i++)
+    {
+      ComplexObject *object;
+      object = (ComplexObject *)g_object_new (type, NULL);
+      object->val1 = 5;
+      object->val2 = g_strdup ("thousand");
+      objects[i] = (GObject *)object;
+    }
+}
+
+static void
+test_complex_construction_run2 (PerformanceTest *test,
+                                gpointer _data)
+{
+  struct ConstructionTest *data = _data;
+  GObject **objects = data->objects;
+  GType type = data->type;
+  int i, n_objects;
+
+  n_objects = data->n_objects;
+  for (i = 0; i < n_objects; i++)
+    {
+      objects[i] = g_object_new (type, NULL);
+    }
+}
+
 static void
 test_construction_finish (PerformanceTest *test,
                          gpointer _data)
@@ -512,6 +578,17 @@ test_construction_finish (PerformanceTest *test,
     g_object_unref (data->objects[i]);
 }
 
+static void
+test_construction_finish1 (PerformanceTest *test,
+                          gpointer _data)
+{
+  struct ConstructionTest *data = _data;
+  int i;
+
+  for (i = 0; i < data->n_objects; i++)
+    g_slice_free (SimpleObject, (SimpleObject *)data->objects[i]);
+}
+
 static void
 test_construction_teardown (PerformanceTest *test,
                            gpointer _data)
@@ -880,12 +957,42 @@ static PerformanceTest tests[] = {
     test_construction_teardown,
     test_construction_print_result
   },
+  {
+    "simple-construction1",
+    simple_object_get_type,
+    test_construction_setup,
+    test_construction_init,
+    test_construction_run1,
+    test_construction_finish1,
+    test_construction_teardown,
+    test_construction_print_result
+  },
   {
     "complex-construction",
     complex_object_get_type,
     test_construction_setup,
     test_construction_init,
-    test_construction_run,
+    test_complex_construction_run,
+    test_construction_finish,
+    test_construction_teardown,
+    test_construction_print_result
+  },
+  {
+    "complex-construction1",
+    complex_object_get_type,
+    test_construction_setup,
+    test_construction_init,
+    test_complex_construction_run1,
+    test_construction_finish,
+    test_construction_teardown,
+    test_construction_print_result
+  },
+  {
+    "complex-construction2",
+    complex_object_get_type,
+    test_construction_setup,
+    test_construction_init,
+    test_complex_construction_run2,
     test_construction_finish,
     test_construction_teardown,
     test_construction_print_result


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]