mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-29 08:56:15 +01:00
cb98e37357
Closures use a 16-bit atomic reference count, which is really slow on certain ARM64 CPUs such as the Cortex-A57 (glib#1316). This is non-trivial to solve, since the public struct field cannot be enlarged to 32-bit while preserving ABI, and 16-bit atomic operations would be new (and rather niche) API. Until this can be solved properly (hopefully in GLib 2.59.x), cut down the number of signal emission cycles and bump up the timeout in the Meson build system, so that builds won't time out. We can't just take another zero off the number of signal emission cycles, as was done in the original version of this patch in Debian, because if we do that it can result in test failures when the main thread starves the other threads. ARM64 CPUs are backwards-compatible with 32-bit ARM, and the same slowdown can be seen when building and testing 32-bit code on these CPUs, so check for both 32- and 64-bit ARM. Bug-Debian: https://bugs.debian.org/880883 Co-authored-by: Iain Lane <laney@debian.org> Signed-off-by: Simon McVittie <smcv@debian.org>
67 lines
2.0 KiB
Meson
67 lines
2.0 KiB
Meson
refcount_tests = {
|
|
'closures' : {'suite' : ['slow']},
|
|
'objects' : {},
|
|
'objects2' : {'suite' : ['slow']},
|
|
'properties' : {},
|
|
'properties2' : {'suite' : ['slow']},
|
|
'properties3' : {'suite' : ['slow']},
|
|
'properties4' : {},
|
|
'signal1' : {
|
|
'source' : 'signals.c',
|
|
'c_args' : ['-DTESTNUM=1'],
|
|
},
|
|
'signal2' : {
|
|
'source' : 'signals.c',
|
|
'c_args' : ['-DTESTNUM=2'],
|
|
},
|
|
'signal3' : {
|
|
'source' : 'signals.c',
|
|
'c_args' : ['-DTESTNUM=3'],
|
|
},
|
|
'signal4' : {
|
|
'source' : 'signals.c',
|
|
'c_args' : ['-DTESTNUM=4'],
|
|
},
|
|
}
|
|
|
|
common_c_args = test_cargs + ['-DGLIB_DISABLE_DEPRECATION_WARNINGS']
|
|
common_deps = [libm, thread_dep, libglib_dep, libgobject_dep]
|
|
|
|
foreach test_name, extra_args : refcount_tests
|
|
source = extra_args.get('source', test_name + '.c')
|
|
extra_sources = extra_args.get('extra_sources', [])
|
|
install = installed_tests_enabled and extra_args.get('install', true)
|
|
|
|
if install
|
|
test_conf = configuration_data()
|
|
test_conf.set('installed_tests_dir', installed_tests_execdir)
|
|
test_conf.set('program', test_name)
|
|
configure_file(
|
|
input: installed_tests_template,
|
|
output: test_name + '.test',
|
|
install_dir: installed_tests_metadir,
|
|
configuration: test_conf
|
|
)
|
|
endif
|
|
|
|
# FIXME? $(GLIB_DEBUG_FLAGS)
|
|
exe = executable(test_name, [source, extra_sources],
|
|
c_args : common_c_args + extra_args.get('c_args', []),
|
|
dependencies : common_deps + extra_args.get('dependencies', []),
|
|
install_dir: installed_tests_execdir,
|
|
install: install,
|
|
)
|
|
|
|
suite = ['refcount'] + extra_args.get('suite', [])
|
|
timeout = suite.contains('slow') ? test_timeout_slow : test_timeout
|
|
|
|
# https://gitlab.gnome.org/GNOME/glib/issues/1316
|
|
# aka https://bugs.debian.org/880883
|
|
if test_name == 'closures' and ['arm', 'aarch64'].contains(host_cpu_family)
|
|
timeout = timeout * 10
|
|
endif
|
|
|
|
# FIXME? TESTS_ENVIRONMENT = LIBCHARSET_ALIAS_DIR=$(top_builddir)/glib/libcharset
|
|
test(test_name, exe, env : test_env, timeout : timeout, suite : suite)
|
|
endforeach
|