summaryrefslogtreecommitdiff
path: root/xdelta3/examples/speed_test.c
diff options
context:
space:
mode:
authorjosh.macdonald <jmacd@users.noreply.github.com>2007-10-21 07:26:33 +0000
committerjosh.macdonald <jmacd@users.noreply.github.com>2007-10-21 07:26:33 +0000
commitf79ab343e49f89be06ede199a022eb3da07fd36b (patch)
tree669c4e47acbd067ba23a436bc8f876986f6383da /xdelta3/examples/speed_test.c
parentd14c20c9747073d2752af20cb5f5c55725fe3db1 (diff)
New speed tes.t
Diffstat (limited to 'xdelta3/examples/speed_test.c')
-rw-r--r--xdelta3/examples/speed_test.c105
1 files changed, 105 insertions, 0 deletions
diff --git a/xdelta3/examples/speed_test.c b/xdelta3/examples/speed_test.c
new file mode 100644
index 0000000..9e5a91f
--- /dev/null
+++ b/xdelta3/examples/speed_test.c
@@ -0,0 +1,105 @@
1/* Copyright (C) 2007 Josh MacDonald */
2
3#define NOT_MAIN 1
4
5#include "xdelta3.h"
6#include "xdelta3.c"
7
8usize_t bench_speed(const uint8_t *from_buf, const size_t from_len,
9 const uint8_t *to_buf, const size_t to_len,
10 uint8_t *delta_buf, const size_t delta_alloc,
11 int flags) {
12 usize_t delta_size;
13 int ret = xd3_encode_memory(to_buf, to_len, from_buf, from_len,
14 delta_buf, &delta_size, delta_alloc, flags);
15 if (ret != 0) {
16 fprintf(stderr, "encode failure: %d\n", ret);
17 abort();
18 }
19 return delta_size;
20}
21
22int read_whole_file(const char *name,
23 uint8_t **buf_ptr,
24 size_t *buf_len) {
25 main_file file;
26 int ret;
27 xoff_t len;
28 size_t nread;
29 main_file_init(&file);
30 file.filename = name;
31 ret = main_file_open(&file, name, XO_READ);
32 if (ret != 0) {
33 goto exit;
34 }
35 ret = main_file_stat(&file, &len, 1);
36 if (ret != 0) {
37 goto exit;
38 }
39
40 (*buf_len) = (size_t)len;
41 (*buf_ptr) = main_malloc(*buf_len);
42 ret = main_file_read(&file, *buf_ptr, *buf_len, &nread,
43 "read failed");
44 if (ret == 0 && *buf_len == nread) {
45 ret = 0;
46 } else {
47 fprintf(stderr, "invalid read\n");
48 ret = XD3_INTERNAL;
49 }
50 exit:
51 main_file_cleanup(&file);
52 return ret;
53}
54
55int main(int argc, char **argv) {
56 int repeat;
57 char *from, *to;
58 uint8_t *from_buf = NULL, *to_buf = NULL, *delta_buf = NULL;
59 size_t from_len, to_len, delta_alloc, delta_size = 0;
60 long start, finish;
61 int i, ret;
62 int flags = XD3_COMPLEVEL_1;
63
64 if (argc != 4) {
65 fprintf(stderr, "usage: speed_test COUNT FROM TO\n");
66 return 1;
67 }
68
69 repeat = atoi(argv[1]);
70 from = argv[2];
71 to = argv[3];
72
73 if ((ret = read_whole_file(from, &from_buf, &from_len)) ||
74 (ret = read_whole_file(to, &to_buf, &to_len))) {
75 fprintf(stderr, "read_whole_file error\n");
76 goto exit;
77 }
78
79 delta_alloc = to_len * 11 / 10;
80 delta_buf = main_malloc(delta_alloc);
81
82 start = get_millisecs_now();
83
84 for (i = 0; i < repeat; ++i) {
85 delta_size = bench_speed(from_buf, from_len, to_buf, to_len, delta_buf, delta_alloc, flags);
86 }
87
88 finish = get_millisecs_now();
89
90 fprintf(stderr,
91 "STAT: encode %3ld ms from %s to %s repeat %d %dbit delta %d\n",
92 (finish - start) / repeat, from, to, repeat, sizeof (xoff_t) * 8, delta_size);
93
94 ret = 0;
95
96 if (0) {
97 exit:
98 ret = 1;
99 }
100
101 main_free(to_buf);
102 main_free(from_buf);
103 main_free(delta_buf);
104 return ret;
105}