Fix performance issue when placing many symbols on terrain #11466
+21
−16
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.
Exploring profiling results with @stepankuzmin, we found that an abnormal amount of CPU time was spent fetching terrain elevation values when placing symbols on terrain, and there was a lot of GC related to it as well. This PR attempts to fix the issue by avoiding creating a typed array view within
DemData
get
, a method on a very hot path.This also required some minor refactoring so that the class with the corresponding changes can be properly transferred from the worker to the main thread (now we hold on to a
Uint8Array
view rather thanUint32Array
, because we can't transfer with both references).Launch Checklist
mapbox-gl-js
changelog: (in title)