diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2009-12-11 18:24:02 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-12-12 01:42:12 -0500 |
commit | 94c744b6c0c6c5802a85ebfebbec429ac5851f2b (patch) | |
tree | e34dcaca54f1d7752ab1e7974bb73f94ff3cf94c /tools/perf/builtin-buildid-list.c | |
parent | ea08d8cbd162fe3756e3e2298efbe0b8b12f92d1 (diff) |
perf tools: Introduce perf_session class
That does all the initialization boilerplate, opening the file,
reading the header, checking if it is valid, etc.
And that will as well have the threads list, kmap (now) global
variable, etc, so that we can handle two (or more) perf.data files
describing sessions to compare.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
LKML-Reference: <1260573842-19720-1-git-send-email-acme@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/builtin-buildid-list.c')
-rw-r--r-- | tools/perf/builtin-buildid-list.c | 55 |
1 files changed, 8 insertions, 47 deletions
diff --git a/tools/perf/builtin-buildid-list.c b/tools/perf/builtin-buildid-list.c index dcb6143a0002..bfd16a1594e4 100644 --- a/tools/perf/builtin-buildid-list.c +++ b/tools/perf/builtin-buildid-list.c | |||
@@ -11,8 +11,8 @@ | |||
11 | #include "util/cache.h" | 11 | #include "util/cache.h" |
12 | #include "util/data_map.h" | 12 | #include "util/data_map.h" |
13 | #include "util/debug.h" | 13 | #include "util/debug.h" |
14 | #include "util/header.h" | ||
15 | #include "util/parse-options.h" | 14 | #include "util/parse-options.h" |
15 | #include "util/session.h" | ||
16 | #include "util/symbol.h" | 16 | #include "util/symbol.h" |
17 | 17 | ||
18 | static char const *input_name = "perf.data"; | 18 | static char const *input_name = "perf.data"; |
@@ -55,56 +55,17 @@ static int perf_file_section__process_buildids(struct perf_file_section *self, | |||
55 | static int __cmd_buildid_list(void) | 55 | static int __cmd_buildid_list(void) |
56 | { | 56 | { |
57 | int err = -1; | 57 | int err = -1; |
58 | struct perf_header *header; | 58 | struct perf_session *session = perf_session__new(input_name, O_RDONLY, force); |
59 | struct perf_file_header f_header; | ||
60 | struct stat input_stat; | ||
61 | int input = open(input_name, O_RDONLY); | ||
62 | 59 | ||
63 | if (input < 0) { | 60 | if (session == NULL) |
64 | pr_err("failed to open file: %s", input_name); | 61 | return -1; |
65 | if (!strcmp(input_name, "perf.data")) | ||
66 | pr_err(" (try 'perf record' first)"); | ||
67 | pr_err("\n"); | ||
68 | goto out; | ||
69 | } | ||
70 | |||
71 | err = fstat(input, &input_stat); | ||
72 | if (err < 0) { | ||
73 | perror("failed to stat file"); | ||
74 | goto out_close; | ||
75 | } | ||
76 | |||
77 | if (!force && input_stat.st_uid && (input_stat.st_uid != geteuid())) { | ||
78 | pr_err("file %s not owned by current user or root\n", | ||
79 | input_name); | ||
80 | goto out_close; | ||
81 | } | ||
82 | |||
83 | if (!input_stat.st_size) { | ||
84 | pr_info("zero-sized file, nothing to do!\n"); | ||
85 | goto out_close; | ||
86 | } | ||
87 | |||
88 | err = -1; | ||
89 | header = perf_header__new(); | ||
90 | if (header == NULL) | ||
91 | goto out_close; | ||
92 | |||
93 | if (perf_file_header__read(&f_header, header, input) < 0) { | ||
94 | pr_warning("incompatible file format"); | ||
95 | goto out_close; | ||
96 | } | ||
97 | 62 | ||
98 | err = perf_header__process_sections(header, input, | 63 | err = perf_header__process_sections(&session->header, session->fd, |
99 | perf_file_section__process_buildids); | 64 | perf_file_section__process_buildids); |
65 | if (err >= 0) | ||
66 | dsos__fprintf_buildid(stdout); | ||
100 | 67 | ||
101 | if (err < 0) | 68 | perf_session__delete(session); |
102 | goto out_close; | ||
103 | |||
104 | dsos__fprintf_buildid(stdout); | ||
105 | out_close: | ||
106 | close(input); | ||
107 | out: | ||
108 | return err; | 69 | return err; |
109 | } | 70 | } |
110 | 71 | ||