aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/builtin-top.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index f2e7312f85c9..fdc1d5863b01 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -420,7 +420,7 @@ static unsigned int mmap_read_head(struct mmap_data *md)
420 420
421struct timeval last_read, this_read; 421struct timeval last_read, this_read;
422 422
423static void mmap_read(struct mmap_data *md) 423static void mmap_read_counter(struct mmap_data *md)
424{ 424{
425 unsigned int head = mmap_read_head(md); 425 unsigned int head = mmap_read_head(md);
426 unsigned int old = md->prev; 426 unsigned int old = md->prev;
@@ -517,6 +517,16 @@ static void mmap_read(struct mmap_data *md)
517static struct pollfd event_array[MAX_NR_CPUS * MAX_COUNTERS]; 517static struct pollfd event_array[MAX_NR_CPUS * MAX_COUNTERS];
518static struct mmap_data mmap_array[MAX_NR_CPUS][MAX_COUNTERS]; 518static struct mmap_data mmap_array[MAX_NR_CPUS][MAX_COUNTERS];
519 519
520static void mmap_read(void)
521{
522 int i, counter;
523
524 for (i = 0; i < nr_cpus; i++) {
525 for (counter = 0; counter < nr_counters; counter++)
526 mmap_read_counter(&mmap_array[i][counter]);
527 }
528}
529
520static int __cmd_top(void) 530static int __cmd_top(void)
521{ 531{
522 struct perf_counter_attr *attr; 532 struct perf_counter_attr *attr;
@@ -571,6 +581,11 @@ static int __cmd_top(void)
571 } 581 }
572 } 582 }
573 583
584 /* Wait for a minimal set of events before starting the snapshot */
585 poll(event_array, nr_poll, 100);
586
587 mmap_read();
588
574 if (pthread_create(&thread, NULL, display_thread, NULL)) { 589 if (pthread_create(&thread, NULL, display_thread, NULL)) {
575 printf("Could not create display thread.\n"); 590 printf("Could not create display thread.\n");
576 exit(-1); 591 exit(-1);
@@ -589,10 +604,7 @@ static int __cmd_top(void)
589 while (1) { 604 while (1) {
590 int hits = samples; 605 int hits = samples;
591 606
592 for (i = 0; i < nr_cpus; i++) { 607 mmap_read();
593 for (counter = 0; counter < nr_counters; counter++)
594 mmap_read(&mmap_array[i][counter]);
595 }
596 608
597 if (hits == samples) 609 if (hits == samples)
598 ret = poll(event_array, nr_poll, 100); 610 ret = poll(event_array, nr_poll, 100);