[PATCH 16/35] perf annotate: Add samples into struct annotation_line

From: Jiri Olsa
Date: Wed Oct 11 2017 - 11:06:59 EST


Adding samples array into struct annotation_line to
hold the annotation data. The data are populated in
the following patches.

Link: http://lkml.kernel.org/n/tip-97yja5m7z9brrcuf2gwr56t2@xxxxxxxxxxxxxx
Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx>
---
tools/perf/util/annotate.c | 8 ++++++++
tools/perf/util/annotate.h | 17 ++++++++++++-----
2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 8e1e88aab45a..1b5c7d0a53e8 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -901,7 +901,14 @@ static struct annotation_line*
annotation_line__new(struct annotate_args *args, size_t privsize)
{
struct annotation_line *al;
+ struct perf_evsel *evsel = args->evsel;
size_t size = privsize + sizeof(*al);
+ int nr = 1;
+
+ if (perf_evsel__is_group_event(evsel))
+ nr = evsel->nr_members;
+
+ size += sizeof(al->samples[0]) * nr;

al = zalloc(size);
if (al) {
@@ -910,6 +917,7 @@ annotation_line__new(struct annotate_args *args, size_t privsize)
al->offset = args->offset;
al->line = strdup(args->line);
al->line_nr = args->line_nr;
+ al->samples_nr = nr;
}

return al;
diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
index a02a2bf4f2ab..9c722a7e5f6d 100644
--- a/tools/perf/util/annotate.h
+++ b/tools/perf/util/annotate.h
@@ -58,6 +58,16 @@ bool ins__is_fused(struct arch *arch, const char *ins1, const char *ins2);

struct annotation;

+struct sym_hist_entry {
+ u64 nr_samples;
+ u64 period;
+};
+
+struct annotation_data {
+ double percent;
+ struct sym_hist_entry he;
+};
+
struct annotation_line {
struct list_head node;
struct rb_node rb_node;
@@ -67,6 +77,8 @@ struct annotation_line {
float ipc;
u64 cycles;
size_t privsize;
+ int samples_nr;
+ struct annotation_data samples[0];
};

struct disasm_line {
@@ -87,11 +99,6 @@ static inline bool disasm_line__has_offset(const struct disasm_line *dl)
return dl->ops.target.offset_avail;
}

-struct sym_hist_entry {
- u64 nr_samples;
- u64 period;
-};
-
void disasm_line__free(struct disasm_line *dl);
struct annotation_line*
annotation_line__next(struct annotation_line *pos, struct list_head *head);
--
2.13.6