| Index: slave/skia_slave_scripts/flavor_utils/default_build_step_utils.py
|
| diff --git a/slave/skia_slave_scripts/flavor_utils/default_build_step_utils.py b/slave/skia_slave_scripts/flavor_utils/default_build_step_utils.py
|
| deleted file mode 100644
|
| index 97480ad74d7f263ee6197bea1af30a0e50841c1e..0000000000000000000000000000000000000000
|
| --- a/slave/skia_slave_scripts/flavor_utils/default_build_step_utils.py
|
| +++ /dev/null
|
| @@ -1,260 +0,0 @@
|
| -# 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.
|
| -
|
| -""" Utilities for generic build steps. """
|
| -
|
| -import os
|
| -import shutil
|
| -import sys
|
| -
|
| -from utils import file_utils
|
| -from py.utils import shell_utils
|
| -
|
| -
|
| -class DeviceDirs(object):
|
| - def __init__(self, perf_data_dir, gm_actual_dir, gm_expected_dir, dm_dir,
|
| - resource_dir, skimage_in_dir, skimage_expected_dir,
|
| - skimage_out_dir, skp_dir, skp_perf_dir,
|
| - playback_actual_images_dir, playback_actual_summaries_dir,
|
| - playback_expected_summaries_dir, tmp_dir):
|
| - self._perf_data_dir = perf_data_dir
|
| - self._gm_actual_dir = gm_actual_dir
|
| - self._gm_expected_dir = gm_expected_dir
|
| - self._dm_dir = dm_dir
|
| - self._resource_dir = resource_dir
|
| - self._skimage_in_dir = skimage_in_dir
|
| - self._skimage_expected_dir = skimage_expected_dir
|
| - self._skimage_out_dir = skimage_out_dir
|
| - self._skp_dir = skp_dir
|
| - self._skp_perf_dir = skp_perf_dir
|
| - self._playback_actual_images_dir = playback_actual_images_dir
|
| - self._playback_actual_summaries_dir = playback_actual_summaries_dir
|
| - self._playback_expected_summaries_dir = playback_expected_summaries_dir
|
| - self._tmp_dir = tmp_dir
|
| -
|
| - def GMActualDir(self):
|
| - """Holds images and JSON summary written out by the 'gm' tool."""
|
| - return self._gm_actual_dir
|
| -
|
| - def GMExpectedDir(self):
|
| - """Holds expectations JSON summary read by the 'gm' tool."""
|
| - return self._gm_expected_dir
|
| -
|
| - def DMDir(self):
|
| - """Where DM writes."""
|
| - return self._dm_dir
|
| -
|
| - def PerfDir(self):
|
| - return self._perf_data_dir
|
| -
|
| - def PlaybackActualImagesDir(self):
|
| - """Holds image files written out by the 'render_pictures' tool."""
|
| - return self._playback_actual_images_dir
|
| -
|
| - def PlaybackActualSummariesDir(self):
|
| - """Holds actual-result JSON summaries written by 'render_pictures' tool."""
|
| - return self._playback_actual_summaries_dir
|
| -
|
| - def PlaybackExpectedSummariesDir(self):
|
| - """Holds expected-result JSON summaries read by 'render_pictures' tool."""
|
| - return self._playback_expected_summaries_dir
|
| -
|
| - def ResourceDir(self):
|
| - return self._resource_dir
|
| -
|
| - def SKImageInDir(self):
|
| - return self._skimage_in_dir
|
| -
|
| - def SKImageExpectedDir(self):
|
| - return self._skimage_expected_dir
|
| -
|
| - def SKImageOutDir(self):
|
| - return self._skimage_out_dir
|
| -
|
| - def SKPDir(self):
|
| - """Holds SKP files that are consumed by RenderSKPs and BenchPictures."""
|
| - return self._skp_dir
|
| -
|
| - def SKPPerfDir(self):
|
| - return self._skp_perf_dir
|
| -
|
| - def TmpDir(self):
|
| - return self._tmp_dir
|
| -
|
| -
|
| -class DefaultBuildStepUtils:
|
| - """ Utilities to be used by subclasses of BuildStep.
|
| -
|
| - The methods in this class define how certain high-level functions should work.
|
| - Each build step flavor should correspond to a subclass of BuildStepUtils which
|
| - may override any of these functions as appropriate for that flavor.
|
| -
|
| - For example, the AndroidBuildStepUtils will override the functions for copying
|
| - files between the host and Android device, as well as the RunFlavoredCmd
|
| - function, so that commands may be run through ADB. """
|
| -
|
| - def __init__(self, build_step_instance):
|
| - self._step = build_step_instance
|
| -
|
| - def ListBuildStepExecutables(self):
|
| - """ Called by subclasses that may need to install the executables. """
|
| - return ['dm', 'gm', 'render_pictures', 'render_pdfs',
|
| - 'skimage', 'nanobench']
|
| -
|
| - def _PathToBinary(self, binary):
|
| - """ Returns the path to the given built executable. """
|
| - return os.path.join('out', self._step.configuration, binary)
|
| -
|
| - def RunFlavoredCmd(self, app, args):
|
| - """ Override this in new BuildStepUtils flavors. """
|
| - if (sys.platform == 'linux2' and 'x86_64' in self._step.builder_name
|
| - and not 'TSAN' in self._step.builder_name):
|
| - cmd = ['catchsegv', self._PathToBinary(app)]
|
| - else:
|
| - cmd = [self._PathToBinary(app)]
|
| - shell_utils.run(cmd + args)
|
| -
|
| - def ReadFileOnDevice(self, filepath):
|
| - """ Read the contents of a file on the associated device. Subclasses should
|
| - override this method with one appropriate for reading the contents of a file
|
| - on the device side. """
|
| - with open(filepath) as f:
|
| - return f.read()
|
| -
|
| - def CopyDirectoryContentsToDevice(self, host_dir, device_dir):
|
| - """ Copy the contents of a host-side directory to a clean directory on the
|
| - device side. Subclasses should override this method with one appropriate for
|
| - copying the contents of a host-side directory to a clean device-side
|
| - directory.
|
| -
|
| - TODO(epoger): Clarify the description a bit: this method does not expect
|
| - device_dir to be an empty directory before it is called. Implementations
|
| - of this method for other device types create an empty directory at
|
| - device_dir as the first step.
|
| - """
|
| - # For "normal" builders who don't have an attached device, we expect
|
| - # host_dir and device_dir to be the same.
|
| - if host_dir != device_dir:
|
| - raise ValueError('For builders who do not have attached devices, copying '
|
| - 'from host to device is undefined and only allowed if '
|
| - 'host_dir and device_dir are the same.')
|
| -
|
| - def CopyDirectoryContentsToHost(self, device_dir, host_dir):
|
| - """ Copy the contents of a device-side directory to a clean directory on the
|
| - host side. Subclasses should override this method with one appropriate for
|
| - copying the contents of a device-side directory to a clean host-side
|
| - directory."""
|
| - # For "normal" builders who don't have an attached device, we expect
|
| - # host_dir and device_dir to be the same.
|
| - if host_dir != device_dir:
|
| - raise ValueError('For builders who do not have attached devices, copying '
|
| - 'from host to device is undefined and only allowed if '
|
| - 'host_dir and device_dir are the same.')
|
| -
|
| - def PushFileToDevice(self, src, dst):
|
| - """ Copy the a single file from path "src" on the host to path "dst" on
|
| - the device. If the host IS the device we are testing, it's just a filecopy.
|
| - Subclasses should override this method with one appropriate for
|
| - pushing the file to the device. """
|
| - shutil.copy(src, dst)
|
| -
|
| - def DeviceListDir(self, directory):
|
| - """ List the contents of a directory on the connected device. """
|
| - return os.listdir(directory)
|
| -
|
| - def DevicePathExists(self, path):
|
| - """ Like os.path.exists(), but for a path on the connected device. """
|
| - return os.path.exists(path)
|
| -
|
| - def DevicePathJoin(self, *args):
|
| - """ Like os.path.join(), but for paths that will target the connected
|
| - device. """
|
| - return os.sep.join(args)
|
| -
|
| - def CreateCleanDeviceDirectory(self, directory):
|
| - """ Creates an empty directory on an attached device. Subclasses with
|
| - attached devices should override. """
|
| - file_utils.create_clean_local_dir(directory)
|
| -
|
| - def CreateCleanHostDirectory(self, directory):
|
| - """ Creates an empty directory on the host. Can be overridden by subclasses,
|
| - but that should not be necessary. """
|
| - file_utils.create_clean_local_dir(directory)
|
| -
|
| - def Install(self):
|
| - """ Install the Skia executables. """
|
| - pass
|
| -
|
| - def RunGYP(self):
|
| - self.Compile('gyp')
|
| -
|
| - def Compile(self, target):
|
| - """ Compile the Skia executables. """
|
| - # TODO(borenet): It would be nice to increase code sharing here.
|
| - if 'Win8' in self._step.builder_name:
|
| - os.environ['GYP_MSVS_VERSION'] = '2012'
|
| - print 'GYP_MSVS_VERSION="%s"' % os.environ['GYP_MSVS_VERSION']
|
| -
|
| - os.environ['CHROME_PATH'] = os.path.join(os.path.expanduser('~'), 'src')
|
| - print 'CHROME_PATH="%s"' % os.environ['CHROME_PATH']
|
| -
|
| - os.environ['GYP_DEFINES'] = self._step.args['gyp_defines']
|
| - print 'GYP_DEFINES="%s"' % os.environ['GYP_DEFINES']
|
| - make_cmd = 'make'
|
| - if os.name == 'nt':
|
| - make_cmd = 'make.bat'
|
| - cmd = [make_cmd,
|
| - target,
|
| - 'BUILDTYPE=%s' % self._step.configuration,
|
| - ]
|
| - cmd.extend(self._step.default_make_flags)
|
| - cmd.extend(self._step.make_flags)
|
| -
|
| - # TODO(epoger): Maybe remove this once we fix the underlying problem in
|
| - # https://code.google.com/p/skia/issues/detail?id=2393 ('recurring RunGYP
|
| - # failures on multiple Test-Win7-ShuttleA-HD2000-* bots')
|
| - print 'about to run cmd %s' % cmd
|
| - cwd = os.getcwd()
|
| - print 'cwd is %s' % cwd
|
| - print 'contents of cwd are %s' % os.listdir(cwd)
|
| -
|
| - shell_utils.run(cmd)
|
| -
|
| - def MakeClean(self):
|
| - make_cmd = 'make'
|
| - if os.name == 'nt':
|
| - make_cmd = 'make.bat'
|
| - shell_utils.run([make_cmd, 'clean'])
|
| -
|
| - def PreRun(self):
|
| - """ Preprocessing step to run before the BuildStep itself. """
|
| - pass
|
| -
|
| - def GetDeviceDirs(self):
|
| - """ Set the directories which will be used by the BuildStep.
|
| -
|
| - In the case of DefaultBuildStepUtils, host_dirs and device_dirs are the
|
| - same, which is why CopyDirectoryContentsToDevice() is a no-op.
|
| - """
|
| - return DeviceDirs(
|
| - perf_data_dir=self._step.perf_data_dir,
|
| - # TODO(epoger): Instead, set gm_actual_dir to self._step._gm_actual_dir
|
| - # and remove os.path.join() with self._builder_name in postrender.py ?
|
| - # (CopyDirectoryContentsToHost fails if the paths are different when
|
| - # host==device, so why not just make them inherently equal?)
|
| - gm_actual_dir=os.path.join(os.pardir, os.pardir, 'gm', 'actual'),
|
| - gm_expected_dir=os.path.join(os.pardir, os.pardir, 'gm', 'expected'),
|
| - dm_dir=os.path.join(os.pardir, os.pardir, 'dm'),
|
| - resource_dir=self._step.resource_dir,
|
| - skimage_in_dir=self._step.skimage_in_dir,
|
| - skimage_expected_dir=os.path.join(os.pardir, os.pardir, 'skimage',
|
| - 'expected'),
|
| - skimage_out_dir=self._step.skimage_out_dir,
|
| - skp_dir=self._step.skp_dir,
|
| - skp_perf_dir=self._step.perf_data_dir,
|
| - playback_actual_images_dir=self._step.playback_actual_images_dir,
|
| - playback_actual_summaries_dir=self._step.playback_actual_summaries_dir,
|
| - playback_expected_summaries_dir=(
|
| - self._step.playback_expected_summaries_dir),
|
| - tmp_dir=os.path.join(os.pardir, 'tmp'))
|
|
|