* reimplement threadpool
just a set of threads that get recycled
"ninja test" passes and dzsave seems to work, though pytest fails for
some reason
* clean up threading code a bit
move base stuff into thread.c, so we have a simple
thread -> threadset -> threadpool
layering
* start trying to revert g_threadpool
based on the original commit
* working!
nice low systime again
still need to repply cnages to threadpool.c since 80e0cc3d1
* reapply fixes from master
so threadpool.c is now up to date
* rename VipsThread as VipsWorker
a bit less confusing
* use a semaphore to count workers in a pool
* tidy up
* formatting
* dynamic threadpool sizing
based on counting the number of blocked threads in each pool
it works, but the improvement is not great :(
* add "concurrency" metadata item
so operators can hint threadpool size (dzsave especially)
* don't use thinstrip for small images
* add RGB mode to openslide
since flatten was taking 20% of CPU time for dzsave
* fix up rgb mode
now actually works
* make the tile buffer per thread
in the new openslideload rgb mode
* fix dynamic pool downsize
* mild refactoring
* fix the buffer system
oops, turned it off by mistake
* all done!
* revise changelog
* Update libvips/iofuncs/threadset.c
Co-authored-by: Kleis Auke Wolthuizen <github@kleisauke.nl>
* Update libvips/iofuncs/threadset.c
Co-authored-by: Kleis Auke Wolthuizen <github@kleisauke.nl>
* LSan: add libMagickCore to suppression file
* Revert "Remove mutex lock for VipsThreadStartFn"
This reverts commit 41440491.
* add VIPS_MAX_THREADS
to set a hard limit on the threadset size
* Revert "Revert "Remove mutex lock for VipsThreadStartFn""
This reverts commit 77e8520966ba79194fff3b4e648bbd295cd5c260.
* remove sslock from sink.c
* move fixed threadpool build to init
not first use
* add some doc comments
* revert test suite threshold change
* add a test for MAX_THREADS
and move the test tmp/ area into the builddir
* limit VIPS_MAX_THREADS to sane values
* use tabs rather than spaces
Co-authored-by: Kleis Auke Wolthuizen <github@kleisauke.nl>
* tests: consolidate redundant, duplicated helper code
These functions currently exist in a sourced shell library, but there is
an identical copy of them in a single test file. Get rid of this
duplicate definition.
* tests: mark some tests as skipped if bc is not installed
`exit 77` is the GNU exitcode protocol for tests that cannot be run
because their prerequisites are not available. If `bc` is not installed,
and it often isn't, the test can be short-circuited instead of failing;
meson will report them in "warning yellow".
* tests: mark some tests as skipped if support is not compiled
Not all test cases can be cleanly marked as skipped -- sometimes,
multiple things are checked, and having one be unavailable should not
mean skipping all tests.
But in a couple cases, a test file only tests one thing, and that may be
skipped. In such cases, it can be semantically indicated in the test
harness report collection, that a skip occurred.
* seems to export to cmyk+2 correctly
We'll need something fancier for import.
* more hacking
* Revert "more hacking"
This reverts commit fcdad5b491fc4d5a1750388947e42d1e98b1d9d7.
* generalise to many colour export
Should work up to 12 colour profiles (all that lcms supports).
* support import with N-colour profiles
* CI: upgrade macOS runner to version 12 (Monterey)
* CI: upgrade actions/checkout to v3
* CI: remove retry logic for apt
The Linux runners on GitHub Actions already retries up to 10 times,
see:
6c93c24107/images/linux/scripts/base/apt.sh (L11-L12)
* CI: remove redundant `DEBIAN_FRONTEND=noninteractive` env
The Linux runners on GitHub Actions already sets this env variable,
see:
6c93c24107/images/linux/scripts/installers/dpkg-config.sh (L10)
* CI: remove redundant `HOMEBREW_NO_AUTO_UPDATE=1` env
The macOS runners on GitHub Actions already sets this env variable,
see:
6c93c24107/images/macos/provision/configuration/environment/bashrc (L26)
* CI: prefer shorthand flag of apt-get `--fix-missing`
* CI: install libjxl on macOS runner
* Update test suite's README.md
* spngsave: ensure quantisation occurs last
i.e. after setting the metadata and phyiscal pixel dimensions,
since quantisation will overwrite the image.
* spngsave: avoid over-allocation of temporary buffer
For low-bitdepth write and palette-based output.
* reducev: initialize the sum with the addition
Avoids an Orc opcode.
* convi: initialize the sum with the addition
Avoids an Orc opcode.
* vector: add comments to magic numbers
* Inverted order of TIFF tag writing when saving multi-page subifd pyramids to ensure that subifd pyramid layers are correctly tagged as reduced-image subfile type and not as pages
* Use if-else clause to avoid tag overwriting
We added a check that loader ->header() and ->load() methods set the
same dhint. This commit removes that check -- it's not possible to make
header and load match in all cases since images can take so many routes,
and can change between the two events.
If we see performance issues around inappropriate cache sizing again,
try to fix just those cases.