Minimize sample waveform rendering time #7210
Closed
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've been noticing that LMMS was lagging under a big project with long samples. Zooming in and out causes notable frame rate drop.
This pull request makes the following changes to
SampleWaveform::visualize
(in order of performance improvement):Change
maxFramesPerPixel
from 512 to 24. Often, processing this many frames are redundant and can cause lag when working on a sample heavy project.Remove 3 vector allocation by nesting the loops. The
min
,max
andsquared
values are computed on the spot for each newpixelIndex
, which means they no longer need to be stored in vectors.Calculate
halfHeight
,parameters.amplification
andframe.size()
outside of the loops intoscalingFactor
.The refactoring tries to minimize the performance cost while retaining the look of the waveform. Compared to the original code, when zoomed all the way out, some sample tracks may appear to be quieter. However they look almost identical when zoomed in.
comparison:
Master branch:
lmms-sample-original-code.mp4
Pull request:
lmms-sample-new-code.mp4