Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp1400852ybh; Fri, 13 Mar 2020 00:14:30 -0700 (PDT) X-Google-Smtp-Source: ADFU+vvj+IbaTvA/d3wZVG3ULqV+3QW/LiJ5cXkmWi7tXpGlyoJHdHA0YgiLgNJfzKV2GBzi+GKQ X-Received: by 2002:aca:f12:: with SMTP id 18mr5676466oip.126.1584083670374; Fri, 13 Mar 2020 00:14:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584083670; cv=none; d=google.com; s=arc-20160816; b=Mp6jvlg1kaU9yK8dgBB35jY3+YH/KQoxG1OFH/wQ+U3bEzyhvUUg7DZQwmDxhsjE0p RRzk/uwVXyIcKUzmkUuoBrpkWP1xQiL2df2Qt2Iyd/eoNCU+8fBV8zcM8dEkW0PLXNJP ImQwRHD/BXC12wFYPr2U5zfzpRm12ELmmE1HLLgwYeKXOU61Eu/9OjZJlaLDeLmLPxYu PmHKsuL9KMk7XAFbhbqHeb3OA0a2FN0MjlAxEhhLeMr85YBRxCrXvmuL6JxPYIwOuzhh BJI/eVp79lZQ1vvYYiq2ecRXm8PZigarMkNELbDWoI+sUnNmNvPnWBWp2oeSen6R17Kn OshA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=JSgk6qi99KWyMQru8sCWdJl3FeJ4LHdBtHV9xZJqkJ0=; b=cw3OLGnA/T8nISw3bUCaoY6tb7GhAoskG/CXar7Uhn7NTBiY93+fyXvsKMLCTjQXb9 NnyCuAB3SyS0Oz5rlJjw58bzYO5qaq9mJ/ehCGVX0q7HjjnQLIs53NrVFUOnNYN8LS5u LcQBZ4F1tOgCD+A7v2UjrnI5QLJRpfaEcHPXSZfaHltDeRzD1Hu4m+rLuwjwyQxxdpx/ 98k6Kp/KEqyGgkLWFNPB/AfKb/ViC87ArRS8V9LSgnE+4FZgNFg83xXo+kctveCYjWiV sRPCkKZZR9JptMIDU/XeUfkId9gnjNdhBYS4+WDCL8UYR0vul5YNTIv6DI1OBjM6bP/Y JjFQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e9si3118097otp.267.2020.03.13.00.14.17; Fri, 13 Mar 2020 00:14:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726851AbgCMHM3 (ORCPT + 99 others); Fri, 13 Mar 2020 03:12:29 -0400 Received: from mga02.intel.com ([134.134.136.20]:7824 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726832AbgCMHM1 (ORCPT ); Fri, 13 Mar 2020 03:12:27 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Mar 2020 00:12:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,547,1574150400"; d="scan'208";a="266642324" Received: from kbl.sh.intel.com ([10.239.159.24]) by fmsmga004.fm.intel.com with ESMTP; 13 Mar 2020 00:12:24 -0700 From: Jin Yao To: acme@kernel.org, jolsa@kernel.org, peterz@infradead.org, mingo@redhat.com, alexander.shishkin@linux.intel.com Cc: Linux-kernel@vger.kernel.org, ak@linux.intel.com, kan.liang@intel.com, yao.jin@intel.com, Jin Yao Subject: [PATCH v2 14/14] perf diff: Filter out streams by changed functions Date: Fri, 13 Mar 2020 15:11:18 +0800 Message-Id: <20200313071118.11983-15-yao.jin@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200313071118.11983-1-yao.jin@linux.intel.com> References: <20200313071118.11983-1-yao.jin@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Sometime some changes are not reflected in the source code, e.g. changing the compiler option. So for this, we can't get the changes by diffing the source code lines. This patch introduces a new perf-diff option "--changed-func". It passes the names of changed functions then perf-diff can know what functions are changed. For example, perf diff --stream --changed-func main --changed-func rand It passes the function list {"main", "rand"} to perf-diff. Now perf-diff knows the functions "main" and "rand" in new perf data file are changed. Signed-off-by: Jin Yao --- tools/perf/Documentation/perf-diff.txt | 5 +++++ tools/perf/builtin-diff.c | 30 ++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/tools/perf/Documentation/perf-diff.txt b/tools/perf/Documentation/perf-diff.txt index 296fea98ac07..784598c12e26 100644 --- a/tools/perf/Documentation/perf-diff.txt +++ b/tools/perf/Documentation/perf-diff.txt @@ -196,6 +196,11 @@ OPTIONS Source code directory corresponding to perf.data. Should be used with --stream and --before. +--changed-func=:: + The given function is changed in new perf data file. This option + needs to be used with --stream option. Multiple functions can be given + by using this option more than once. + COMPARISON ---------- The comparison is governed by the baseline file. The baseline perf.data diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index 98e9ab8c69ce..5e5f29105fe1 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c @@ -27,6 +27,7 @@ #include "util/block-info.h" #include "util/srclist.h" #include "util/callchain.h" +#include "util/strlist.h" #include #include #include @@ -49,6 +50,7 @@ struct perf_diff { bool src_cmp; bool stream; struct srclist *src_list; + struct strlist *func_list; u64 total_cycles; float min_percent; }; @@ -1017,7 +1019,8 @@ static int process_base_stream(struct data__file *data_base, if (!es_pair) return -1; - callchain_match_streams(es_base, es_pair, pdiff.src_list, NULL); + callchain_match_streams(es_base, es_pair, pdiff.src_list, + pdiff.func_list); callchain_stream_report(es_base, es_pair); } @@ -1043,7 +1046,7 @@ static int process_base_stream(struct data__file *data_base, block_hists_addr2line(&rep_pair->hist.block_hists, pair_dir); block_info__match_report(rep_base, rep_pair, - pdiff.src_list, NULL, NULL); + pdiff.src_list, pdiff.func_list, NULL); fprintf(stdout, "%s", title); @@ -1213,6 +1216,24 @@ static struct callchain_streams *create_evsel_streams(struct evlist *evlist, return evsel_streams; } +static int parse_func(const struct option *opt __maybe_unused, + const char *str, int unset __maybe_unused) +{ + int ret; + + if (!pdiff.func_list) { + pdiff.func_list = strlist__new(NULL, NULL); + if (!pdiff.func_list) + return -ENOMEM; + } + + ret = strlist__add(pdiff.func_list, str); + if (ret < 0) + return ret; + + return 0; +} + static int __cmd_diff(void) { struct data__file *d; @@ -1312,6 +1333,9 @@ static int __cmd_diff(void) if (pdiff.src_list) srclist__delete(pdiff.src_list); + if (pdiff.func_list) + strlist__delete(pdiff.func_list); + return ret; } @@ -1390,6 +1414,8 @@ static const struct option options[] = { OPT_CALLBACK(0, "percent-limit", &pdiff, "percent", "Don't show entries under that percent", parse_percent_limit), + OPT_CALLBACK(0, "changed-func", NULL, "func", + "Given function is changed", parse_func), OPT_END() }; -- 2.17.1