diff options
Diffstat (limited to 'crosperf/label.py')
-rw-r--r-- | crosperf/label.py | 357 |
1 files changed, 186 insertions, 171 deletions
diff --git a/crosperf/label.py b/crosperf/label.py index 30bf5f8c..9aeff562 100644 --- a/crosperf/label.py +++ b/crosperf/label.py @@ -1,188 +1,203 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. +# Copyright 2013 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """The label of benchamrks.""" -from __future__ import print_function import hashlib import os -from image_checksummer import ImageChecksummer -from cros_utils.file_utils import FileUtils from cros_utils import misc +from cros_utils.file_utils import FileUtils +from image_checksummer import ImageChecksummer class Label(object): - """The label class.""" - - def __init__(self, - name, - build, - chromeos_image, - autotest_path, - debug_path, - chromeos_root, - board, - remote, - image_args, - cache_dir, - cache_only, - log_level, - compiler, - crosfleet=False, - chrome_src=None): - - self.image_type = self._GetImageType(chromeos_image) - - # Expand ~ - chromeos_root = os.path.expanduser(chromeos_root) - if self.image_type == 'local': - chromeos_image = os.path.expanduser(chromeos_image) - - self.name = name - self.build = build - self.chromeos_image = chromeos_image - self.autotest_path = autotest_path - self.debug_path = debug_path - self.board = board - self.remote = remote - self.image_args = image_args - self.cache_dir = cache_dir - self.cache_only = cache_only - self.log_level = log_level - self.chrome_version = '' - self.compiler = compiler - self.crosfleet = crosfleet - - if not chromeos_root: - if self.image_type == 'local': - chromeos_root = FileUtils().ChromeOSRootFromImage(chromeos_image) - if not chromeos_root: - raise RuntimeError("No ChromeOS root given for label '%s' and could " - "not determine one from image path: '%s'." % - (name, chromeos_image)) - else: - chromeos_root = FileUtils().CanonicalizeChromeOSRoot(chromeos_root) - if not chromeos_root: - raise RuntimeError("Invalid ChromeOS root given for label '%s': '%s'." % - (name, chromeos_root)) - - self.chromeos_root = chromeos_root - if not chrome_src: - # Old and new chroots may have different chrome src locations. - # The path also depends on the chrome build flags. - # Give priority to chrome-src-internal. - chrome_src_rel_paths = [ - '.cache/distfiles/target/chrome-src-internal', - '.cache/distfiles/chrome-src-internal', - '.cache/distfiles/target/chrome-src', - '.cache/distfiles/chrome-src', - ] - for chrome_src_rel_path in chrome_src_rel_paths: - chrome_src_abs_path = os.path.join(self.chromeos_root, - chrome_src_rel_path) - if os.path.exists(chrome_src_abs_path): - chrome_src = chrome_src_abs_path - break - if not chrome_src: - raise RuntimeError('Can not find location of Chrome sources.\n' - f'Checked paths: {chrome_src_rel_paths}') - else: - chrome_src = misc.CanonicalizePath(chrome_src) - # Make sure the path exists. - if not os.path.exists(chrome_src): - raise RuntimeError("Invalid Chrome src given for label '%s': '%s'." % - (name, chrome_src)) - self.chrome_src = chrome_src - - self._SetupChecksum() - - def _SetupChecksum(self): - """Compute label checksum only once.""" - - self.checksum = None - if self.image_type == 'local': - self.checksum = ImageChecksummer().Checksum(self, self.log_level) - elif self.image_type == 'trybot': - self.checksum = hashlib.md5( - self.chromeos_image.encode('utf-8')).hexdigest() - - def _GetImageType(self, chromeos_image): - image_type = None - if chromeos_image.find('xbuddy://') < 0: - image_type = 'local' - elif chromeos_image.find('trybot') >= 0: - image_type = 'trybot' - else: - image_type = 'official' - return image_type - - def __hash__(self): - """Label objects are used in a map, so provide "hash" and "equal".""" - - return hash(self.name) - - def __eq__(self, other): - """Label objects are used in a map, so provide "hash" and "equal".""" - - return isinstance(other, Label) and other.name == self.name - - def __str__(self): - """For better debugging.""" - - return 'label[name="{}"]'.format(self.name) + """The label class.""" + + def __init__( + self, + name, + build, + chromeos_image, + autotest_path, + debug_path, + chromeos_root, + board, + remote, + image_args, + cache_dir, + cache_only, + log_level, + compiler, + crosfleet=False, + chrome_src=None, + ): + + self.image_type = self._GetImageType(chromeos_image) + + # Expand ~ + chromeos_root = os.path.expanduser(chromeos_root) + if self.image_type == "local": + chromeos_image = os.path.expanduser(chromeos_image) + + self.name = name + self.build = build + self.chromeos_image = chromeos_image + self.autotest_path = autotest_path + self.debug_path = debug_path + self.board = board + self.remote = remote + self.image_args = image_args + self.cache_dir = cache_dir + self.cache_only = cache_only + self.log_level = log_level + self.chrome_version = "" + self.compiler = compiler + self.crosfleet = crosfleet + + if not chromeos_root: + if self.image_type == "local": + chromeos_root = FileUtils().ChromeOSRootFromImage( + chromeos_image + ) + if not chromeos_root: + raise RuntimeError( + "No ChromeOS root given for label '%s' and could " + "not determine one from image path: '%s'." + % (name, chromeos_image) + ) + else: + chromeos_root = FileUtils().CanonicalizeChromeOSRoot(chromeos_root) + if not chromeos_root: + raise RuntimeError( + "Invalid ChromeOS root given for label '%s': '%s'." + % (name, chromeos_root) + ) + + self.chromeos_root = chromeos_root + if not chrome_src: + # Old and new chroots may have different chrome src locations. + # The path also depends on the chrome build flags. + # Give priority to chrome-src-internal. + chrome_src_rel_paths = [ + ".cache/distfiles/target/chrome-src-internal", + ".cache/distfiles/chrome-src-internal", + ".cache/distfiles/target/chrome-src", + ".cache/distfiles/chrome-src", + ] + for chrome_src_rel_path in chrome_src_rel_paths: + chrome_src_abs_path = os.path.join( + self.chromeos_root, chrome_src_rel_path + ) + if os.path.exists(chrome_src_abs_path): + chrome_src = chrome_src_abs_path + break + if not chrome_src: + raise RuntimeError( + "Can not find location of Chrome sources.\n" + f"Checked paths: {chrome_src_rel_paths}" + ) + else: + chrome_src = misc.CanonicalizePath(chrome_src) + # Make sure the path exists. + if not os.path.exists(chrome_src): + raise RuntimeError( + "Invalid Chrome src given for label '%s': '%s'." + % (name, chrome_src) + ) + self.chrome_src = chrome_src + + self._SetupChecksum() + + def _SetupChecksum(self): + """Compute label checksum only once.""" + + self.checksum = None + if self.image_type == "local": + self.checksum = ImageChecksummer().Checksum(self, self.log_level) + elif self.image_type == "trybot": + self.checksum = hashlib.md5( + self.chromeos_image.encode("utf-8") + ).hexdigest() + + def _GetImageType(self, chromeos_image): + image_type = None + if chromeos_image.find("xbuddy://") < 0: + image_type = "local" + elif chromeos_image.find("trybot") >= 0: + image_type = "trybot" + else: + image_type = "official" + return image_type + + def __hash__(self): + """Label objects are used in a map, so provide "hash" and "equal".""" + + return hash(self.name) + + def __eq__(self, other): + """Label objects are used in a map, so provide "hash" and "equal".""" + + return isinstance(other, Label) and other.name == self.name + + def __str__(self): + """For better debugging.""" + + return 'label[name="{}"]'.format(self.name) class MockLabel(object): - """The mock label class.""" - - def __init__(self, - name, - build, - chromeos_image, - autotest_path, - debug_path, - chromeos_root, - board, - remote, - image_args, - cache_dir, - cache_only, - log_level, - compiler, - crosfleet=False, - chrome_src=None): - self.name = name - self.build = build - self.chromeos_image = chromeos_image - self.autotest_path = autotest_path - self.debug_path = debug_path - self.board = board - self.remote = remote - self.cache_dir = cache_dir - self.cache_only = cache_only - if not chromeos_root: - self.chromeos_root = '/tmp/chromeos_root' - else: - self.chromeos_root = chromeos_root - self.image_args = image_args - self.chrome_src = chrome_src - self.image_type = self._GetImageType(chromeos_image) - self.checksum = '' - self.log_level = log_level - self.compiler = compiler - self.crosfleet = crosfleet - self.chrome_version = 'Fake Chrome Version 50' - - def _GetImageType(self, chromeos_image): - image_type = None - if chromeos_image.find('xbuddy://') < 0: - image_type = 'local' - elif chromeos_image.find('trybot') >= 0: - image_type = 'trybot' - else: - image_type = 'official' - return image_type + """The mock label class.""" + + def __init__( + self, + name, + build, + chromeos_image, + autotest_path, + debug_path, + chromeos_root, + board, + remote, + image_args, + cache_dir, + cache_only, + log_level, + compiler, + crosfleet=False, + chrome_src=None, + ): + self.name = name + self.build = build + self.chromeos_image = chromeos_image + self.autotest_path = autotest_path + self.debug_path = debug_path + self.board = board + self.remote = remote + self.cache_dir = cache_dir + self.cache_only = cache_only + if not chromeos_root: + self.chromeos_root = "/tmp/chromeos_root" + else: + self.chromeos_root = chromeos_root + self.image_args = image_args + self.chrome_src = chrome_src + self.image_type = self._GetImageType(chromeos_image) + self.checksum = "" + self.log_level = log_level + self.compiler = compiler + self.crosfleet = crosfleet + self.chrome_version = "Fake Chrome Version 50" + + def _GetImageType(self, chromeos_image): + image_type = None + if chromeos_image.find("xbuddy://") < 0: + image_type = "local" + elif chromeos_image.find("trybot") >= 0: + image_type = "trybot" + else: + image_type = "official" + return image_type |