X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=hello%2Fhello.c;h=d6750d061d349dee41628d3c671aef6d6389708f;hb=98963de4a2dfae12d8aafa0f9a6d97cf4a44e12d;hp=2e74505ce08e74290f0fa670057631a7268b48f2;hpb=9c67dc50afb2eaa1c3966ee73fac3ce55935556c;p=ust.git diff --git a/hello/hello.c b/hello/hello.c index 2e74505..d6750d0 100644 --- a/hello/hello.c +++ b/hello/hello.c @@ -34,15 +34,19 @@ int safe_printf(const char *fmt, ...) va_end(ap); } +struct consumer_channel { + int fd; + struct ltt_channel_struct *chan; +}; + int consumer(void *arg) { int result; - int fd; - char str[] = "Hello, this is the consumer.\n"; - struct ltt_trace_struct *trace; + struct consumer_channel *consumer_channels; + int i; ltt_lock_traces(); trace = _ltt_trace_find(trace_name); @@ -53,43 +57,91 @@ int consumer(void *arg) return 1; } - CPRINTF("consumer: got a trace: %s with %d channels\n", trace_name, trace->nr_channels); - - struct ltt_channel_struct *chan = &trace->channels[0]; + consumer_channels = (struct consumer_channel *) malloc(trace->nr_channels * sizeof(struct consumer_channel)); + if(consumer_channels == NULL) { + ERR("malloc returned NULL"); + return 1; + } - CPRINTF("channel 1 (%s) active=%u", chan->channel_name, chan->active & 1); + CPRINTF("opening trace files"); + for(i=0; inr_channels; i++) { + char tmp[100]; + struct ltt_channel_struct *chan = &trace->channels[i]; - struct rchan *rchan = chan->trans_channel_data; - struct rchan_buf *rbuf = rchan->buf; - struct ltt_channel_buf_struct *lttbuf = chan->buf; - long consumed_old; + consumer_channels[i].chan = chan; - result = fd = open("trace.out", O_WRONLY | O_CREAT | O_TRUNC, 00644); - if(result == -1) { - perror("open"); - return -1; + snprintf(tmp, sizeof(tmp), "trace/%s", chan->channel_name); + result = consumer_channels[i].fd = open(tmp, O_WRONLY | O_CREAT | O_TRUNC, 00644); + if(result == -1) { + perror("open"); + return -1; + } + CPRINTF("\topened trace file %s", tmp); + } + CPRINTF("done opening trace files"); for(;;) { - write(STDOUT_FILENO, str, sizeof(str)); - - result = ltt_do_get_subbuf(rbuf, lttbuf, &consumed_old); - if(result < 0) { - CPRINTF("ltt_do_get_subbuf: error: %s", strerror(-result)); + /*wait*/ + + for(i=0; inr_channels; i++) { + struct rchan *rchan = consumer_channels[i].chan->trans_channel_data; + struct rchan_buf *rbuf = rchan->buf; + struct ltt_channel_buf_struct *lttbuf = consumer_channels[i].chan->buf; + long consumed_old; + + result = ltt_do_get_subbuf(rbuf, lttbuf, &consumed_old); + if(result < 0) { + CPRINTF("ltt_do_get_subbuf: error: %s", strerror(-result)); + } + else { + CPRINTF("success!"); + + result = write(consumer_channels[i].fd, rbuf->buf_data + (consumed_old & (2 * 4096-1)), 4096); + ltt_do_put_subbuf(rbuf, lttbuf, consumed_old); + } } - else { - CPRINTF("success!"); - - result = write(fd, rbuf->buf_data + (consumed_old & (2 * 4096-1)), 4096); - ltt_do_put_subbuf(rbuf, lttbuf, consumed_old); - } - - //CPRINTF("There seems to be %ld bytes available", SUBBUF_TRUNC(local_read(<tbuf->offset), rbuf->chan) - consumed_old); - CPRINTF("Commit count %ld", local_read(<tbuf->commit_count[0])); - sleep(1); } + +// CPRINTF("consumer: got a trace: %s with %d channels\n", trace_name, trace->nr_channels); +// +// struct ltt_channel_struct *chan = &trace->channels[0]; +// +// CPRINTF("channel 1 (%s) active=%u", chan->channel_name, chan->active & 1); + +// struct rchan *rchan = chan->trans_channel_data; +// struct rchan_buf *rbuf = rchan->buf; +// struct ltt_channel_buf_struct *lttbuf = chan->buf; +// long consumed_old; +// +// result = fd = open("trace.out", O_WRONLY | O_CREAT | O_TRUNC, 00644); +// if(result == -1) { +// perror("open"); +// return -1; +// } + +// for(;;) { +// write(STDOUT_FILENO, str, sizeof(str)); +// +// result = ltt_do_get_subbuf(rbuf, lttbuf, &consumed_old); +// if(result < 0) { +// CPRINTF("ltt_do_get_subbuf: error: %s", strerror(-result)); +// } +// else { +// CPRINTF("success!"); +// +// result = write(fd, rbuf->buf_data + (consumed_old & (2 * 4096-1)), 4096); +// ltt_do_put_subbuf(rbuf, lttbuf, consumed_old); +// } +// +// //CPRINTF("There seems to be %ld bytes available", SUBBUF_TRUNC(local_read(<tbuf->offset), rbuf->chan) - consumed_old); +// CPRINTF("Commit count %ld", local_read(<tbuf->commit_count[0])); +// +// +// sleep(1); +// } } void start_consumer(void) @@ -144,6 +196,7 @@ int init_int_handler(void) int main() { int result; + int i; init_int_handler(); @@ -162,7 +215,9 @@ int main() //result = ltt_marker_connect("metadata", "testev", "default"); //if(result) // ERR("ltt_marker_connect"); - + result = ltt_marker_connect("foo", "bar", "default"); + if(result) + ERR("ltt_marker_connect"); result = ltt_trace_setup(trace_name); if(result < 0) { @@ -192,19 +247,23 @@ int main() printf("Hello, World!\n"); sleep(1); - for(;;) { + for(i=0; i<50; i++) { //trace_mark(abc, testmark, "", MARK_NOARGS); //trace_mark(metadata, testev, "", MARK_NOARGS); - trace_mark(metadata, core_marker_id, - "channel %s name %s event_id %hu " - "int #1u%zu long #1u%zu pointer #1u%zu " - "size_t #1u%zu alignment #1u%u", - "abc", "def", (unsigned short)1000, - sizeof(int), sizeof(long), sizeof(void *), - sizeof(size_t), ltt_get_alignment()); + trace_mark(foo, bar, "%s", "FOOBAZ"); + //trace_mark(metadata, core_marker_id, + // "channel %s name %s event_id %hu " + // "int #1u%zu long #1u%zu pointer #1u%zu " + // "size_t #1u%zu alignment #1u%u", + // "abc", "def", (unsigned short)1000, + // sizeof(int), sizeof(long), sizeof(void *), + // sizeof(size_t), ltt_get_alignment()); usleep(100000); } + ltt_trace_stop(trace_name); + ltt_trace_destroy(trace_name); + scanf("%*s"); return 0;