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

Side by Side Diff: gm/rebaseline_server/server.py

Issue 206723002: rebaseline_server: when first started, tell client results are still being generated (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 9 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 | « 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 2013 Google Inc. 4 Copyright 2013 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 HTTP server for our HTML rebaseline viewer. 9 HTTP server for our HTML rebaseline viewer.
10 """ 10 """
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 GENERATED_IMAGES_DIR = os.path.join(STATIC_CONTENTS_DIR, 'generated-images') 80 GENERATED_IMAGES_DIR = os.path.join(STATIC_CONTENTS_DIR, 'generated-images')
81 GENERATED_JSON_DIR = os.path.join(STATIC_CONTENTS_DIR, 'generated-json') 81 GENERATED_JSON_DIR = os.path.join(STATIC_CONTENTS_DIR, 'generated-json')
82 82
83 # How often (in seconds) clients should reload while waiting for initial 83 # How often (in seconds) clients should reload while waiting for initial
84 # results to load. 84 # results to load.
85 RELOAD_INTERVAL_UNTIL_READY = 10 85 RELOAD_INTERVAL_UNTIL_READY = 10
86 86
87 _HTTP_HEADER_CONTENT_LENGTH = 'Content-Length' 87 _HTTP_HEADER_CONTENT_LENGTH = 'Content-Length'
88 _HTTP_HEADER_CONTENT_TYPE = 'Content-Type' 88 _HTTP_HEADER_CONTENT_TYPE = 'Content-Type'
89 89
90 SUMMARY_TYPES = [
91 results_mod.KEY__HEADER__RESULTS_ALL,
92 results_mod.KEY__HEADER__RESULTS_FAILURES,
93 ]
94
90 _SERVER = None # This gets filled in by main() 95 _SERVER = None # This gets filled in by main()
91 96
92 97
93 def _run_command(args, directory): 98 def _run_command(args, directory):
94 """Runs a command and returns stdout as a single string. 99 """Runs a command and returns stdout as a single string.
95 100
96 Args: 101 Args:
97 args: the command to run, as a list of arguments 102 args: the command to run, as a list of arguments
98 directory: directory within which to run the command 103 directory: directory within which to run the command
99 104
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 self._actuals_dir = actuals_dir 170 self._actuals_dir = actuals_dir
166 self._actuals_repo_revision = actuals_repo_revision 171 self._actuals_repo_revision = actuals_repo_revision
167 self._actuals_repo_url = actuals_repo_url 172 self._actuals_repo_url = actuals_repo_url
168 self._port = port 173 self._port = port
169 self._export = export 174 self._export = export
170 self._editable = editable 175 self._editable = editable
171 self._reload_seconds = reload_seconds 176 self._reload_seconds = reload_seconds
172 self._actuals_repo = _create_svn_checkout( 177 self._actuals_repo = _create_svn_checkout(
173 dir_path=actuals_dir, repo_url=actuals_repo_url) 178 dir_path=actuals_dir, repo_url=actuals_repo_url)
174 179
180 # Since we don't have any results ready yet, prepare a dummy results file
epoger 2014/03/20 18:26:44 Reason for the change: Since https://code.google.
181 # telling any clients that we're still working on the results.
182 response_dict = {
183 results_mod.KEY__HEADER: {
184 results_mod.KEY__HEADER__SCHEMA_VERSION: (
185 results_mod.REBASELINE_SERVER_SCHEMA_VERSION_NUMBER),
186 results_mod.KEY__HEADER__IS_STILL_LOADING: True,
187 results_mod.KEY__HEADER__TIME_UPDATED: 0,
188 results_mod.KEY__HEADER__TIME_NEXT_UPDATE_AVAILABLE: (
189 RELOAD_INTERVAL_UNTIL_READY),
190 },
191 }
192 if not os.path.isdir(GENERATED_JSON_DIR):
193 os.makedirs(GENERATED_JSON_DIR)
194 for summary_type in SUMMARY_TYPES:
195 gm_json.WriteToFile(
196 response_dict,
197 os.path.join(GENERATED_JSON_DIR, '%s.json' % summary_type))
198
175 # Reentrant lock that must be held whenever updating EITHER of: 199 # Reentrant lock that must be held whenever updating EITHER of:
176 # 1. self._results 200 # 1. self._results
177 # 2. the expected or actual results on local disk 201 # 2. the expected or actual results on local disk
178 self.results_rlock = threading.RLock() 202 self.results_rlock = threading.RLock()
179 # self._results will be filled in by calls to update_results() 203 # self._results will be filled in by calls to update_results()
180 self._results = None 204 self._results = None
181 205
182 @property 206 @property
183 def results(self): 207 def results(self):
184 """ Returns the most recently generated results, or None if we don't have 208 """ Returns the most recently generated results, or None if we don't have
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 logging.info( 263 logging.info(
240 'Updating expected GM results in %s by syncing Skia repo ...' % 264 'Updating expected GM results in %s by syncing Skia repo ...' %
241 results_mod.DEFAULT_EXPECTATIONS_DIR) 265 results_mod.DEFAULT_EXPECTATIONS_DIR)
242 _run_command(['gclient', 'sync'], TRUNK_DIRECTORY) 266 _run_command(['gclient', 'sync'], TRUNK_DIRECTORY)
243 267
244 new_results = results_mod.Results( 268 new_results = results_mod.Results(
245 actuals_root=self._actuals_dir, 269 actuals_root=self._actuals_dir,
246 generated_images_root=GENERATED_IMAGES_DIR, 270 generated_images_root=GENERATED_IMAGES_DIR,
247 diff_base_url=os.path.relpath( 271 diff_base_url=os.path.relpath(
248 GENERATED_IMAGES_DIR, GENERATED_JSON_DIR)) 272 GENERATED_IMAGES_DIR, GENERATED_JSON_DIR))
273
249 if not os.path.isdir(GENERATED_JSON_DIR): 274 if not os.path.isdir(GENERATED_JSON_DIR):
250 os.makedirs(GENERATED_JSON_DIR) 275 os.makedirs(GENERATED_JSON_DIR)
251 for summary_type in [results_mod.KEY__HEADER__RESULTS_ALL, 276 for summary_type in SUMMARY_TYPES:
252 results_mod.KEY__HEADER__RESULTS_FAILURES]:
253 gm_json.WriteToFile( 277 gm_json.WriteToFile(
254 new_results.get_packaged_results_of_type(results_type=summary_type), 278 new_results.get_packaged_results_of_type(results_type=summary_type),
255 os.path.join(GENERATED_JSON_DIR, '%s.json' % summary_type)) 279 os.path.join(GENERATED_JSON_DIR, '%s.json' % summary_type))
256 280
257 self._results = new_results 281 self._results = new_results
258 282
259 def _result_loader(self, reload_seconds=0): 283 def _result_loader(self, reload_seconds=0):
260 """ Call self.update_results(), either once or periodically. 284 """ Call self.update_results(), either once or periodically.
261 285
262 Params: 286 Params:
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 _SERVER = Server(actuals_dir=args.actuals_dir, 526 _SERVER = Server(actuals_dir=args.actuals_dir,
503 actuals_repo_revision=args.actuals_revision, 527 actuals_repo_revision=args.actuals_revision,
504 actuals_repo_url=args.actuals_repo, 528 actuals_repo_url=args.actuals_repo,
505 port=args.port, export=args.export, editable=args.editable, 529 port=args.port, export=args.export, editable=args.editable,
506 reload_seconds=args.reload) 530 reload_seconds=args.reload)
507 _SERVER.run() 531 _SERVER.run()
508 532
509 533
510 if __name__ == '__main__': 534 if __name__ == '__main__':
511 main() 535 main()
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