diff options
Diffstat (limited to 'tools/perf/util/header.c')
-rw-r--r-- | tools/perf/util/header.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index b92a457ca32e..ec4d4c2f9522 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c | |||
@@ -237,9 +237,44 @@ struct perf_header *perf_header__read(int fd) | |||
237 | self->data_offset = f_header.data.offset; | 237 | self->data_offset = f_header.data.offset; |
238 | self->data_size = f_header.data.size; | 238 | self->data_size = f_header.data.size; |
239 | 239 | ||
240 | lseek(fd, self->data_offset + self->data_size, SEEK_SET); | 240 | lseek(fd, self->data_offset, SEEK_SET); |
241 | 241 | ||
242 | self->frozen = 1; | 242 | self->frozen = 1; |
243 | 243 | ||
244 | return self; | 244 | return self; |
245 | } | 245 | } |
246 | |||
247 | u64 perf_header__sample_type(struct perf_header *header) | ||
248 | { | ||
249 | u64 type = 0; | ||
250 | int i; | ||
251 | |||
252 | for (i = 0; i < header->attrs; i++) { | ||
253 | struct perf_header_attr *attr = header->attr[i]; | ||
254 | |||
255 | if (!type) | ||
256 | type = attr->attr.sample_type; | ||
257 | else if (type != attr->attr.sample_type) | ||
258 | die("non matching sample_type"); | ||
259 | } | ||
260 | |||
261 | return type; | ||
262 | } | ||
263 | |||
264 | struct perf_counter_attr * | ||
265 | perf_header__find_attr(u64 id, struct perf_header *header) | ||
266 | { | ||
267 | int i; | ||
268 | |||
269 | for (i = 0; i < header->attrs; i++) { | ||
270 | struct perf_header_attr *attr = header->attr[i]; | ||
271 | int j; | ||
272 | |||
273 | for (j = 0; j < attr->ids; j++) { | ||
274 | if (attr->id[j] == id) | ||
275 | return &attr->attr; | ||
276 | } | ||
277 | } | ||
278 | |||
279 | return NULL; | ||
280 | } | ||