-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Improve rendering performance when pxPerSec is high (#909)
* Adds an optional 'partialRender' parameter to enable * Calculates and renders peaks only for current visible waveform * Keeps track of currently calculated/rendered peaks to avoid duplicate calculation and only incremental scroll changes are rendered Tested all combinations of Canvas/MultiCanvas and Wave/Bars rendering at various zoom levels.
- Loading branch information
1 parent
f9426cb
commit 3d908c5
Showing
10 changed files
with
311 additions
and
48 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
describe('peakcache', function() { | ||
var peakcache; | ||
var test_length = 200; | ||
var test_length2 = 300; | ||
var test_start = 50; | ||
var test_end = 100; | ||
var test_start2 = 100; | ||
var test_end2 = 120; | ||
var test_start3 = 120; | ||
var test_end3 = 150; | ||
|
||
var window_size = 20; | ||
|
||
function __createPeakCache() { | ||
peakcache = Object.create(WaveSurfer.PeakCache); | ||
peakcache.init(); | ||
} | ||
|
||
beforeEach(function (done) { | ||
__createPeakCache(); | ||
done(); | ||
}); | ||
|
||
it('empty cache returns full range', function() { | ||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start, test_end); | ||
expect(newranges.length).toEqual(1); | ||
expect(newranges[0][0]).toEqual(test_start); | ||
expect(newranges[0][1]).toEqual(test_end); | ||
}); | ||
|
||
it('different length clears cache', function() { | ||
peakcache.addRangeToPeakCache(test_length, test_start, test_end); | ||
var newranges = peakcache.addRangeToPeakCache(test_length2, test_start, test_end); | ||
expect(newranges.length).toEqual(1); | ||
expect(newranges[0][0]).toEqual(test_start); | ||
expect(newranges[0][1]).toEqual(test_end); | ||
}); | ||
|
||
it('consecutive calls return no ranges', function() { | ||
peakcache.addRangeToPeakCache(test_length, test_start, test_end); | ||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start, test_end); | ||
expect(newranges.length).toEqual(0); | ||
}); | ||
|
||
it('sliding window returns window sized range', function() { | ||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start, test_end); | ||
expect(newranges.length).toEqual(1); | ||
expect(newranges[0][0]).toEqual(test_start); | ||
expect(newranges[0][1]).toEqual(test_end); | ||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start + window_size, test_end + window_size); | ||
expect(newranges.length).toEqual(1); | ||
expect(newranges[0][0]).toEqual(test_end); | ||
expect(newranges[0][1]).toEqual(test_end + window_size); | ||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start + window_size * 2, test_end + window_size * 2); | ||
expect(newranges.length).toEqual(1); | ||
expect(newranges[0][0]).toEqual(test_end + window_size); | ||
expect(newranges[0][1]).toEqual(test_end + window_size * 2); | ||
}); | ||
|
||
it('disjoint set creates two ranges', function() { | ||
peakcache.addRangeToPeakCache(test_length, test_start, test_end); | ||
peakcache.addRangeToPeakCache(test_length, test_start3, test_end3); | ||
var ranges = peakcache.getCacheRanges(); | ||
expect(ranges.length).toEqual(2); | ||
expect(ranges[0][0]).toEqual(test_start); | ||
expect(ranges[0][1]).toEqual(test_end); | ||
expect(ranges[1][0]).toEqual(test_start3); | ||
expect(ranges[1][1]).toEqual(test_end3); | ||
}); | ||
|
||
it('filling in disjoint sets coalesces', function() { | ||
peakcache.addRangeToPeakCache(test_length, test_start, test_end); | ||
peakcache.addRangeToPeakCache(test_length, test_start3, test_end3); | ||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start, test_end3); | ||
expect(newranges.length).toEqual(1); | ||
expect(newranges[0][0]).toEqual(test_end); | ||
expect(newranges[0][1]).toEqual(test_start3); | ||
var ranges = peakcache.getCacheRanges(); | ||
expect(ranges.length).toEqual(1); | ||
expect(ranges[0][0]).toEqual(test_start); | ||
expect(ranges[0][1]).toEqual(test_end3); | ||
}); | ||
|
||
it('filling in disjoint sets coalesces / edge cases', function() { | ||
peakcache.addRangeToPeakCache(test_length, test_start, test_end); | ||
peakcache.addRangeToPeakCache(test_length, test_start3, test_end3); | ||
var newranges = peakcache.addRangeToPeakCache(test_length, test_start2, test_end2); | ||
expect(newranges.length).toEqual(1); | ||
expect(newranges[0][0]).toEqual(test_end); | ||
expect(newranges[0][1]).toEqual(test_start3); | ||
var ranges = peakcache.getCacheRanges(); | ||
expect(ranges.length).toEqual(1); | ||
expect(ranges[0][0]).toEqual(test_start); | ||
expect(ranges[0][1]).toEqual(test_end3); | ||
}); | ||
|
||
}); |
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Oops, something went wrong.