Store images as canvas for more efficient reuse #14444
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.
Fixes #14436.
Probably also fixes #13362.
This pull request changes the Image wrapper so it can store the loaded image in the canvas of a provided context. This speeds up
renderFrame()
on maps with many image layers on large screens, because the image does not have to be decoded over and over duringdrawImage()
to the target canvas.To avoid storing the image twice (once as image, once as canvas), the Image wrapper will replace the
image_
with the provided context's canvas on the firstgetImage()
call. To avoid creating a new context whenever the extent changes, which is problematic on iOS due to the limited canvas memory, the sources that use the Image wrapper get a newcontext_
member, so only a single context is created.