This is an automated email from the ASF dual-hosted git repository. tvb pushed a commit to branch bschubert/optimize-element-init in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit e4c86c563aeab2f2a0a8cb8d29d1a4645c045254 Author: Benjamin Schubert <[email protected]> AuthorDate: Thu Oct 10 16:05:23 2019 +0100 _platform/platform.py: Cache result from 'get_host_arch' 'get_host_arch' is an expensive method and is called twice per element. Caching gives us some performance benefits. --- src/buildstream/_platform/platform.py | 16 +++++++++++----- tests/format/optionarch.py | 8 ++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/buildstream/_platform/platform.py b/src/buildstream/_platform/platform.py index 11c9217..ca5fb75 100644 --- a/src/buildstream/_platform/platform.py +++ b/src/buildstream/_platform/platform.py @@ -30,6 +30,9 @@ from .. import utils class Platform(): + + _host_arch = None # cache to not recompute the host arch every time + # Platform() # # A class to manage platform-specific details. Currently holds the @@ -167,11 +170,14 @@ class Platform(): # # Returns: # (string): String representing the architecture - @staticmethod - def get_host_arch(): - # get the hardware identifier from uname - uname_machine = platform.uname().machine - return Platform.canonicalize_arch(uname_machine) + @classmethod + def get_host_arch(cls): + if cls._host_arch is None: + # get the hardware identifier from uname + uname_machine = platform.uname().machine + cls._host_arch = Platform.canonicalize_arch(uname_machine) + + return cls._host_arch # does_multiprocessing_start_require_pickling(): # diff --git a/tests/format/optionarch.py b/tests/format/optionarch.py index f347e27..4451a22 100644 --- a/tests/format/optionarch.py +++ b/tests/format/optionarch.py @@ -7,6 +7,7 @@ import pytest from buildstream import _yaml from buildstream._exceptions import ErrorDomain, LoadErrorReason +from buildstream._platform import Platform from buildstream.testing.runcli import cli # pylint: disable=unused-import from tests.testutils import override_platform_uname @@ -15,6 +16,13 @@ from tests.testutils import override_platform_uname DATA_DIR = os.path.dirname(os.path.realpath(__file__)) [email protected](autouse=True) +def reset_arch(): + # The platform currently caches the host arch. We need to clean that up here. + Platform._host_arch = None + yield + Platform._host_arch = None + @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("machine,value,expected", [ # Test explicitly provided arches
