optimize repeated container creation in tests #2860
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I looked into the performance of creating containers in tests and I found out that creating SourceLocators in
ComposerJsonAndInstalledJsonSourceLocatorMaker
is by far the most expensive part (on my machine about 1.1s out of 1.4s for the whole uncachedgetContainer
). So here I try to cache it statically for the tests. As far as I can tell, it only depends on a few parameters (at least for now), which seem likely to be the same for most of the tests.Quick benchmark with
rm -rf /tmp/phpstan-tests/; time make tests
gives me about 1m 22s with this change vs about 1m 46s without it.Motivation: This is a preliminary step before I attempt to make it possible for individual test methods to use their own config for the container, instead of just relying on
getAdditionalConfigFiles
which is static. That would be useful for #2809 and possibly other things as well.