aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-data.c
diff options
context:
space:
mode:
authorJiri Olsa <jolsa@kernel.org>2015-02-20 17:16:59 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2015-02-25 10:42:25 -0500
commit2245bf1410d2d719f3bfce729b07ab83fe6142f7 (patch)
tree7f8cb1431a7561ee04111f73eda23d15a6b60a8f /tools/perf/builtin-data.c
parent53d0a57343949b2af9b27229db534b98e5a0c4d0 (diff)
perf tools: Add new 'perf data' command
Adding new 'perf data' command to provide operations over data files. The 'perf data convert' sub command is coming in following patch, but there's possibility for other useful commands like 'perf data ls' (to display perf data file in directory in ls style). Signed-off-by: Jiri Olsa <jolsa@kernel.org> Acked-by: Namhyung Kim <namhyung@kernel.org> Reviewed-by: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jeremie Galarneau <jgalar@efficios.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Tom Zanussi <tzanussi@gmail.com> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/r/1424470628-5969-3-git-send-email-jolsa@kernel.org Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-data.c')
-rw-r--r--tools/perf/builtin-data.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/tools/perf/builtin-data.c b/tools/perf/builtin-data.c
new file mode 100644
index 000000000000..1eee97d020fa
--- /dev/null
+++ b/tools/perf/builtin-data.c
@@ -0,0 +1,75 @@
1#include <linux/compiler.h>
2#include "builtin.h"
3#include "perf.h"
4#include "debug.h"
5#include "parse-options.h"
6
7typedef int (*data_cmd_fn_t)(int argc, const char **argv, const char *prefix);
8
9struct data_cmd {
10 const char *name;
11 const char *summary;
12 data_cmd_fn_t fn;
13};
14
15static struct data_cmd data_cmds[];
16
17#define for_each_cmd(cmd) \
18 for (cmd = data_cmds; cmd && cmd->name; cmd++)
19
20static const struct option data_options[] = {
21 OPT_END()
22};
23
24static const char * const data_usage[] = {
25 "perf data [<common options>] <command> [<options>]",
26 NULL
27};
28
29static void print_usage(void)
30{
31 struct data_cmd *cmd;
32
33 printf("Usage:\n");
34 printf("\t%s\n\n", data_usage[0]);
35 printf("\tAvailable commands:\n");
36
37 for_each_cmd(cmd) {
38 printf("\t %s\t- %s\n", cmd->name, cmd->summary);
39 }
40
41 printf("\n");
42}
43
44static struct data_cmd data_cmds[] = {
45 { NULL },
46};
47
48int cmd_data(int argc, const char **argv, const char *prefix)
49{
50 struct data_cmd *cmd;
51 const char *cmdstr;
52
53 /* No command specified. */
54 if (argc < 2)
55 goto usage;
56
57 argc = parse_options(argc, argv, data_options, data_usage,
58 PARSE_OPT_STOP_AT_NON_OPTION);
59 if (argc < 1)
60 goto usage;
61
62 cmdstr = argv[0];
63
64 for_each_cmd(cmd) {
65 if (strcmp(cmd->name, cmdstr))
66 continue;
67
68 return cmd->fn(argc, argv, prefix);
69 }
70
71 pr_err("Unknown command: %s\n", cmdstr);
72usage:
73 print_usage();
74 return -1;
75}