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

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

Issue 479613002: Add ability to output ImageBaseGSUrl to render_picture and use in rebaseline server (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix render_pictures_test after rebase Created 6 years, 4 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
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 """ 3 """
4 Copyright 2014 Google Inc. 4 Copyright 2014 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 Compare results of two render_pictures runs. 9 Compare results of two render_pictures runs.
10 10
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 (dict_num, num_union_dict_paths, dict_path)) 261 (dict_num, num_union_dict_paths, dict_path))
262 262
263 dictA = self.get_default(setA_dicts, None, dict_path) 263 dictA = self.get_default(setA_dicts, None, dict_path)
264 self._validate_dict_version(dictA) 264 self._validate_dict_version(dictA)
265 dictA_results = self.get_default(dictA, {}, setA_section) 265 dictA_results = self.get_default(dictA, {}, setA_section)
266 266
267 dictB = self.get_default(setB_dicts, None, dict_path) 267 dictB = self.get_default(setB_dicts, None, dict_path)
268 self._validate_dict_version(dictB) 268 self._validate_dict_version(dictB)
269 dictB_results = self.get_default(dictB, {}, setB_section) 269 dictB_results = self.get_default(dictB, {}, setB_section)
270 270
271 image_A_base_url = self.get_default(
272 setA_dicts, self._image_base_gs_url, dict_path,
273 gm_json.JSONKEY_IMAGE_BASE_GS_URL)
274 image_B_base_url = self.get_default(
275 setB_dicts, self._image_base_gs_url, dict_path,
276 gm_json.JSONKEY_IMAGE_BASE_GS_URL)
277
271 # get the builders and render modes for each set 278 # get the builders and render modes for each set
272 builder_A = self.get_default(dictA, None, 279 builder_A = self.get_default(dictA, None,
273 gm_json.JSONKEY_DESCRIPTIONS, 280 gm_json.JSONKEY_DESCRIPTIONS,
274 gm_json.JSONKEY_DESCRIPTIONS_BUILDER) 281 gm_json.JSONKEY_DESCRIPTIONS_BUILDER)
275 render_mode_A = self.get_default(dictA, None, 282 render_mode_A = self.get_default(dictA, None,
276 gm_json.JSONKEY_DESCRIPTIONS, 283 gm_json.JSONKEY_DESCRIPTIONS,
277 gm_json.JSONKEY_DESCRIPTIONS_RENDER_MODE) 284 gm_json.JSONKEY_DESCRIPTIONS_RENDER_MODE)
278 builder_B = self.get_default(dictB, None, 285 builder_B = self.get_default(dictB, None,
279 gm_json.JSONKEY_DESCRIPTIONS, 286 gm_json.JSONKEY_DESCRIPTIONS,
280 gm_json.JSONKEY_DESCRIPTIONS_BUILDER) 287 gm_json.JSONKEY_DESCRIPTIONS_BUILDER)
281 render_mode_B = self.get_default(dictB, None, 288 render_mode_B = self.get_default(dictB, None,
282 gm_json.JSONKEY_DESCRIPTIONS, 289 gm_json.JSONKEY_DESCRIPTIONS,
283 gm_json.JSONKEY_DESCRIPTIONS_RENDER_MODE) 290 gm_json.JSONKEY_DESCRIPTIONS_RENDER_MODE)
284 291
285 skp_names = sorted(set(dictA_results.keys() + dictB_results.keys())) 292 skp_names = sorted(set(dictA_results.keys() + dictB_results.keys()))
286 # Just for manual testing... truncate to an arbitrary subset. 293 # Just for manual testing... truncate to an arbitrary subset.
287 if self.truncate_results: 294 if self.truncate_results:
288 skp_names = skp_names[1:3] 295 skp_names = skp_names[1:3]
289 for skp_name in skp_names: 296 for skp_name in skp_names:
290 imagepairs_for_this_skp = [] 297 imagepairs_for_this_skp = []
291 298
292 whole_image_A = self.get_default( 299 whole_image_A = self.get_default(
293 dictA_results, None, 300 dictA_results, None,
294 skp_name, gm_json.JSONKEY_SOURCE_WHOLEIMAGE) 301 skp_name, gm_json.JSONKEY_SOURCE_WHOLEIMAGE)
295 whole_image_B = self.get_default( 302 whole_image_B = self.get_default(
296 dictB_results, None, 303 dictB_results, None,
297 skp_name, gm_json.JSONKEY_SOURCE_WHOLEIMAGE) 304 skp_name, gm_json.JSONKEY_SOURCE_WHOLEIMAGE)
305
298 imagepairs_for_this_skp.append(self._create_image_pair( 306 imagepairs_for_this_skp.append(self._create_image_pair(
299 image_dict_A=whole_image_A, image_dict_B=whole_image_B, 307 image_dict_A=whole_image_A, image_dict_B=whole_image_B,
308 image_A_base_url=image_A_base_url,
309 image_B_base_url=image_B_base_url,
300 builder_A=builder_A, render_mode_A=render_mode_A, 310 builder_A=builder_A, render_mode_A=render_mode_A,
301 builder_B=builder_B, render_mode_B=render_mode_B, 311 builder_B=builder_B, render_mode_B=render_mode_B,
302 source_json_file=dict_path, 312 source_json_file=dict_path,
303 source_skp_name=skp_name, tilenum=None)) 313 source_skp_name=skp_name, tilenum=None))
304 314
305 tiled_images_A = self.get_default( 315 tiled_images_A = self.get_default(
306 dictA_results, [], 316 dictA_results, [],
307 skp_name, gm_json.JSONKEY_SOURCE_TILEDIMAGES) 317 skp_name, gm_json.JSONKEY_SOURCE_TILEDIMAGES)
308 tiled_images_B = self.get_default( 318 tiled_images_B = self.get_default(
309 dictB_results, [], 319 dictB_results, [],
310 skp_name, gm_json.JSONKEY_SOURCE_TILEDIMAGES) 320 skp_name, gm_json.JSONKEY_SOURCE_TILEDIMAGES)
311 if tiled_images_A or tiled_images_B: 321 if tiled_images_A or tiled_images_B:
312 num_tiles_A = len(tiled_images_A) 322 num_tiles_A = len(tiled_images_A)
313 num_tiles_B = len(tiled_images_B) 323 num_tiles_B = len(tiled_images_B)
314 num_tiles = max(num_tiles_A, num_tiles_B) 324 num_tiles = max(num_tiles_A, num_tiles_B)
315 for tile_num in range(num_tiles): 325 for tile_num in range(num_tiles):
316 imagepairs_for_this_skp.append(self._create_image_pair( 326 imagepairs_for_this_skp.append(self._create_image_pair(
317 image_dict_A=(tiled_images_A[tile_num] 327 image_dict_A=(tiled_images_A[tile_num]
318 if tile_num < num_tiles_A else None), 328 if tile_num < num_tiles_A else None),
319 image_dict_B=(tiled_images_B[tile_num] 329 image_dict_B=(tiled_images_B[tile_num]
320 if tile_num < num_tiles_B else None), 330 if tile_num < num_tiles_B else None),
331 image_A_base_url=image_A_base_url,
332 image_B_base_url=image_B_base_url,
321 builder_A=builder_A, render_mode_A=render_mode_A, 333 builder_A=builder_A, render_mode_A=render_mode_A,
322 builder_B=builder_B, render_mode_B=render_mode_B, 334 builder_B=builder_B, render_mode_B=render_mode_B,
323 source_json_file=dict_path, 335 source_json_file=dict_path,
324 source_skp_name=skp_name, tilenum=tile_num)) 336 source_skp_name=skp_name, tilenum=tile_num))
325 337
326 for one_imagepair in imagepairs_for_this_skp: 338 for one_imagepair in imagepairs_for_this_skp:
327 if one_imagepair: 339 if one_imagepair:
328 all_image_pairs.add_image_pair(one_imagepair) 340 all_image_pairs.add_image_pair(one_imagepair)
329 result_type = one_imagepair.extra_columns_dict\ 341 result_type = one_imagepair.extra_columns_dict\
330 [COLUMN__RESULT_TYPE] 342 [COLUMN__RESULT_TYPE]
(...skipping 30 matching lines...) Expand all
361 header = result_dict[gm_json.JSONKEY_HEADER] 373 header = result_dict[gm_json.JSONKEY_HEADER]
362 header_type = header[gm_json.JSONKEY_HEADER_TYPE] 374 header_type = header[gm_json.JSONKEY_HEADER_TYPE]
363 if header_type != expected_header_type: 375 if header_type != expected_header_type:
364 raise Exception('expected header_type "%s", but got "%s"' % ( 376 raise Exception('expected header_type "%s", but got "%s"' % (
365 expected_header_type, header_type)) 377 expected_header_type, header_type))
366 header_revision = header[gm_json.JSONKEY_HEADER_REVISION] 378 header_revision = header[gm_json.JSONKEY_HEADER_REVISION]
367 if header_revision != expected_header_revision: 379 if header_revision != expected_header_revision:
368 raise Exception('expected header_revision %d, but got %d' % ( 380 raise Exception('expected header_revision %d, but got %d' % (
369 expected_header_revision, header_revision)) 381 expected_header_revision, header_revision))
370 382
371 def _create_image_pair(self, image_dict_A, image_dict_B, 383 def _create_image_pair(self, image_dict_A, image_dict_B,
372 builder_A, render_mode_A, 384 image_A_base_url, image_B_base_url,
385 builder_A, render_mode_A,
373 builder_B, render_mode_B, 386 builder_B, render_mode_B,
374 source_json_file, 387 source_json_file,
375 source_skp_name, tilenum): 388 source_skp_name, tilenum):
376 """Creates an ImagePair object for this pair of images. 389 """Creates an ImagePair object for this pair of images.
377 390
378 Args: 391 Args:
379 image_dict_A: dict with JSONKEY_IMAGE_* keys, or None if no image 392 image_dict_A: dict with JSONKEY_IMAGE_* keys, or None if no image
380 image_dict_B: dict with JSONKEY_IMAGE_* keys, or None if no image 393 image_dict_B: dict with JSONKEY_IMAGE_* keys, or None if no image
394 image_A_base_url: base URL for image A
395 image_B_base_url: base URL for image B
381 builder_A: builder that created image set A or None if unknow 396 builder_A: builder that created image set A or None if unknow
382 render_mode_A: render mode used to generate image set A or None if 397 render_mode_A: render mode used to generate image set A or None if
383 unknown. 398 unknown.
384 builder_B: builder that created image set A or None if unknow 399 builder_B: builder that created image set A or None if unknow
385 render_mode_B: render mode used to generate image set A or None if 400 render_mode_B: render mode used to generate image set A or None if
386 unknown. 401 unknown.
387 source_json_file: string; relative path of the JSON file where this 402 source_json_file: string; relative path of the JSON file where this
388 result came from, within setA and setB. 403 result came from, within setA and setB.
389 source_skp_name: string; name of the source SKP file 404 source_skp_name: string; name of the source SKP file
390 tilenum: which tile, or None if a wholeimage 405 tilenum: which tile, or None if a wholeimage
391 406
392 Returns: 407 Returns:
393 An ImagePair object, or None if both image_dict_A and image_dict_B are 408 An ImagePair object, or None if both image_dict_A and image_dict_B are
394 None. 409 None.
395 """ 410 """
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 if tilenum == None: 444 if tilenum == None:
430 extra_columns_dict[COLUMN__TILED_OR_WHOLE] = COLUMN__TILED_OR_WHOLE__WHOLE 445 extra_columns_dict[COLUMN__TILED_OR_WHOLE] = COLUMN__TILED_OR_WHOLE__WHOLE
431 extra_columns_dict[COLUMN__TILENUM] = 'N/A' 446 extra_columns_dict[COLUMN__TILENUM] = 'N/A'
432 else: 447 else:
433 extra_columns_dict[COLUMN__TILED_OR_WHOLE] = COLUMN__TILED_OR_WHOLE__TILED 448 extra_columns_dict[COLUMN__TILED_OR_WHOLE] = COLUMN__TILED_OR_WHOLE__TILED
434 extra_columns_dict[COLUMN__TILENUM] = str(tilenum) 449 extra_columns_dict[COLUMN__TILENUM] = str(tilenum)
435 450
436 try: 451 try:
437 return imagepair.ImagePair( 452 return imagepair.ImagePair(
438 image_diff_db=self._image_diff_db, 453 image_diff_db=self._image_diff_db,
439 base_url=self._image_base_gs_url, 454 imageA_base_url=image_A_base_url,
455 imageB_base_url=image_B_base_url,
440 imageA_relative_url=imageA_relative_url, 456 imageA_relative_url=imageA_relative_url,
441 imageB_relative_url=imageB_relative_url, 457 imageB_relative_url=imageB_relative_url,
442 extra_columns=extra_columns_dict, 458 extra_columns=extra_columns_dict,
443 source_json_file=source_json_file, 459 source_json_file=source_json_file,
444 download_all_images=self._download_all_images) 460 download_all_images=self._download_all_images)
445 except (KeyError, TypeError): 461 except (KeyError, TypeError):
446 logging.exception( 462 logging.exception(
447 'got exception while creating ImagePair for' 463 'got exception while creating ImagePair for'
448 ' urlPair=("%s","%s"), source_skp_name="%s", tilenum="%s"' % ( 464 ' urlPair=("%s","%s"), source_skp_name="%s", tilenum="%s"' % (
449 imageA_relative_url, imageB_relative_url, source_skp_name, 465 imageA_relative_url, imageB_relative_url, source_skp_name,
(...skipping 29 matching lines...) Expand all
479 source_dir: path to source dir (GS URL, local filepath, or a special 495 source_dir: path to source dir (GS URL, local filepath, or a special
480 "repo:" URL type that points at a file within our Skia checkout; 496 "repo:" URL type that points at a file within our Skia checkout;
481 only the "repo:" URL type will have a commit hash. 497 only the "repo:" URL type will have a commit hash.
482 """ 498 """
483 if source_dir.lower().startswith(REPO_URL_PREFIX): 499 if source_dir.lower().startswith(REPO_URL_PREFIX):
484 repo_dir = os.path.join(REPO_BASEPATH, source_dir[len(REPO_URL_PREFIX):]) 500 repo_dir = os.path.join(REPO_BASEPATH, source_dir[len(REPO_URL_PREFIX):])
485 return subprocess.check_output( 501 return subprocess.check_output(
486 args=[git_utils.GIT, 'rev-parse', 'HEAD'], cwd=repo_dir).strip() 502 args=[git_utils.GIT, 'rev-parse', 'HEAD'], cwd=repo_dir).strip()
487 else: 503 else:
488 return None 504 return None
OLDNEW
« no previous file with comments | « gm/rebaseline_server/compare_configs.py ('k') | gm/rebaseline_server/compare_rendered_pictures_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698