]> git.ozlabs.org Git - ccan/blobdiff - ccan/tal/benchmark/samba-allocs.c
tal: don't always allocate an array in the samba benchmark.
[ccan] / ccan / tal / benchmark / samba-allocs.c
index 853b1fb207b6d471742e4710d91756c0cbb25185..e25c7e9b69163996c96ad22081307ad24b729355 100644 (file)
@@ -141,8 +141,14 @@ static int unused_talloc_destructor(void *p)
 static void do_tallocs(struct node *node)
 {
        unsigned int i;
-
-       node->n = talloc_size(node->parent ? node->parent->n : NULL, node->len);
+       static int count;
+
+       if (count++ % 16 == 0)
+               node->n = talloc_array(node->parent ? node->parent->n : NULL,
+                                      char, node->len);
+       else
+               node->n = talloc_size(node->parent ? node->parent->n : NULL,
+                                     node->len);
        if (node->destructor)
                talloc_set_destructor(node->n, unused_talloc_destructor);
        if (node->name)
@@ -169,9 +175,18 @@ static void unused_tal_destructor(void *p)
 static void do_tals(struct node *node)
 {
        unsigned int i;
+       static int count;
+
+       /* Tal pays a penalty for arrays, but we can't tell which is an array
+        * and which isn't.  Grepping samba source gives 1221 talloc_array of
+        * 33137 talloc occurrences, so conservatively assume 1 in 16 */
+       if (count++ % 16 == 0)
+               node->n = tal_arr(node->parent ? node->parent->n : NULL,
+                                 char, node->len);
+       else
+               node->n = tal_alloc_(node->parent ? node->parent->n : NULL,
+                                    node->len, false, TAL_LABEL(type, ""));
 
-       node->n = tal_arr(node->parent ? node->parent->n : NULL,
-                         char, node->len);
        if (node->destructor)
                tal_add_destructor(node->n, unused_tal_destructor);
        if (node->name)