lkml.org 
[lkml]   [2020]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH v1 10/14] perf util: Enable block source line comparison
Date
Previously we only supported address comparison, but it was not good
for the case that address might be changed if source code was updated.

This patch enables for the source line comparison.

1. If all of the source lines in a block are not changed (or only
moved some offsets as a whole), we think the block is not changed.

2. If we can aware any source line in this block is changed,
we think this block is changed.

3. If 1 and 2 are both not matched, fallback to address comparison.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
---
tools/perf/util/block-info.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/block-info.c b/tools/perf/util/block-info.c
index 2ad9e2dd7f77..3aa564151d84 100644
--- a/tools/perf/util/block-info.c
+++ b/tools/perf/util/block-info.c
@@ -93,11 +93,12 @@ struct block_info *block_info__new(void)
}

int64_t __block_info__cmp(struct hist_entry *left, struct hist_entry *right,
- struct srclist *src_list __maybe_unused)
+ struct srclist *src_list)
{
struct block_info *bi_l = left->block_info;
struct block_info *bi_r = right->block_info;
int cmp;
+ bool changed;

if (!bi_l->sym || !bi_r->sym) {
if (!bi_l->sym && !bi_r->sym)
@@ -112,6 +113,27 @@ int64_t __block_info__cmp(struct hist_entry *left, struct hist_entry *right,
if (cmp)
return cmp;

+ if (src_list && bi_l->line && bi_r->line) {
+ if (block_same_srcfiles(bi_l->line, bi_r->line) &&
+ bi_l->line->start_rel) {
+
+ if (block_srclist_matched(src_list,
+ bi_l->line->start_rel,
+ bi_l->line->start_nr,
+ bi_l->line->end_nr,
+ bi_r->line->start_nr,
+ bi_r->line->end_nr,
+ &changed)) {
+ bi_l->srcline_matched = true;
+ return 0;
+ } else if (changed) {
+ bi_l->block_changed = true;
+ return 0;
+ } else
+ return -1;
+ }
+ }
+
if (bi_l->start != bi_r->start)
return (int64_t)(bi_r->start - bi_l->start);

--
2.17.1
\
 
 \ /
  Last update: 2020-03-10 08:04    [W:0.091 / U:0.148 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site