]> git.wincent.com - wikitext.git/commitdiff
Instrument array functions to pick optimal buffer size
authorWincent Colaiuta <win@wincent.com>
Mon, 4 Feb 2008 22:35:40 +0000 (23:35 +0100)
committerWincent Colaiuta <win@wincent.com>
Mon, 4 Feb 2008 22:35:40 +0000 (23:35 +0100)
Add basic instrumentation to the array wrapper functions to see how big
they grow in typical use. Running the entire spec suite the lengthiest
array seen had 26 entries, so we'll use this information in setting a
default size in our custom array implementation.

64 entries (64 bytes) is probably more than enough for most uses.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
ext/ary.h

index 3a87c911ce6823bc8aa46e256d55693c42effd4b..964953ebb0c879d10e8a0d5a6c6f33b8a4483f1d 100644 (file)
--- a/ext/ary.h
+++ b/ext/ary.h
@@ -29,9 +29,22 @@ inline VALUE ary_delete_at(VALUE ary, long idx)
     return rb_ary_delete_at(ary, idx);
 }
 
+#ifdef DEBUG
+long max_len = 0;
+#endif
+
 inline VALUE ary_push(VALUE ary, VALUE obj)
 {
-    return rb_ary_push(ary, obj);
+    VALUE ret = rb_ary_push(ary, obj);
+#ifdef DEBUG
+    if (RARRAY_LEN(ary) > max_len)
+    {
+        // in typical work loads the array length goes no higher than 25 or 26
+        max_len++;
+        printf("max len %d\n", max_len);
+    }
+#endif /* DEBUG */
+    return ret;
 }
 
 inline VALUE ary_includes(VALUE ary, VALUE obj)