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

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

Issue 2449853012: [Predator] Fix bug in min_distance after refactor and add back skip added/deleted deps. (Closed)
Patch Set: Rebase Created 4 years, 1 month 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
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 min_distance = float('inf') 25 min_distance = float('inf')
26 for analysis_info in result.file_to_analysis_info.itervalues(): 26 for analysis_info in result.file_to_analysis_info.itervalues():
27 min_distance = min(min_distance, analysis_info['min_distance']) 27 min_distance = min(min_distance, analysis_info.min_distance)
28 28
29 return 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
(...skipping 19 matching lines...) Expand all
57 } 57 }
58 ] 58 ]
59 """ 59 """
60 if score == 0: 60 if score == 0:
61 return None 61 return None
62 62
63 index_to_changed_files = {} 63 index_to_changed_files = {}
64 64
65 for file_path, analysis_info in result.file_to_analysis_info.iteritems(): 65 for file_path, analysis_info in result.file_to_analysis_info.iteritems():
66 file_name = file_path.split('/')[-1] 66 file_name = file_path.split('/')[-1]
67 frame = analysis_info['min_distance_frame'] 67 frame = analysis_info.min_distance_frame
68 68
69 # It is possible that a changelog doesn't show in the blame of a file, 69 # It is possible that a changelog doesn't show in the blame of a file,
70 # in this case, treat the changelog as if it didn't change the file. 70 # in this case, treat the changelog as if it didn't change the file.
71 if analysis_info['min_distance'] == float('inf'): 71 if analysis_info.min_distance == float('inf'):
72 continue 72 continue
73 73
74 index_to_changed_files[frame.index] = { 74 index_to_changed_files[frame.index] = {
75 'file': file_name, 75 'file': file_name,
76 'blame_url': frame.BlameUrl(result.changelog.revision), 76 'blame_url': frame.BlameUrl(result.changelog.revision),
77 'info': 'Minimum distance (LOC) %d, frame #%d' % ( 77 'info': 'Minimum distance (LOC) %d, frame #%d' % (
78 analysis_info['min_distance'], frame.index) 78 analysis_info.min_distance, frame.index)
79 } 79 }
80 80
81 # Sort changed file by frame index. 81 # Sort changed file by frame index.
82 _, changed_files = zip(*sorted(index_to_changed_files.items(), 82 _, changed_files = zip(*sorted(index_to_changed_files.items(),
83 key=lambda x: x[0])) 83 key=lambda x: x[0]))
84 84
85 return list(changed_files) 85 return list(changed_files)
OLDNEW
« no previous file with comments | « appengine/findit/crash/culprit.py ('k') | appengine/findit/crash/scorers/test/aggregated_scorer_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698