diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2024-11-06 15:41:40 +0100 |
|---|---|---|
| committer | Eli Schwartz <eschwartz93@gmail.com> | 2024-12-29 23:22:14 -0500 |
| commit | 08a345758a96892f879b487ee12e3b4e66c33439 (patch) | |
| tree | be3f91afc11e3e179f8654f22e8b39bb5d9add5d /mesonbuild/compilers | |
| parent | f070670e77fe36ece1a89ce00c13419de354b9ce (diff) | |
| download | meson-08a345758a96892f879b487ee12e3b4e66c33439.tar.gz | |
compilers: cache the results of is_source()
is_source() is called almost 900000 times in a QEMU setup. Together with
the previously added caching, this basically removes _determine_ext_objs()
from the profile when building QEMU.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Eli Schwartz <eschwartz93@gmail.com>
Diffstat (limited to 'mesonbuild/compilers')
| -rw-r--r-- | mesonbuild/compilers/compilers.py | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index 603a3eb48..8788df0be 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -133,11 +133,15 @@ def is_header(fname: 'mesonlib.FileOrString') -> bool: def is_source_suffix(suffix: str) -> bool: return suffix in source_suffixes +@lru_cache(maxsize=None) +def cached_is_source_by_name(fname: str) -> bool: + suffix = fname.split('.')[-1].lower() + return is_source_suffix(suffix) + def is_source(fname: 'mesonlib.FileOrString') -> bool: if isinstance(fname, mesonlib.File): fname = fname.fname - suffix = fname.split('.')[-1].lower() - return is_source_suffix(suffix) + return cached_is_source_by_name(fname) def is_assembly(fname: 'mesonlib.FileOrString') -> bool: if isinstance(fname, mesonlib.File): @@ -152,14 +156,14 @@ def is_llvm_ir(fname: 'mesonlib.FileOrString') -> bool: return suffix in llvm_ir_suffixes @lru_cache(maxsize=None) -def cached_by_name(fname: 'mesonlib.FileOrString') -> bool: +def cached_is_object_by_name(fname: str) -> bool: suffix = fname.split('.')[-1] return suffix in obj_suffixes def is_object(fname: 'mesonlib.FileOrString') -> bool: if isinstance(fname, mesonlib.File): fname = fname.fname - return cached_by_name(fname) + return cached_is_object_by_name(fname) def is_library(fname: 'mesonlib.FileOrString') -> bool: if isinstance(fname, mesonlib.File): |
