perf: Allow printing to arbritrary fds

This commit is contained in:
Lorenz Meier
2014-05-21 14:19:39 +02:00
parent 9024d76e7c
commit aa2b125a67
4 changed files with 26 additions and 10 deletions
+11 -5
View File
@@ -281,13 +281,19 @@ perf_reset(perf_counter_t handle)
void void
perf_print_counter(perf_counter_t handle) perf_print_counter(perf_counter_t handle)
{
perf_print_counter_fd(0, handle);
}
void
perf_print_counter_fd(int fd, perf_counter_t handle)
{ {
if (handle == NULL) if (handle == NULL)
return; return;
switch (handle->type) { switch (handle->type) {
case PC_COUNT: case PC_COUNT:
printf("%s: %llu events\n", dprintf(fd, "%s: %llu events\n",
handle->name, handle->name,
((struct perf_ctr_count *)handle)->event_count); ((struct perf_ctr_count *)handle)->event_count);
break; break;
@@ -295,7 +301,7 @@ perf_print_counter(perf_counter_t handle)
case PC_ELAPSED: { case PC_ELAPSED: {
struct perf_ctr_elapsed *pce = (struct perf_ctr_elapsed *)handle; struct perf_ctr_elapsed *pce = (struct perf_ctr_elapsed *)handle;
printf("%s: %llu events, %lluus elapsed, %llu avg, min %lluus max %lluus\n", dprintf(fd, "%s: %llu events, %lluus elapsed, %llu avg, min %lluus max %lluus\n",
handle->name, handle->name,
pce->event_count, pce->event_count,
pce->time_total, pce->time_total,
@@ -308,7 +314,7 @@ perf_print_counter(perf_counter_t handle)
case PC_INTERVAL: { case PC_INTERVAL: {
struct perf_ctr_interval *pci = (struct perf_ctr_interval *)handle; struct perf_ctr_interval *pci = (struct perf_ctr_interval *)handle;
printf("%s: %llu events, %llu avg, min %lluus max %lluus\n", dprintf(fd, "%s: %llu events, %llu avg, min %lluus max %lluus\n",
handle->name, handle->name,
pci->event_count, pci->event_count,
(pci->time_last - pci->time_first) / pci->event_count, (pci->time_last - pci->time_first) / pci->event_count,
@@ -349,12 +355,12 @@ perf_event_count(perf_counter_t handle)
} }
void void
perf_print_all(void) perf_print_all(int fd)
{ {
perf_counter_t handle = (perf_counter_t)sq_peek(&perf_counters); perf_counter_t handle = (perf_counter_t)sq_peek(&perf_counters);
while (handle != NULL) { while (handle != NULL) {
perf_print_counter(handle); perf_print_counter_fd(fd, handle);
handle = (perf_counter_t)sq_next(&handle->link); handle = (perf_counter_t)sq_next(&handle->link);
} }
} }
+13 -3
View File
@@ -121,16 +121,26 @@ __EXPORT extern void perf_cancel(perf_counter_t handle);
__EXPORT extern void perf_reset(perf_counter_t handle); __EXPORT extern void perf_reset(perf_counter_t handle);
/** /**
* Print one performance counter. * Print one performance counter to stdout
* *
* @param handle The counter to print. * @param handle The counter to print.
*/ */
__EXPORT extern void perf_print_counter(perf_counter_t handle); __EXPORT extern void perf_print_counter(perf_counter_t handle);
/** /**
* Print all of the performance counters. * Print one performance counter to a fd.
*
* @param fd File descriptor to print to - e.g. 0 for stdout
* @param handle The counter to print.
*/ */
__EXPORT extern void perf_print_all(void); __EXPORT extern void perf_print_counter_fd(int fd, perf_counter_t handle);
/**
* Print all of the performance counters.
*
* @param fd File descriptor to print to - e.g. 0 for stdout
*/
__EXPORT extern void perf_print_all(int fd);
/** /**
* Reset all of the performance counters. * Reset all of the performance counters.
+1 -1
View File
@@ -73,7 +73,7 @@ int perf_main(int argc, char *argv[])
return -1; return -1;
} }
perf_print_all(); perf_print_all(0 /* stdout */);
fflush(stdout); fflush(stdout);
return 0; return 0;
} }
+1 -1
View File
@@ -235,7 +235,7 @@ test_perf(int argc, char *argv[])
printf("perf: expect count of 1\n"); printf("perf: expect count of 1\n");
perf_print_counter(ec); perf_print_counter(ec);
printf("perf: expect at least two counters\n"); printf("perf: expect at least two counters\n");
perf_print_all(); perf_print_all(0);
perf_free(cc); perf_free(cc);
perf_free(ec); perf_free(ec);