Skip filter evaluation for projects without resource filters - #2884
Open
vogella wants to merge 1 commit into
Open
Skip filter evaluation for projects without resource filters#2884vogella wants to merge 1 commit into
vogella wants to merge 1 commit into
Conversation
Resource.filterChildren runs for every directory scanned by a refresh or an isSynchronized walk. Even for a project without any resource filter it allocated two lists and walked the project-relative path up to the root, allocating an IPath and taking a synchronized getFilter call per segment. Return early when the project description holds no filters, which cuts this garbage from the auto-refresh polling path.
Contributor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Resource.filterChildrenruns for every directory scanned by a refresh or anisSynchronizedwalk. Even for a project with no resource filters at all, it allocated two lists and walked the project-relative path to the project root, allocating anIPathand taking a synchronizedgetFiltercall per segment, only to discard everything.This returns early when the project description holds no filters.
ProjectDescription.getFilters()is null exactly in that case, so the check is precise rather than a heuristic, andisFilteredWithExceptionalready guards the same way. The gain shows up in the auto-refresh polling path, which walks whole projects continuously on Linux.FilteredResourceTestpasses unchanged.