HdMergingSceneIndex: improve performance of _RebuildInputsPathTable() #3757
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.
Description of Change(s)
This became an n^2 loop when there were many inputs with non-overlapping scene roots (e.g. native instancing with a large number of prototypes) and the size of
_inputsPathTableapproached the number of inputs.In this scenario the majority of the scene roots are of the form:
/UsdNiPropagatedPrototypes/__hash_1__/__Prototype_1/UsdNiInstancer/UsdNiPropagatedPrototypes/__hash_N__/__Prototype_1/UsdNiInstancerWe can instead use
FindSubtreeRange(sceneRoot)to find which table entries each input should be added to, eliminating theHasPrefix()check against every entry.Attached is an example scene with 10k prototypes (usdskel_instanced.zip) along before & after stats of time spent in
_RebuildInputsPathTable()Before:
After:
Link to proposal (if applicable)
Fixes Issue(s)
N/A
Checklist
I have created this PR based on the dev branch
I have followed the coding conventions
I have added unit tests that exercise this functionality (Reference:
testing guidelines)
I have verified that all unit tests pass with the proposed changes
I have submitted a signed Contributor License Agreement (Reference:
Contributor License Agreement instructions)