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

Side by Side Diff: tools/rebaseline.py

Issue 19052007: rebaseline.py: skip any platforms we don't have actual results for, with warning message (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: warning_instead Created 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 ''' 3 '''
4 Copyright 2012 Google Inc. 4 Copyright 2012 Google Inc.
5 5
6 Use of this source code is governed by a BSD-style license that can be 6 Use of this source code is governed by a BSD-style license that can be
7 found in the LICENSE file. 7 found in the LICENSE file.
8 ''' 8 '''
9 9
10 ''' 10 '''
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 'Test-Android-NexusS-SGX540-Arm7-Release', 64 'Test-Android-NexusS-SGX540-Arm7-Release',
65 'base-android-xoom': 65 'base-android-xoom':
66 'Test-Android-Xoom-Tegra2-Arm7-Release', 66 'Test-Android-Xoom-Tegra2-Arm7-Release',
67 'base-android-nexus-10': 67 'base-android-nexus-10':
68 'Test-Android-Nexus10-MaliT604-Arm7-Release', 68 'Test-Android-Nexus10-MaliT604-Arm7-Release',
69 'base-android-nexus-4': 69 'base-android-nexus-4':
70 'Test-Android-Nexus4-Adreno320-Arm7-Release', 70 'Test-Android-Nexus4-Adreno320-Arm7-Release',
71 } 71 }
72 72
73 73
74 class CommandFailedException(Exception): 74 class _InternalException(Exception):
75 pass 75 pass
76 76
77 # Object that rebaselines a JSON expectations file (not individual image files). 77 # Object that rebaselines a JSON expectations file (not individual image files).
78 class JsonRebaseliner(object): 78 class JsonRebaseliner(object):
79 79
80 # params: 80 # params:
81 # expectations_root: root directory of all expectations JSON files 81 # expectations_root: root directory of all expectations JSON files
82 # expectations_filename: filename (under expectations_root) of JSON 82 # expectations_filename: filename (under expectations_root) of JSON
83 # expectations file; typically 83 # expectations file; typically
84 # "expected-results.json" 84 # "expected-results.json"
(...skipping 14 matching lines...) Expand all
99 self._tests = tests 99 self._tests = tests
100 self._configs = configs 100 self._configs = configs
101 self._actuals_base_url = actuals_base_url 101 self._actuals_base_url = actuals_base_url
102 self._actuals_filename = actuals_filename 102 self._actuals_filename = actuals_filename
103 self._add_new = add_new 103 self._add_new = add_new
104 self._testname_pattern = re.compile('(\S+)_(\S+).png') 104 self._testname_pattern = re.compile('(\S+)_(\S+).png')
105 105
106 # Returns the full contents of filepath, as a single string. 106 # Returns the full contents of filepath, as a single string.
107 # If filepath looks like a URL, try to read it that way instead of as 107 # If filepath looks like a URL, try to read it that way instead of as
108 # a path on local storage. 108 # a path on local storage.
109 #
110 # Raises _InternalException if there is a problem.
109 def _GetFileContents(self, filepath): 111 def _GetFileContents(self, filepath):
110 if filepath.startswith('http:') or filepath.startswith('https:'): 112 if filepath.startswith('http:') or filepath.startswith('https:'):
111 return urllib2.urlopen(filepath).read() 113 try:
114 return urllib2.urlopen(filepath).read()
115 except urllib2.HTTPError as e:
116 raise _InternalException('unable to read URL %s: %s' % (
117 filepath, e))
112 else: 118 else:
113 return open(filepath, 'r').read() 119 return open(filepath, 'r').read()
114 120
115 # Returns a dictionary of actual results from actual-results.json file. 121 # Returns a dictionary of actual results from actual-results.json file.
116 # 122 #
117 # The dictionary returned has this format: 123 # The dictionary returned has this format:
118 # { 124 # {
119 # u'imageblur_565.png': [u'bitmap-64bitMD5', 3359963596899141322], 125 # u'imageblur_565.png': [u'bitmap-64bitMD5', 3359963596899141322],
120 # u'imageblur_8888.png': [u'bitmap-64bitMD5', 4217923806027861152], 126 # u'imageblur_8888.png': [u'bitmap-64bitMD5', 4217923806027861152],
121 # u'shadertext3_8888.png': [u'bitmap-64bitMD5', 3713708307125704716] 127 # u'shadertext3_8888.png': [u'bitmap-64bitMD5', 3713708307125704716]
122 # } 128 # }
123 # 129 #
124 # If the JSON actual result summary file cannot be loaded, raise an 130 # If the JSON actual result summary file cannot be loaded, logs a warning
125 # exception. 131 # message and returns None.
132 # If the JSON actual result summary file can be loaded, but we have
133 # trouble parsing it, raises an Exception.
126 # 134 #
127 # params: 135 # params:
128 # json_url: URL pointing to a JSON actual result summary file 136 # json_url: URL pointing to a JSON actual result summary file
129 # sections: a list of section names to include in the results, e.g. 137 # sections: a list of section names to include in the results, e.g.
130 # [gm_json.JSONKEY_ACTUALRESULTS_FAILED, 138 # [gm_json.JSONKEY_ACTUALRESULTS_FAILED,
131 # gm_json.JSONKEY_ACTUALRESULTS_NOCOMPARISON] ; 139 # gm_json.JSONKEY_ACTUALRESULTS_NOCOMPARISON] ;
132 # if None, then include ALL sections. 140 # if None, then include ALL sections.
133 def _GetActualResults(self, json_url, sections=None): 141 def _GetActualResults(self, json_url, sections=None):
134 json_contents = self._GetFileContents(json_url) 142 try:
143 json_contents = self._GetFileContents(json_url)
144 except _InternalException:
145 print >> sys.stderr, (
146 'could not read json_url %s ; skipping this platform.' %
147 json_url)
148 return None
135 json_dict = gm_json.LoadFromString(json_contents) 149 json_dict = gm_json.LoadFromString(json_contents)
136 results_to_return = {} 150 results_to_return = {}
137 actual_results = json_dict[gm_json.JSONKEY_ACTUALRESULTS] 151 actual_results = json_dict[gm_json.JSONKEY_ACTUALRESULTS]
138 if not sections: 152 if not sections:
139 sections = actual_results.keys() 153 sections = actual_results.keys()
140 for section in sections: 154 for section in sections:
141 section_results = actual_results[section] 155 section_results = actual_results[section]
142 if section_results: 156 if section_results:
143 results_to_return.update(section_results) 157 results_to_return.update(section_results)
144 return results_to_return 158 return results_to_return
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 dry_run=args.dry_run, 297 dry_run=args.dry_run,
284 json_base_url=args.actuals_base_url, 298 json_base_url=args.actuals_base_url,
285 json_filename=args.actuals_filename, 299 json_filename=args.actuals_filename,
286 add_new=args.add_new, 300 add_new=args.add_new,
287 missing_json_is_fatal=missing_json_is_fatal) 301 missing_json_is_fatal=missing_json_is_fatal)
288 try: 302 try:
289 rebaseliner.RebaselineSubdir(subdir=subdir, builder=builder) 303 rebaseliner.RebaselineSubdir(subdir=subdir, builder=builder)
290 except BaseException as e: 304 except BaseException as e:
291 print >> sys.stderr, e 305 print >> sys.stderr, e
292 sys.exit(1) 306 sys.exit(1)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698