64 lines · c
1// SPDX-License-Identifier: GPL-2.02#include "util/map_symbol.h"3#include "util/mem-events.h"4#include "util/mem-info.h"5#include "util/symbol.h"6#include "linux/perf_event.h"7#include "util/debug.h"8#include "tests.h"9#include <string.h>10 11static int check(union perf_mem_data_src data_src,12 const char *string)13{14 char out[100];15 char failure[100];16 struct mem_info *mi = mem_info__new();17 int n;18 19 TEST_ASSERT_VAL("Memory allocation failed", mi);20 *mem_info__data_src(mi) = data_src;21 n = perf_mem__snp_scnprintf(out, sizeof out, mi);22 n += perf_mem__lvl_scnprintf(out + n, sizeof out - n, mi);23 mem_info__put(mi);24 scnprintf(failure, sizeof failure, "unexpected %s", out);25 TEST_ASSERT_VAL(failure, !strcmp(string, out));26 return 0;27}28 29static int test__mem(struct test_suite *text __maybe_unused, int subtest __maybe_unused)30{31 int ret = 0;32 union perf_mem_data_src src;33 34 memset(&src, 0, sizeof(src));35 36 src.mem_lvl = PERF_MEM_LVL_HIT;37 src.mem_lvl_num = 4;38 39 ret |= check(src, "N/AL4 hit");40 41 src.mem_remote = 1;42 43 ret |= check(src, "N/ARemote L4 hit");44 45 src.mem_lvl = PERF_MEM_LVL_MISS;46 src.mem_lvl_num = PERF_MEM_LVLNUM_PMEM;47 src.mem_remote = 0;48 49 ret |= check(src, "N/APMEM miss");50 51 src.mem_remote = 1;52 53 ret |= check(src, "N/ARemote PMEM miss");54 55 src.mem_snoopx = PERF_MEM_SNOOPX_FWD;56 src.mem_lvl_num = PERF_MEM_LVLNUM_RAM;57 58 ret |= check(src , "FwdRemote RAM miss");59 60 return ret;61}62 63DEFINE_SUITE("Test data source output", mem);64