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

Unified Diff: tools/rebaseline_imagefiles.py

Issue 17379004: rebaseline.py: split image-based rebaselining, which will go away soon, into its own script (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: sync_to_r9687 Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: tools/rebaseline_imagefiles.py
===================================================================
--- tools/rebaseline_imagefiles.py (revision 9661)
+++ tools/rebaseline_imagefiles.py (working copy)
@@ -1,20 +1,24 @@
#!/usr/bin/python
'''
-Copyright 2012 Google Inc.
+Copyright 2013 Google Inc.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
'''
'''
-Rebaselines the given GM tests, on all bots and all configurations.
-Must be run from the gm-expected directory. If run from a git or SVN
-checkout, the files will be added to the staging area for commit.
+Rebaselines GM test results as individual image files
+(the "old way", before https://goto.google.com/ChecksumTransitionDetail ).
+
+Once we have switched our expectations to JSON form for all platforms,
+we can delete this file.
+
+There is a lot of code duplicated between here and rebaseline.py, but
+that's fine because we will delete this file soon.
'''
# System-level imports
-import argparse
import os
import re
import subprocess
@@ -39,46 +43,16 @@
import gm_json
-# Mapping of gm-expectations subdir (under
-# https://skia.googlecode.com/svn/gm-expected/ )
-# to builder name (see list at http://108.170.217.252:10117/builders )
-SUBDIR_MAPPING = {
- 'base-shuttle-win7-intel-float':
- 'Test-Win7-ShuttleA-HD2000-x86-Release',
- 'base-shuttle-win7-intel-angle':
- 'Test-Win7-ShuttleA-HD2000-x86-Release-ANGLE',
- 'base-shuttle-win7-intel-directwrite':
- 'Test-Win7-ShuttleA-HD2000-x86-Release-DirectWrite',
- 'base-shuttle_ubuntu12_ati5770':
- 'Test-Ubuntu12-ShuttleA-ATI5770-x86_64-Release',
- 'base-macmini':
- 'Test-Mac10.6-MacMini4.1-GeForce320M-x86-Release',
- 'base-macmini-lion-float':
- 'Test-Mac10.7-MacMini4.1-GeForce320M-x86-Release',
- 'base-android-galaxy-nexus':
- 'Test-Android-GalaxyNexus-SGX540-Arm7-Debug',
- 'base-android-nexus-7':
- 'Test-Android-Nexus7-Tegra3-Arm7-Release',
- 'base-android-nexus-s':
- 'Test-Android-NexusS-SGX540-Arm7-Release',
- 'base-android-xoom':
- 'Test-Android-Xoom-Tegra2-Arm7-Release',
- 'base-android-nexus-10':
- 'Test-Android-Nexus10-MaliT604-Arm7-Release',
-}
-
-
class CommandFailedException(Exception):
pass
-class Rebaseliner(object):
+class ImageRebaseliner(object):
# params:
+ # expectations_root: root directory of all expectations
# json_base_url: base URL from which to read json_filename
# json_filename: filename (under json_base_url) from which to read a
# summary of results; typically "actual-results.json"
- # subdirs: which platform subdirectories to rebaseline; if not specified,
- # rebaseline all platform subdirectories
# tests: list of tests to rebaseline, or None if we should rebaseline
# whatever files the JSON results summary file tells us to
# configs: which configs to run for each test; this should only be
@@ -88,24 +62,22 @@
# files to checkout, display a list of operations that
# we would normally perform
# add_new: if True, add expectations for tests which don't have any yet
- def __init__(self, json_base_url, json_filename,
- subdirs=None, tests=None, configs=None, dry_run=False,
- add_new=False):
+ # missing_json_is_fatal: whether to halt execution if we cannot read a
+ # JSON actual result summary file
+ def __init__(self, expectations_root, json_base_url, json_filename,
+ tests=None, configs=None, dry_run=False,
+ add_new=False, missing_json_is_fatal=False):
if configs and not tests:
raise ValueError('configs should only be specified if tests ' +
'were specified also')
+ self._expectations_root = expectations_root
self._tests = tests
self._configs = configs
- if not subdirs:
- self._subdirs = sorted(SUBDIR_MAPPING.keys())
- self._missing_json_is_fatal = False
- else:
- self._subdirs = subdirs
- self._missing_json_is_fatal = True
self._json_base_url = json_base_url
self._json_filename = json_filename
self._dry_run = dry_run
self._add_new = add_new
+ self._missing_json_is_fatal = missing_json_is_fatal
self._googlestorage_gm_actuals_root = (
'http://chromium-skia-gm.commondatastorage.googleapis.com/gm')
self._testname_pattern = re.compile('(\S+)_(\S+).png')
@@ -332,80 +304,38 @@
print '# ' + expectations_subdir + ':'
for config in configs:
infilename = test + '_' + config + '.png'
- outfilename = os.path.join(expectations_subdir, infilename);
+ outfilename = os.path.join(self._expectations_root,
+ expectations_subdir, infilename);
self._RebaselineOneFile(expectations_subdir=expectations_subdir,
builder_name=builder_name,
infilename=infilename,
outfilename=outfilename,
all_results=all_results)
- # Rebaseline all platforms/tests/types we specified in the constructor.
- def RebaselineAll(self):
- for subdir in self._subdirs:
- if not subdir in SUBDIR_MAPPING.keys():
- raise Exception(('unrecognized platform subdir "%s"; ' +
- 'should be one of %s') % (
- subdir, SUBDIR_MAPPING.keys()))
- builder_name = SUBDIR_MAPPING[subdir]
- json_url = '/'.join([self._json_base_url,
- subdir, builder_name, subdir,
- self._json_filename])
- all_results = self._GetActualResults(json_url=json_url)
+ # Rebaseline all tests/types we specified in the constructor,
+ # within this gm-expectations subdir.
+ #
+ # params:
+ # subdir : e.g. 'base-shuttle-win7-intel-float'
+ # builder : e.g. 'Test-Win7-ShuttleA-HD2000-x86-Release'
+ def RebaselineSubdir(self, subdir, builder):
+ json_url = '/'.join([self._json_base_url,
+ subdir, builder, subdir,
+ self._json_filename])
+ all_results = self._GetActualResults(json_url=json_url)
- if self._tests:
- for test in self._tests:
- self._RebaselineOneTest(expectations_subdir=subdir,
- builder_name=builder_name,
- test=test, all_results=all_results)
- else: # get the raw list of files that need rebaselining from JSON
- filenames = self._GetFilesToRebaseline(json_url=json_url,
- add_new=self._add_new)
- for filename in filenames:
- outfilename = os.path.join(subdir, filename);
- self._RebaselineOneFile(expectations_subdir=subdir,
- builder_name=builder_name,
- infilename=filename,
- outfilename=outfilename,
- all_results=all_results)
-
-# main...
-
-parser = argparse.ArgumentParser()
-parser.add_argument('--add-new', action='store_true',
- help='in addition to the standard behavior of ' +
- 'updating expectations for failing tests, add ' +
- 'expectations for tests which don\'t have expectations ' +
- 'yet.')
-parser.add_argument('--configs', metavar='CONFIG', nargs='+',
- help='which configurations to rebaseline, e.g. ' +
- '"--configs 565 8888"; if unspecified, run a default ' +
- 'set of configs. This should ONLY be specified if ' +
- '--tests has also been specified.')
-parser.add_argument('--dry-run', action='store_true',
- help='instead of actually downloading files or adding ' +
- 'files to checkout, display a list of operations that ' +
- 'we would normally perform')
-parser.add_argument('--json-base-url',
- help='base URL from which to read JSON_FILENAME ' +
- 'files; defaults to %(default)s',
- default='http://skia-autogen.googlecode.com/svn/gm-actual')
-parser.add_argument('--json-filename',
- help='filename (under JSON_BASE_URL) to read a summary ' +
- 'of results from; defaults to %(default)s',
- default='actual-results.json')
-parser.add_argument('--subdirs', metavar='SUBDIR', nargs='+',
- help='which platform subdirectories to rebaseline; ' +
- 'if unspecified, rebaseline all subdirs, same as ' +
- '"--subdirs %s"' % ' '.join(sorted(SUBDIR_MAPPING.keys())))
-parser.add_argument('--tests', metavar='TEST', nargs='+',
- help='which tests to rebaseline, e.g. ' +
- '"--tests aaclip bigmatrix"; if unspecified, then all ' +
- 'failing tests (according to the actual-results.json ' +
- 'file) will be rebaselined.')
-args = parser.parse_args()
-rebaseliner = Rebaseliner(tests=args.tests, configs=args.configs,
- subdirs=args.subdirs, dry_run=args.dry_run,
- json_base_url=args.json_base_url,
- json_filename=args.json_filename,
- add_new=args.add_new)
-rebaseliner.RebaselineAll()
+ if self._tests:
+ for test in self._tests:
+ self._RebaselineOneTest(expectations_subdir=subdir,
+ builder_name=builder,
+ test=test, all_results=all_results)
+ else: # get the raw list of files that need rebaselining from JSON
+ filenames = self._GetFilesToRebaseline(json_url=json_url,
+ add_new=self._add_new)
+ for filename in filenames:
+ outfilename = os.path.join(subdir, filename);
+ self._RebaselineOneFile(expectations_subdir=subdir,
+ builder_name=builder,
+ infilename=filename,
+ outfilename=outfilename,
+ all_results=all_results)
« no previous file with comments | « tools/rebaseline.py ('k') | tools/tests/rebaseline/input/json1/base-android-galaxy-nexus/expected-results.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698