5 #include <l4/util/rdtsc.h>
6 #include <l4/util/util.h>
9 #include <l4/plr/measurements.h>
11 Measurements::EventBuf eb;
13 unsigned char buffer[1024 * 1024];
18 eb.set_buffer(buffer, sizeof(buffer));
19 printf("EB.buf = %p, size %d, index %d\n",
20 eb.buffer, eb.size, eb.index);
22 printf("Generating 200 events...\n");
23 for (unsigned i = 0; i < 100; ++i) {
25 Measurements::GenericEvent* ev = eb.next();
26 ev->header.tsc = l4_rdtsc();
27 ev->header.vcpu = 0x1234;
28 ev->header.type = Measurements::Foo;
29 ev->data.foo.start = 1;
30 printf("%d %llx\n", ev->header.type, ev->header.tsc);
32 l4_sleep(random() % 100);
35 ev->header.tsc = l4_rdtsc();
36 ev->header.vcpu = 0x1234;
37 ev->header.type = Measurements::Foo;
38 ev->data.foo.start = 0;
41 printf("EB.buf = %p, size %d, index %d\n",
42 eb.buffer, eb.size, eb.index);
43 printf("EB.oldest = %d\n", eb.oldest());
45 char const *filename = "sampledump.txt";
47 unsigned oldest = eb.oldest();
48 unsigned dump_start, dump_size;
50 if (oldest == 0) { // half-full -> dump from 0 to index
52 dump_size = eb.index * sizeof(Measurements::GenericEvent);
53 } else { // buffer completely full -> dump full size starting from oldest entry
54 dump_start = oldest * sizeof(Measurements::GenericEvent);
55 dump_size = eb.size * sizeof(Measurements::GenericEvent);
58 uu_dumpz_ringbuffer(filename, eb.buffer, eb.size * sizeof(Measurements::GenericEvent),
59 dump_start, dump_size);