Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
127 lines (105 sloc) 2.94 KB
#include "performance.h"
gint32
sum_gvariant (GVariant *v)
{
guint32 sum;
gint16 a;
gint32 b;
const char *c;
GVariant *list;
guchar d;
guint16 tuple_a;
guchar tuple_b;
gsize len, i;
gint32 list_a;
guint16 list_b;
g_variant_get (v, "(ni&s@a(iq)y(qy))",
&a, &b, &c, &list, &d, &tuple_a, &tuple_b);
sum = a + b + strlen(c) + d + tuple_a + tuple_b;
len = g_variant_n_children (list);
for (i = 0; i < len; i++)
{
g_variant_get_child (list, i, "(iq)", &list_a, &list_b);
sum += list_a + list_b;
}
return sum;
}
gint32
sum_generated (PerformanceContainerRef v)
{
guint32 sum;
PerformanceTupleRef tuple;
PerformanceListRef list;
PerformanceItemRef item;
gsize len, i;
tuple = performance_container_get_tuple (v);
sum = performance_container_get_a(v) +
performance_container_get_b(v) +
strlen(performance_container_get_c(v)) +
performance_container_get_d(v) +
performance_tuple_get_a (tuple) +
performance_tuple_get_b (tuple);
list = performance_container_get_list (v);
len = performance_list_get_length (list);
for (i = 0; i < len; i++)
{
item = performance_list_get_at (list, i);
sum += performance_item_get_a (item) + performance_item_get_b (item);
}
return sum;
}
int
main (int argc,
char *argv[])
{
GVariant *v;
gconstpointer serialized_data;
int i, count = 100000;
guint64 total;
GTimer *timer = g_timer_new ();
PerformanceContainerRef c;
#define DATA "(int16 17, 32, 'foobar', [(44, uint16 12), (48, uint16 14), (99, uint16 100)], byte 128, (uint16 4, byte 11))"
v = g_variant_new_parsed (DATA);
g_assert (g_variant_type_equal (g_variant_get_type (v), PERFORMANCE_CONTAINER_TYPEFORMAT));
/* Ensure data is serialized */
serialized_data = g_variant_get_data (v);
/* Warmup */
total = 0;
for (i = 0; i < 10; i++)
total += sum_gvariant (v);
g_assert (total == 10 * 515);
total = 0;
g_timer_start (timer);
for (i = 0; i < count; i++)
{
total += sum_gvariant (v);
total += sum_gvariant (v);
total += sum_gvariant (v);
total += sum_gvariant (v);
total += sum_gvariant (v);
}
g_timer_stop (timer);
g_assert (total == 5 * count * 515);
g_print ("GVariant performance: %.1f kiloiterations per second\n", (count/1000.0)/g_timer_elapsed (timer, NULL));
c = performance_container_from_gvariant (v);
/* Warmup */
total = 0;
for (i = 0; i < 10; i++)
total += sum_generated (c);
g_assert (total == 10 * 515);
g_timer_reset (timer);
total = 0;
g_timer_start (timer);
for (i = 0; i < count; i++)
{
total += sum_generated (c);
total += sum_generated (c);
total += sum_generated (c);
total += sum_generated (c);
total += sum_generated (c);
}
g_timer_stop (timer);
g_assert (total == 5 * count * 515);
g_print ("Generated performance: %.1f kiloiterations per second\n", (count/1000.0)/g_timer_elapsed (timer, NULL));
return 0;
}
You can’t perform that action at this time.