Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(421)

Side by Side Diff: appengine/findit/crash/scorers/min_distance.py

Issue 2157433002: [Findit] Pass changed files info to Fracas, 2 face design. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Fix nits. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « appengine/findit/crash/scorers/aggregators.py ('k') | appengine/findit/crash/scorers/scorer.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """MinDistance scorer applies to MatchResult objects. 5 """MinDistance scorer applies to MatchResult objects.
6 6
7 It represents a heuristic rule: 7 It represents a heuristic rule:
8 1. Highest score if the result changed the crashed lines. 8 1. Highest score if the result changed the crashed lines.
9 2. 0 score if changed lines are too far away from crashed lines. 9 2. 0 score if changed lines are too far away from crashed lines.
10 """ 10 """
11 11
12 import logging 12 import logging
13 13
14 from crash.scorers.scorer import Scorer 14 from crash.scorers.scorer import Scorer
15 15
16 _MAX_DISTANCE = 50 16 _MAX_DISTANCE = 50
17 17
18 18
19 class MinDistance(Scorer): 19 class MinDistance(Scorer):
20 20
21 def __init__(self, max_distance=_MAX_DISTANCE): 21 def __init__(self, max_distance=_MAX_DISTANCE):
22 self.max_distance = max_distance 22 self.max_distance = max_distance
23 23
24 def GetMetric(self, result): 24 def GetMetric(self, result):
25 if not hasattr(result, 'min_distance'): 25 min_distance = float('inf')
26 logging.warning('Scorer %s only applies to MatchResult', self.name) 26 for analysis_info in result.file_to_analysis_info.itervalues():
27 return None 27 min_distance = min(min_distance, analysis_info['min_distance'])
28 28
29 return result.min_distance 29 return min_distance
30 30
31 def Score(self, min_distance): 31 def Score(self, min_distance):
32 if min_distance > self.max_distance: 32 if min_distance > self.max_distance:
33 return 0 33 return 0
34 34
35 if min_distance == 0: 35 if min_distance == 0:
36 return 1 36 return 1
37 37
38 # TODO(katesonia): This number is randomly picked from a reasonable range, 38 # TODO(katesonia): This number is randomly picked from a reasonable range,
39 # best value to use still needs be experimented out. 39 # best value to use still needs be experimented out.
40 return 0.8 40 return 0.8
41 41
42 def Reason(self, min_distance, score): 42 def Reason(self, min_distance, score):
43 if score == 0: 43 if score == 0:
44 return '' 44 return None
45 45
46 return 'Modification distance (LOC) is %d' % min_distance 46 return self.name, score, 'Minimum distance is %d' % min_distance
47
48 def ChangedFiles(self, result):
49 index_to_changed_files = {}
50 for file_path, analysis_info in result.file_to_analysis_info.iteritems():
51 file_name = file_path.split('/')[-1]
52 frame = analysis_info['min_distance_frame']
53 index_to_changed_files[frame.index] = {
54 'file': file_name,
55 'blame_url': frame.BlameUrl(result.changelog.revision),
56 'info': 'Minimum distance (LOC) %d, frame #%d' % (
57 analysis_info['min_distance'], frame.index)
58 }
59
60 # Sort changed file by frame index.
61 _, changed_files = zip(*sorted(index_to_changed_files.items(),
62 key=lambda x: x[0]))
63
64 return list(changed_files)
OLDNEW
« no previous file with comments | « appengine/findit/crash/scorers/aggregators.py ('k') | appengine/findit/crash/scorers/scorer.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698