diff options
| -rw-r--r-- | tools/perf/builtin-script.c | 71 |
1 files changed, 47 insertions, 24 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 111787e83784..b695b20ffc8a 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c | |||
| @@ -1933,6 +1933,13 @@ static int cleanup_scripting(void) | |||
| 1933 | return scripting_ops ? scripting_ops->stop_script() : 0; | 1933 | return scripting_ops ? scripting_ops->stop_script() : 0; |
| 1934 | } | 1934 | } |
| 1935 | 1935 | ||
| 1936 | static bool filter_cpu(struct perf_sample *sample) | ||
| 1937 | { | ||
| 1938 | if (cpu_list) | ||
| 1939 | return !test_bit(sample->cpu, cpu_bitmap); | ||
| 1940 | return false; | ||
| 1941 | } | ||
| 1942 | |||
| 1936 | static int process_sample_event(struct perf_tool *tool, | 1943 | static int process_sample_event(struct perf_tool *tool, |
| 1937 | union perf_event *event, | 1944 | union perf_event *event, |
| 1938 | struct perf_sample *sample, | 1945 | struct perf_sample *sample, |
| @@ -1967,7 +1974,7 @@ static int process_sample_event(struct perf_tool *tool, | |||
| 1967 | if (al.filtered) | 1974 | if (al.filtered) |
| 1968 | goto out_put; | 1975 | goto out_put; |
| 1969 | 1976 | ||
| 1970 | if (cpu_list && !test_bit(sample->cpu, cpu_bitmap)) | 1977 | if (filter_cpu(sample)) |
| 1971 | goto out_put; | 1978 | goto out_put; |
| 1972 | 1979 | ||
| 1973 | if (scripting_ops) | 1980 | if (scripting_ops) |
| @@ -2052,9 +2059,11 @@ static int process_comm_event(struct perf_tool *tool, | |||
| 2052 | sample->tid = event->comm.tid; | 2059 | sample->tid = event->comm.tid; |
| 2053 | sample->pid = event->comm.pid; | 2060 | sample->pid = event->comm.pid; |
| 2054 | } | 2061 | } |
| 2055 | perf_sample__fprintf_start(sample, thread, evsel, | 2062 | if (!filter_cpu(sample)) { |
| 2063 | perf_sample__fprintf_start(sample, thread, evsel, | ||
| 2056 | PERF_RECORD_COMM, stdout); | 2064 | PERF_RECORD_COMM, stdout); |
| 2057 | perf_event__fprintf(event, stdout); | 2065 | perf_event__fprintf(event, stdout); |
| 2066 | } | ||
| 2058 | ret = 0; | 2067 | ret = 0; |
| 2059 | out: | 2068 | out: |
| 2060 | thread__put(thread); | 2069 | thread__put(thread); |
| @@ -2088,9 +2097,11 @@ static int process_namespaces_event(struct perf_tool *tool, | |||
| 2088 | sample->tid = event->namespaces.tid; | 2097 | sample->tid = event->namespaces.tid; |
| 2089 | sample->pid = event->namespaces.pid; | 2098 | sample->pid = event->namespaces.pid; |
| 2090 | } | 2099 | } |
| 2091 | perf_sample__fprintf_start(sample, thread, evsel, | 2100 | if (!filter_cpu(sample)) { |
| 2092 | PERF_RECORD_NAMESPACES, stdout); | 2101 | perf_sample__fprintf_start(sample, thread, evsel, |
| 2093 | perf_event__fprintf(event, stdout); | 2102 | PERF_RECORD_NAMESPACES, stdout); |
| 2103 | perf_event__fprintf(event, stdout); | ||
| 2104 | } | ||
| 2094 | ret = 0; | 2105 | ret = 0; |
| 2095 | out: | 2106 | out: |
| 2096 | thread__put(thread); | 2107 | thread__put(thread); |
| @@ -2122,9 +2133,11 @@ static int process_fork_event(struct perf_tool *tool, | |||
| 2122 | sample->tid = event->fork.tid; | 2133 | sample->tid = event->fork.tid; |
| 2123 | sample->pid = event->fork.pid; | 2134 | sample->pid = event->fork.pid; |
| 2124 | } | 2135 | } |
| 2125 | perf_sample__fprintf_start(sample, thread, evsel, | 2136 | if (!filter_cpu(sample)) { |
| 2126 | PERF_RECORD_FORK, stdout); | 2137 | perf_sample__fprintf_start(sample, thread, evsel, |
| 2127 | perf_event__fprintf(event, stdout); | 2138 | PERF_RECORD_FORK, stdout); |
| 2139 | perf_event__fprintf(event, stdout); | ||
| 2140 | } | ||
| 2128 | thread__put(thread); | 2141 | thread__put(thread); |
| 2129 | 2142 | ||
| 2130 | return 0; | 2143 | return 0; |
| @@ -2152,9 +2165,11 @@ static int process_exit_event(struct perf_tool *tool, | |||
| 2152 | sample->tid = event->fork.tid; | 2165 | sample->tid = event->fork.tid; |
| 2153 | sample->pid = event->fork.pid; | 2166 | sample->pid = event->fork.pid; |
| 2154 | } | 2167 | } |
| 2155 | perf_sample__fprintf_start(sample, thread, evsel, | 2168 | if (!filter_cpu(sample)) { |
| 2156 | PERF_RECORD_EXIT, stdout); | 2169 | perf_sample__fprintf_start(sample, thread, evsel, |
| 2157 | perf_event__fprintf(event, stdout); | 2170 | PERF_RECORD_EXIT, stdout); |
| 2171 | perf_event__fprintf(event, stdout); | ||
| 2172 | } | ||
| 2158 | 2173 | ||
| 2159 | if (perf_event__process_exit(tool, event, sample, machine) < 0) | 2174 | if (perf_event__process_exit(tool, event, sample, machine) < 0) |
| 2160 | err = -1; | 2175 | err = -1; |
| @@ -2188,9 +2203,11 @@ static int process_mmap_event(struct perf_tool *tool, | |||
| 2188 | sample->tid = event->mmap.tid; | 2203 | sample->tid = event->mmap.tid; |
| 2189 | sample->pid = event->mmap.pid; | 2204 | sample->pid = event->mmap.pid; |
| 2190 | } | 2205 | } |
| 2191 | perf_sample__fprintf_start(sample, thread, evsel, | 2206 | if (!filter_cpu(sample)) { |
| 2192 | PERF_RECORD_MMAP, stdout); | 2207 | perf_sample__fprintf_start(sample, thread, evsel, |
| 2193 | perf_event__fprintf(event, stdout); | 2208 | PERF_RECORD_MMAP, stdout); |
| 2209 | perf_event__fprintf(event, stdout); | ||
| 2210 | } | ||
| 2194 | thread__put(thread); | 2211 | thread__put(thread); |
| 2195 | return 0; | 2212 | return 0; |
| 2196 | } | 2213 | } |
| @@ -2220,9 +2237,11 @@ static int process_mmap2_event(struct perf_tool *tool, | |||
| 2220 | sample->tid = event->mmap2.tid; | 2237 | sample->tid = event->mmap2.tid; |
| 2221 | sample->pid = event->mmap2.pid; | 2238 | sample->pid = event->mmap2.pid; |
| 2222 | } | 2239 | } |
| 2223 | perf_sample__fprintf_start(sample, thread, evsel, | 2240 | if (!filter_cpu(sample)) { |
| 2224 | PERF_RECORD_MMAP2, stdout); | 2241 | perf_sample__fprintf_start(sample, thread, evsel, |
| 2225 | perf_event__fprintf(event, stdout); | 2242 | PERF_RECORD_MMAP2, stdout); |
| 2243 | perf_event__fprintf(event, stdout); | ||
| 2244 | } | ||
| 2226 | thread__put(thread); | 2245 | thread__put(thread); |
| 2227 | return 0; | 2246 | return 0; |
| 2228 | } | 2247 | } |
| @@ -2247,9 +2266,11 @@ static int process_switch_event(struct perf_tool *tool, | |||
| 2247 | return -1; | 2266 | return -1; |
| 2248 | } | 2267 | } |
| 2249 | 2268 | ||
| 2250 | perf_sample__fprintf_start(sample, thread, evsel, | 2269 | if (!filter_cpu(sample)) { |
| 2251 | PERF_RECORD_SWITCH, stdout); | 2270 | perf_sample__fprintf_start(sample, thread, evsel, |
| 2252 | perf_event__fprintf(event, stdout); | 2271 | PERF_RECORD_SWITCH, stdout); |
| 2272 | perf_event__fprintf(event, stdout); | ||
| 2273 | } | ||
| 2253 | thread__put(thread); | 2274 | thread__put(thread); |
| 2254 | return 0; | 2275 | return 0; |
| 2255 | } | 2276 | } |
| @@ -2270,9 +2291,11 @@ process_lost_event(struct perf_tool *tool, | |||
| 2270 | if (thread == NULL) | 2291 | if (thread == NULL) |
| 2271 | return -1; | 2292 | return -1; |
| 2272 | 2293 | ||
| 2273 | perf_sample__fprintf_start(sample, thread, evsel, | 2294 | if (!filter_cpu(sample)) { |
| 2274 | PERF_RECORD_LOST, stdout); | 2295 | perf_sample__fprintf_start(sample, thread, evsel, |
| 2275 | perf_event__fprintf(event, stdout); | 2296 | PERF_RECORD_LOST, stdout); |
| 2297 | perf_event__fprintf(event, stdout); | ||
| 2298 | } | ||
| 2276 | thread__put(thread); | 2299 | thread__put(thread); |
| 2277 | return 0; | 2300 | return 0; |
| 2278 | } | 2301 | } |
