diff options
Diffstat (limited to 'tools/perf/util/trace-event-info.c')
| -rw-r--r-- | tools/perf/util/trace-event-info.c | 35 | 
1 files changed, 35 insertions, 0 deletions
| diff --git a/tools/perf/util/trace-event-info.c b/tools/perf/util/trace-event-info.c index 5ea8973ad331..b1572601286c 100644 --- a/tools/perf/util/trace-event-info.c +++ b/tools/perf/util/trace-event-info.c | |||
| @@ -154,10 +154,17 @@ static void put_tracing_file(char *file) | |||
| 154 | free(file); | 154 | free(file); | 
| 155 | } | 155 | } | 
| 156 | 156 | ||
| 157 | static ssize_t calc_data_size; | ||
| 158 | |||
| 157 | static ssize_t write_or_die(const void *buf, size_t len) | 159 | static ssize_t write_or_die(const void *buf, size_t len) | 
| 158 | { | 160 | { | 
| 159 | int ret; | 161 | int ret; | 
| 160 | 162 | ||
| 163 | if (calc_data_size) { | ||
| 164 | calc_data_size += len; | ||
| 165 | return len; | ||
| 166 | } | ||
| 167 | |||
| 161 | ret = write(output_fd, buf, len); | 168 | ret = write(output_fd, buf, len); | 
| 162 | if (ret < 0) | 169 | if (ret < 0) | 
| 163 | die("writing to '%s'", output_file); | 170 | die("writing to '%s'", output_file); | 
| @@ -480,6 +487,17 @@ get_tracepoints_path(struct perf_event_attr *pattrs, int nb_events) | |||
| 480 | return nr_tracepoints > 0 ? path.next : NULL; | 487 | return nr_tracepoints > 0 ? path.next : NULL; | 
| 481 | } | 488 | } | 
| 482 | 489 | ||
| 490 | bool have_tracepoints(struct perf_event_attr *pattrs, int nb_events) | ||
| 491 | { | ||
| 492 | int i; | ||
| 493 | |||
| 494 | for (i = 0; i < nb_events; i++) | ||
| 495 | if (pattrs[i].type == PERF_TYPE_TRACEPOINT) | ||
| 496 | return true; | ||
| 497 | |||
| 498 | return false; | ||
| 499 | } | ||
| 500 | |||
| 483 | int read_tracing_data(int fd, struct perf_event_attr *pattrs, int nb_events) | 501 | int read_tracing_data(int fd, struct perf_event_attr *pattrs, int nb_events) | 
| 484 | { | 502 | { | 
| 485 | char buf[BUFSIZ]; | 503 | char buf[BUFSIZ]; | 
| @@ -526,3 +544,20 @@ int read_tracing_data(int fd, struct perf_event_attr *pattrs, int nb_events) | |||
| 526 | 544 | ||
| 527 | return 0; | 545 | return 0; | 
| 528 | } | 546 | } | 
| 547 | |||
| 548 | ssize_t read_tracing_data_size(int fd, struct perf_event_attr *pattrs, | ||
| 549 | int nb_events) | ||
| 550 | { | ||
| 551 | ssize_t size; | ||
| 552 | int err = 0; | ||
| 553 | |||
| 554 | calc_data_size = 1; | ||
| 555 | err = read_tracing_data(fd, pattrs, nb_events); | ||
| 556 | size = calc_data_size - 1; | ||
| 557 | calc_data_size = 0; | ||
| 558 | |||
| 559 | if (err < 0) | ||
| 560 | return err; | ||
| 561 | |||
| 562 | return size; | ||
| 563 | } | ||
