blob: ce986112174715b867951000f045ec83020559b5 [file]
#!/usr/bin/env python
# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
""" Run the Skia render_pictures executable. """
from build_step import BuildStep, BuildStepWarning
import os
import sys
JSON_SUMMARY_FILENAME_FORMATTER = 'renderskp-%s.json'
# TODO(epoger): Consider defining these configs in a separate config file within
# the Skia repo, like we do with
# https://skia.googlesource.com/skia/+/master/tools/bench_pictures.cfg
# Or, perhaps we should even share the specific configs with bench_pictures?
# (Generally, we want to test the same code for both correctness and
# performance.)
DEFAULT_TILE_X = 256
DEFAULT_TILE_Y = 256
CONFIGS = {
'defaults': [],
'deferImageDecoding': ['--deferImageDecoding', '--useVolatileCache'],
'grid': ['--bbh', 'grid', str(DEFAULT_TILE_X), str(DEFAULT_TILE_X) ],
'rtree': ['--bbh', 'rtree' ],
}
class RenderSKPs(BuildStep):
def __init__(self, timeout=9600, no_output_timeout=9600, **kwargs):
super(RenderSKPs, self).__init__(
timeout=timeout, no_output_timeout=no_output_timeout, **kwargs)
def DoRenderSKPs(self, args, description, config='8888', write_images=True):
"""Run render_pictures.
Args:
args: (list of strings) misc args to append to the command line
description: (string) description of this RenderSKPs run; used as part
of the JSON summary filename
config: (string) which config to run in
write_images: (boolean) whether to save the generated images (IGNORED)
Raises:
BuildStepWarning if there was a problem, but the step should keep going.
Something else if there was a major problem and we should give up now.
"""
json_summary_filename = JSON_SUMMARY_FILENAME_FORMATTER % description
json_expectations_devicepath = self._flavor_utils.DevicePathJoin(
self._device_dirs.PlaybackExpectedSummariesDir(), json_summary_filename)
if not self._flavor_utils.DevicePathExists(json_expectations_devicepath):
raise BuildStepWarning('could not find JSON expectations file %s' %
json_expectations_devicepath)
cmd = [
'--config', config,
'--mode', 'tile', str(DEFAULT_TILE_X), str(DEFAULT_TILE_Y),
'--readJsonSummaryPath', json_expectations_devicepath,
'--readPath', self._device_dirs.SKPDir(),
'--writeChecksumBasedFilenames',
'--writeJsonSummaryPath', self._flavor_utils.DevicePathJoin(
self._device_dirs.PlaybackActualSummariesDir(),
json_summary_filename),
]
if write_images:
cmd.extend([
'--mismatchPath', self._device_dirs.PlaybackActualImagesDir()])
cmd.extend(args)
if False:
# For now, skip --validate on all builders, since it takes more time,
# and at last check failed on Windows.
if not os.name == 'nt':
cmd.append('--validate')
self._flavor_utils.RunFlavoredCmd('render_pictures', cmd)
def _Run(self):
exceptions = []
for description, args in sorted(CONFIGS.iteritems()):
try:
self.DoRenderSKPs(args=args, description=description)
except BuildStepWarning, e:
exceptions.append(e)
print e
if exceptions:
raise BuildStepWarning('\nGot %d exceptions:\n%s' % (
len(exceptions), '\n'.join([repr(e) for e in exceptions])))
if '__main__' == __name__:
sys.exit(BuildStep.RunBuildStep(RenderSKPs))