perf evlist: Maintain evlist->all_cpus
Maintain a cpumap in the evlist that is the union of all the cpus of the events. This needs a cpumap merge operation, which is added together with tests. v2: Add tests for cpu map merge Fix handling of duplicates Rename _update to _merge Factor out sorting. Fix handling of NULL maps in merge v3: Add comments and empty lines to _merge Committer testing: # perf test "Merge cpu map" 52: Merge cpu map : Ok # Signed-off-by: Andi Kleen <ak@linux.intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Link: http://lore.kernel.org/lkml/20191121001522.180827-5-andi@firstfloor.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
7074674e73
commit
a2408a7036
@@ -259,6 +259,11 @@ static struct test generic_tests[] = {
|
||||
.desc = "Print cpu map",
|
||||
.func = test__cpu_map_print,
|
||||
},
|
||||
{
|
||||
.desc = "Merge cpu map",
|
||||
.func = test__cpu_map_merge,
|
||||
},
|
||||
|
||||
{
|
||||
.desc = "Probe SDT events",
|
||||
.func = test__sdt_event,
|
||||
|
||||
@@ -120,3 +120,19 @@ int test__cpu_map_print(struct test *test __maybe_unused, int subtest __maybe_un
|
||||
TEST_ASSERT_VAL("failed to convert map", cpu_map_print("1-10,12-20,22-30,32-40"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int test__cpu_map_merge(struct test *test __maybe_unused, int subtest __maybe_unused)
|
||||
{
|
||||
struct perf_cpu_map *a = perf_cpu_map__new("4,2,1");
|
||||
struct perf_cpu_map *b = perf_cpu_map__new("4,5,7");
|
||||
struct perf_cpu_map *c = perf_cpu_map__merge(a, b);
|
||||
char buf[100];
|
||||
|
||||
TEST_ASSERT_VAL("failed to merge map: bad nr", c->nr == 5);
|
||||
cpu_map__snprint(c, buf, sizeof(buf));
|
||||
TEST_ASSERT_VAL("failed to merge map: bad result", !strcmp(buf, "1-2,4-5,7"));
|
||||
perf_cpu_map__put(a);
|
||||
perf_cpu_map__put(b);
|
||||
perf_cpu_map__put(c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -98,6 +98,7 @@ int test__event_update(struct test *test, int subtest);
|
||||
int test__event_times(struct test *test, int subtest);
|
||||
int test__backward_ring_buffer(struct test *test, int subtest);
|
||||
int test__cpu_map_print(struct test *test, int subtest);
|
||||
int test__cpu_map_merge(struct test *test, int subtest);
|
||||
int test__sdt_event(struct test *test, int subtest);
|
||||
int test__is_printable_array(struct test *test, int subtest);
|
||||
int test__bitmap_print(struct test *test, int subtest);
|
||||
|
||||
Reference in New Issue
Block a user