diff options
author | Colin Walters <walters@verbum.org> | 2014-06-24 07:58:13 -0400 |
---|---|---|
committer | Giuseppe Scrivano <gscrivan@redhat.com> | 2014-12-18 12:48:47 +0100 |
commit | 5c473892438446704e7b3906fa20f9826730dcf6 (patch) | |
tree | 913e3b99e218e70f6df3a36f755f8405d24254d3 /tests/test-rollsum.c | |
parent | ca678224bed203b15b96002dc7b2a949e77281d4 (diff) | |
download | ostree-5c473892438446704e7b3906fa20f9826730dcf6.tar.gz |
test-rollsum: Process all input, print more statistics
Copying the bup code, we need to loop over all chunks even after
hitting the rollsum returning 0.
Also print more statistics.
Diffstat (limited to 'tests/test-rollsum.c')
-rw-r--r-- | tests/test-rollsum.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/tests/test-rollsum.c b/tests/test-rollsum.c index f33ec2bb..1b9174cc 100644 --- a/tests/test-rollsum.c +++ b/tests/test-rollsum.c @@ -31,17 +31,27 @@ rollsum_checksums_for_data (GBytes *bytes) { const guint8 *start; gsize len; + gboolean rollsum_end = FALSE; GPtrArray *ret = g_ptr_array_new_with_free_func ((GDestroyNotify)g_variant_unref); start = g_bytes_get_data (bytes, &len); - while (TRUE) + while (len > 0) { int offset, bits; - offset = bupsplit_find_ofs (start, MIN(G_MAXINT32, len), &bits); - if (offset == 0) - break; - if (offset > BLOB_MAX) - offset = BLOB_MAX; + if (!rollsum_end) + { + offset = bupsplit_find_ofs (start, MIN(G_MAXINT32, len), &bits); + if (offset == 0) + { + rollsum_end = TRUE; + offset = MIN(BLOB_MAX, len); + } + else if (offset > BLOB_MAX) + offset = BLOB_MAX; + } + else + offset = MIN(BLOB_MAX, len); + { gs_free char *blobcsum = g_compute_checksum_for_data (G_CHECKSUM_SHA256, @@ -103,6 +113,7 @@ main (int argc, char **argv) { guint j; gs_unref_ptrarray GPtrArray *rollsums = NULL; + guint64 this_rollsum_size = 0; path = g_file_new_for_path (argv[i]); bytes = gs_file_map_readonly (path, cancellable, error); @@ -126,9 +137,11 @@ main (int argc, char **argv) g_hash_table_add (sums, g_strdup (csum)); rollsum_size += ofs; } + this_rollsum_size += ofs; } + g_print ("input: rollsum size: %" G_GUINT64_FORMAT "\n", this_rollsum_size); } - g_print ("rollsums:%u input:%" G_GUINT64_FORMAT " output: %" G_GUINT64_FORMAT " speedup:%f\n", + g_print ("rollsum total:%u input:%" G_GUINT64_FORMAT " output: %" G_GUINT64_FORMAT " speedup:%f\n", g_hash_table_size (sums), input_size, rollsum_size, (((double)(input_size+1)) / ((double) rollsum_size + 1))); } |