| Index: tools/auto_bisect/bisect_perf_regression.py
|
| diff --git a/tools/auto_bisect/bisect_perf_regression.py b/tools/auto_bisect/bisect_perf_regression.py
|
| index fd63d88f46317127fc1f28c671d27aed94233b93..89ba5e2059e96c3d33ee2de578f7244d1f09497e 100755
|
| --- a/tools/auto_bisect/bisect_perf_regression.py
|
| +++ b/tools/auto_bisect/bisect_perf_regression.py
|
| @@ -206,18 +206,6 @@ def FetchFromCloudStorage(bucket_name, source_path, destination_path):
|
| return None
|
|
|
|
|
| -# This is copied from build/scripts/common/chromium_utils.py.
|
| -def MaybeMakeDirectory(*path):
|
| - """Creates an entire path, if it doesn't already exist."""
|
| - file_path = os.path.join(*path)
|
| - try:
|
| - os.makedirs(file_path)
|
| - except OSError as e:
|
| - if e.errno != errno.EEXIST:
|
| - return False
|
| - return True
|
| -
|
| -
|
| # This was copied from build/scripts/common/chromium_utils.py.
|
| def ExtractZip(filename, output_dir, verbose=True):
|
| """ Extract the zip archive in the output directory."""
|
| @@ -1275,7 +1263,7 @@ class BisectPerformanceMetrics(object):
|
| 'DEPS checkout Failed for chromium revision : [%s]' % chromium_sha)
|
| return (None, None)
|
|
|
| - def _ObtainBuild(self, depot, revision=None):
|
| + def ObtainBuild(self, depot, revision=None):
|
| """Obtains a build by either downloading or building directly.
|
|
|
| Args:
|
| @@ -1613,6 +1601,8 @@ class BisectPerformanceMetrics(object):
|
| On success, a tuple containing the results of the performance test.
|
| Otherwise, a tuple with the error message.
|
| """
|
| + logging.info('Running RunTest with rev "%s", command "%s"',
|
| + revision, command)
|
| # Decide which sync program to use.
|
| sync_client = None
|
| if depot == 'chromium' or depot == 'android-chrome':
|
| @@ -1640,7 +1630,7 @@ class BisectPerformanceMetrics(object):
|
| # Obtain a build for this revision. This may be done by requesting a build
|
| # from another builder, waiting for it and downloading it.
|
| start_build_time = time.time()
|
| - build_success = self._ObtainBuild(depot, revision)
|
| + build_success = self.ObtainBuild(depot, revision)
|
| if not build_success:
|
| return ('Failed to build revision: [%s]' % str(revision),
|
| BUILD_RESULT_FAIL)
|
| @@ -2423,14 +2413,26 @@ def _IsPlatformSupported():
|
| return os.name in supported
|
|
|
|
|
| +def RemoveBuildFiles(build_type):
|
| + """Removes build files from previous runs."""
|
| + out_dir = os.path.join('out', build_type)
|
| + build_dir = os.path.join('build', build_type)
|
| + logging.info('Removing build files in "%s" and "%s".',
|
| + os.path.abspath(out_dir), os.path.abspath(build_dir))
|
| + try:
|
| + RemakeDirectoryTree(out_dir)
|
| + RemakeDirectoryTree(build_dir)
|
| + except Exception as e:
|
| + raise RuntimeError('Got error in RemoveBuildFiles: %s' % e)
|
| +
|
| +
|
| def RemakeDirectoryTree(path_to_dir):
|
| """Removes a directory tree and replaces it with an empty one.
|
|
|
| Returns True if successful, False otherwise.
|
| """
|
| - if not RemoveDirectoryTree(path_to_dir):
|
| - return False
|
| - return MaybeMakeDirectory(path_to_dir)
|
| + RemoveDirectoryTree(path_to_dir)
|
| + MaybeMakeDirectory(path_to_dir)
|
|
|
|
|
| def RemoveDirectoryTree(path_to_dir):
|
| @@ -2440,15 +2442,18 @@ def RemoveDirectoryTree(path_to_dir):
|
| shutil.rmtree(path_to_dir)
|
| except OSError, e:
|
| if e.errno != errno.ENOENT:
|
| - return False
|
| - return True
|
| + raise
|
|
|
|
|
| -def RemoveBuildFiles(build_type):
|
| - """Removes build files from previous runs."""
|
| - out_dir = os.path.join('out', build_type)
|
| - build_dir = os.path.join('build', build_type)
|
| - return RemakeDirectoryTree(out_dir) and RemakeDirectoryTree(build_dir)
|
| +# This is copied from build/scripts/common/chromium_utils.py.
|
| +def MaybeMakeDirectory(*path):
|
| + """Creates an entire path, if it doesn't already exist."""
|
| + file_path = os.path.join(*path)
|
| + try:
|
| + os.makedirs(file_path)
|
| + except OSError as e:
|
| + if e.errno != errno.EEXIST:
|
| + raise
|
|
|
|
|
| class BisectOptions(object):
|
| @@ -2542,12 +2547,12 @@ class BisectOptions(object):
|
| 'working_directory and that will be used to perform the '
|
| 'bisection. This parameter is optional, if it is not '
|
| 'supplied, the script will work from the current depot.')
|
| - group.add_argument('--build_preference', type='choice',
|
| + group.add_argument('--build_preference', type=str,
|
| choices=['msvs', 'ninja', 'make'],
|
| help='The preferred build system to use. On linux/mac '
|
| 'the options are make/ninja. On Windows, the '
|
| 'options are msvs/ninja.')
|
| - group.add_argument('--target_platform', type='choice', default='chromium',
|
| + group.add_argument('--target_platform', type=str, default='chromium',
|
| choices=['chromium', 'android', 'android-chrome'],
|
| help='The target platform. Choices are "chromium" '
|
| '(current platform), or "android". If you specify '
|
| @@ -2572,18 +2577,18 @@ class BisectOptions(object):
|
| group.add_argument('--gs_bucket', default='', dest='gs_bucket',
|
| help='Name of Google Storage bucket to upload or '
|
| 'download build. e.g., chrome-perf')
|
| - group.add_argument('--target_arch', type='choice', default='ia32',
|
| + group.add_argument('--target_arch', type=str, default='ia32',
|
| dest='target_arch', choices=['ia32', 'x64', 'arm'],
|
| help='The target build architecture. Choices are "ia32" '
|
| '(default), "x64" or "arm".')
|
| - group.add_argument('--target_build_type', type='choice', default='Release',
|
| + group.add_argument('--target_build_type', type=str, default='Release',
|
| choices=['Release', 'Debug'],
|
| help='The target build type. Choices are "Release" '
|
| '(default), or "Debug".')
|
| group.add_argument('--builder_host', dest='builder_host',
|
| help='Host address of server to produce build by '
|
| 'posting try job request.')
|
| - group.add_argument('--builder_port', dest='builder_port', type='int',
|
| + group.add_argument('--builder_port', dest='builder_port', type=int,
|
| help='HTTP port of the server to produce build by '
|
| 'posting try job request.')
|
|
|
| @@ -2600,7 +2605,7 @@ class BisectOptions(object):
|
| action='store_true',
|
| help='DEBUG: Don\'t score the confidence of the initial '
|
| 'good and bad revisions\' test results.')
|
| - group.add_argument('--debug_fake_first_test_mean', type='int', default='0',
|
| + group.add_argument('--debug_fake_first_test_mean', type=int, default='0',
|
| help='DEBUG: When faking performance tests, return this '
|
| 'value as the mean of the first performance test, '
|
| 'and return a mean of 0.0 for further tests.')
|
| @@ -2626,7 +2631,7 @@ class BisectOptions(object):
|
| def ParseCommandLine(self):
|
| """Parses the command line for bisect options."""
|
| parser = self._CreateCommandLineParser()
|
| - opts, _ = parser.parse_args()
|
| + opts = parser.parse_args()
|
|
|
| try:
|
| if (not opts.metric and
|
| @@ -2720,9 +2725,7 @@ def main():
|
| bisect_utils.CreateBisectDirectoryAndSetupDepot(opts, custom_deps)
|
|
|
| os.chdir(os.path.join(os.getcwd(), 'src'))
|
| -
|
| - if not RemoveBuildFiles(opts.target_build_type):
|
| - raise RuntimeError('Something went wrong removing the build files.')
|
| + RemoveBuildFiles(opts.target_build_type)
|
|
|
| if not _IsPlatformSupported():
|
| raise RuntimeError('Sorry, this platform isn\'t supported yet.')
|
| @@ -2746,13 +2749,12 @@ def main():
|
| return 0
|
| finally:
|
| bisect_test.PerformCleanup()
|
| - except RuntimeError, e:
|
| + except RuntimeError as e:
|
| if opts.output_buildbot_annotations:
|
| # The perf dashboard scrapes the "results" step in order to comment on
|
| # bugs. If you change this, please update the perf dashboard as well.
|
| bisect_utils.OutputAnnotationStepStart('Results')
|
| - print 'Error: ', e.message
|
| - logging.warn('A RuntimeError was caught: %s', e.message)
|
| + print 'Runtime Error: %s' % e
|
| if opts.output_buildbot_annotations:
|
| bisect_utils.OutputAnnotationStepClosed()
|
| return 1
|
|
|