Skip to content

Commit 08a3457

Browse files
bonzinieli-schwartz
authored andcommitted
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>
1 parent f070670 commit 08a3457

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

mesonbuild/compilers/compilers.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,15 @@ def is_header(fname: 'mesonlib.FileOrString') -> bool:
133133
def is_source_suffix(suffix: str) -> bool:
134134
return suffix in source_suffixes
135135

136+
@lru_cache(maxsize=None)
137+
def cached_is_source_by_name(fname: str) -> bool:
138+
suffix = fname.split('.')[-1].lower()
139+
return is_source_suffix(suffix)
140+
136141
def is_source(fname: 'mesonlib.FileOrString') -> bool:
137142
if isinstance(fname, mesonlib.File):
138143
fname = fname.fname
139-
suffix = fname.split('.')[-1].lower()
140-
return is_source_suffix(suffix)
144+
return cached_is_source_by_name(fname)
141145

142146
def is_assembly(fname: 'mesonlib.FileOrString') -> bool:
143147
if isinstance(fname, mesonlib.File):
@@ -152,14 +156,14 @@ def is_llvm_ir(fname: 'mesonlib.FileOrString') -> bool:
152156
return suffix in llvm_ir_suffixes
153157

154158
@lru_cache(maxsize=None)
155-
def cached_by_name(fname: 'mesonlib.FileOrString') -> bool:
159+
def cached_is_object_by_name(fname: str) -> bool:
156160
suffix = fname.split('.')[-1]
157161
return suffix in obj_suffixes
158162

159163
def is_object(fname: 'mesonlib.FileOrString') -> bool:
160164
if isinstance(fname, mesonlib.File):
161165
fname = fname.fname
162-
return cached_by_name(fname)
166+
return cached_is_object_by_name(fname)
163167

164168
def is_library(fname: 'mesonlib.FileOrString') -> bool:
165169
if isinstance(fname, mesonlib.File):

0 commit comments

Comments
 (0)