perf report: Add -vvv to print the list of threads and its mmaps
authorArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 4 Jun 2009 16:54:00 +0000 (13:54 -0300)
committerIngo Molnar <mingo@elte.hu>
Thu, 4 Jun 2009 19:48:42 +0000 (21:48 +0200)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Documentation/perf_counter/builtin-report.c

index 5d191216c80a262181470595c90674881015c519..1a1028d3bc3471fb24e6f0fe13cc64276b79f4d5 100644 (file)
@@ -234,6 +234,13 @@ static int map__overlap(struct map *l, struct map *r)
        return 0;
 }
 
+static size_t map__fprintf(struct map *self, FILE *fp)
+{
+       return fprintf(fp, " %lx-%lx %lx %s\n",
+                      self->start, self->end, self->pgoff, self->dso->name);
+}
+
+
 struct thread {
        struct rb_node   rb_node;
        struct list_head maps;
@@ -264,6 +271,18 @@ static int thread__set_comm(struct thread *self, const char *comm)
        return self->comm ? 0 : -ENOMEM;
 }
 
+static size_t thread__fprintf(struct thread *self, FILE *fp)
+{
+       struct map *pos;
+       size_t ret = fprintf(fp, "Thread %d %s\n", self->pid, self->comm);
+
+       list_for_each_entry(pos, &self->maps, node)
+               ret += map__fprintf(pos, fp);
+
+       return ret;
+}
+
+
 static struct rb_root threads;
 static struct thread *last_match;
 
@@ -355,6 +374,20 @@ static struct map *thread__find_map(struct thread *self, uint64_t ip)
        return NULL;
 }
 
+static size_t threads__fprintf(FILE *fp)
+{
+       size_t ret = 0;
+       struct rb_node *nd;
+
+       for (nd = rb_first(&threads); nd; nd = rb_next(nd)) {
+               struct thread *pos = rb_entry(nd, struct thread, rb_node);
+
+               ret += thread__fprintf(pos, fp);
+       }
+
+       return ret;
+}
+
 /*
  * histogram, sorted on item, collects counts
  */
@@ -1126,6 +1159,9 @@ more:
        if (dump_trace)
                return 0;
 
+       if (verbose >= 3)
+               threads__fprintf(stdout);
+
        if (verbose >= 2)
                dsos__fprintf(stdout);