diff options
author | Ingo Molnar <mingo@kernel.org> | 2012-09-19 10:59:01 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2012-09-19 10:59:01 -0400 |
commit | bea8f35421628266658c14ea990d18b0969c4c0b (patch) | |
tree | 46c5d4616a003011a1237ed8d31592a662cf9720 /tools/perf/builtin-script.c | |
parent | 26f45274afd938d82463816a12ec67448513294a (diff) | |
parent | 7ae92e744e3fb389afb1e24920ecda331d360c61 (diff) |
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:
* Fix handling of unresolved samples when --symbols is used in 'report',
from Feng Tang.
* Add --symbols to 'script', similar to the one in 'report', from Feng Tang.
* Add union member access support to 'probe', from Hyeoncheol Lee.
* Make 'archive' work on Android, tweaking some of the utility parameters
used (tar, rm), from Irina Tirdea.
* Fixups to die() removal, from Namhyung Kim.
* Render fixes for the TUI, from Namhyung Kim.
* Don't enable annotation in non symbolic view, from Namhyung Kim.
* Fix pipe mode in 'report', from Namhyung Kim.
* Move related stats code from stat to util/, will be used by the 'stat'
kvm tool, from Xiao Guangrong.
* Add cpumask for uncore pmu, use it in 'stat', from Yan, Zheng.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/builtin-script.c')
-rw-r--r-- | tools/perf/builtin-script.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 6d98a83d5a60..1be843aa1546 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include "util/util.h" | 14 | #include "util/util.h" |
15 | #include "util/evlist.h" | 15 | #include "util/evlist.h" |
16 | #include "util/evsel.h" | 16 | #include "util/evsel.h" |
17 | #include "util/sort.h" | ||
17 | #include <linux/bitmap.h> | 18 | #include <linux/bitmap.h> |
18 | 19 | ||
19 | static char const *script_name; | 20 | static char const *script_name; |
@@ -1031,6 +1032,61 @@ static int list_available_scripts(const struct option *opt __maybe_unused, | |||
1031 | exit(0); | 1032 | exit(0); |
1032 | } | 1033 | } |
1033 | 1034 | ||
1035 | /* | ||
1036 | * Return -1 if none is found, otherwise the actual scripts number. | ||
1037 | * | ||
1038 | * Currently the only user of this function is the script browser, which | ||
1039 | * will list all statically runnable scripts, select one, execute it and | ||
1040 | * show the output in a perf browser. | ||
1041 | */ | ||
1042 | int find_scripts(char **scripts_array, char **scripts_path_array) | ||
1043 | { | ||
1044 | struct dirent *script_next, *lang_next, script_dirent, lang_dirent; | ||
1045 | char scripts_path[MAXPATHLEN]; | ||
1046 | DIR *scripts_dir, *lang_dir; | ||
1047 | char lang_path[MAXPATHLEN]; | ||
1048 | char *temp; | ||
1049 | int i = 0; | ||
1050 | |||
1051 | snprintf(scripts_path, MAXPATHLEN, "%s/scripts", perf_exec_path()); | ||
1052 | |||
1053 | scripts_dir = opendir(scripts_path); | ||
1054 | if (!scripts_dir) | ||
1055 | return -1; | ||
1056 | |||
1057 | for_each_lang(scripts_path, scripts_dir, lang_dirent, lang_next) { | ||
1058 | snprintf(lang_path, MAXPATHLEN, "%s/%s", scripts_path, | ||
1059 | lang_dirent.d_name); | ||
1060 | #ifdef NO_LIBPERL | ||
1061 | if (strstr(lang_path, "perl")) | ||
1062 | continue; | ||
1063 | #endif | ||
1064 | #ifdef NO_LIBPYTHON | ||
1065 | if (strstr(lang_path, "python")) | ||
1066 | continue; | ||
1067 | #endif | ||
1068 | |||
1069 | lang_dir = opendir(lang_path); | ||
1070 | if (!lang_dir) | ||
1071 | continue; | ||
1072 | |||
1073 | for_each_script(lang_path, lang_dir, script_dirent, script_next) { | ||
1074 | /* Skip those real time scripts: xxxtop.p[yl] */ | ||
1075 | if (strstr(script_dirent.d_name, "top.")) | ||
1076 | continue; | ||
1077 | sprintf(scripts_path_array[i], "%s/%s", lang_path, | ||
1078 | script_dirent.d_name); | ||
1079 | temp = strchr(script_dirent.d_name, '.'); | ||
1080 | snprintf(scripts_array[i], | ||
1081 | (temp - script_dirent.d_name) + 1, | ||
1082 | "%s", script_dirent.d_name); | ||
1083 | i++; | ||
1084 | } | ||
1085 | } | ||
1086 | |||
1087 | return i; | ||
1088 | } | ||
1089 | |||
1034 | static char *get_script_path(const char *script_root, const char *suffix) | 1090 | static char *get_script_path(const char *script_root, const char *suffix) |
1035 | { | 1091 | { |
1036 | struct dirent *script_next, *lang_next, script_dirent, lang_dirent; | 1092 | struct dirent *script_next, *lang_next, script_dirent, lang_dirent; |
@@ -1143,6 +1199,8 @@ static const struct option options[] = { | |||
1143 | parse_output_fields), | 1199 | parse_output_fields), |
1144 | OPT_BOOLEAN('a', "all-cpus", &system_wide, | 1200 | OPT_BOOLEAN('a', "all-cpus", &system_wide, |
1145 | "system-wide collection from all CPUs"), | 1201 | "system-wide collection from all CPUs"), |
1202 | OPT_STRING('S', "symbols", &symbol_conf.sym_list_str, "symbol[,symbol...]", | ||
1203 | "only consider these symbols"), | ||
1146 | OPT_STRING('C', "cpu", &cpu_list, "cpu", "list of cpus to profile"), | 1204 | OPT_STRING('C', "cpu", &cpu_list, "cpu", "list of cpus to profile"), |
1147 | OPT_STRING('c', "comms", &symbol_conf.comm_list_str, "comm[,comm...]", | 1205 | OPT_STRING('c', "comms", &symbol_conf.comm_list_str, "comm[,comm...]", |
1148 | "only display events for these comms"), | 1206 | "only display events for these comms"), |