Mercurial > hg > piper-vamp-js
comparison perf-test.js @ 105:4845fbb1a516
Instead of using separate values and b64values entries in JSON serialisations, allow numeric arrays to be replaced by b64 variants wherever they appear (discriminating by type). Also rename values to featureValues in feature throughout, as values turns out to be a hazardous name in a JS context. Finally use Array instead of Text for array encoding (seems clearer).
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Tue, 27 Sep 2016 15:04:59 +0100 |
parents | 2b20e610c4c2 |
children | a734a7e976fa |
comparison
equal
deleted
inserted
replaced
104:2b20e610c4c2 | 105:4845fbb1a516 |
---|---|
35 } | 35 } |
36 | 36 |
37 function processRaw(request) { | 37 function processRaw(request) { |
38 | 38 |
39 const nChannels = request.processInput.inputBuffers.length; | 39 const nChannels = request.processInput.inputBuffers.length; |
40 const nFrames = request.processInput.inputBuffers[0].values.length; | 40 const nFrames = request.processInput.inputBuffers[0].length; |
41 | 41 |
42 const buffersPtr = exampleModule._malloc(nChannels * 4); | 42 const buffersPtr = exampleModule._malloc(nChannels * 4); |
43 const buffers = new Uint32Array( | 43 const buffers = new Uint32Array( |
44 exampleModule.HEAPU8.buffer, buffersPtr, nChannels); | 44 exampleModule.HEAPU8.buffer, buffersPtr, nChannels); |
45 | 45 |
46 for (let i = 0; i < nChannels; ++i) { | 46 for (let i = 0; i < nChannels; ++i) { |
47 const framesPtr = exampleModule._malloc(nFrames * 4); | 47 const framesPtr = exampleModule._malloc(nFrames * 4); |
48 const frames = new Float32Array( | 48 const frames = new Float32Array( |
49 exampleModule.HEAPU8.buffer, framesPtr, nFrames); | 49 exampleModule.HEAPU8.buffer, framesPtr, nFrames); |
50 frames.set(request.processInput.inputBuffers[i].values); | 50 frames.set(request.processInput.inputBuffers[i]); |
51 buffers[i] = framesPtr; | 51 buffers[i] = framesPtr; |
52 } | 52 } |
53 | 53 |
54 const responseJson = vampipeProcessRaw( | 54 const responseJson = vampipeProcessRaw( |
55 request.pluginHandle, | 55 request.pluginHandle, |
60 for (let i = 0; i < nChannels; ++i) { | 60 for (let i = 0; i < nChannels; ++i) { |
61 exampleModule._free(buffers[i]); | 61 exampleModule._free(buffers[i]); |
62 } | 62 } |
63 exampleModule._free(buffersPtr); | 63 exampleModule._free(buffersPtr); |
64 | 64 |
65 const response = JSON.parse( | 65 const responseJstr = exampleModule.Pointer_stringify(responseJson); |
66 exampleModule.Pointer_stringify(responseJson)); | 66 const response = JSON.parse(responseJstr); |
67 | 67 |
68 vampipeFreeJson(responseJson); | 68 vampipeFreeJson(responseJson); |
69 | 69 |
70 return response; | 70 return response; |
71 } | 71 } |
117 out.duration = wfeature.duration; | 117 out.duration = wfeature.duration; |
118 } | 118 } |
119 if (wfeature.label != null) { | 119 if (wfeature.label != null) { |
120 out.label = wfeature.label; | 120 out.label = wfeature.label; |
121 } | 121 } |
122 if (wfeature.b64values != null && wfeature.b64values !== "") { | 122 const vv = wfeature.featureValues; |
123 out.values = myFromBase64(wfeature.b64values); | 123 if (vv != null) { |
124 } else if (wfeature.values != null) { | 124 if (typeof vv === "string") { |
125 out.values = new Float32Array(wfeature.values); | 125 out.featureValues = myFromBase64(vv); |
126 } else { | |
127 out.featureValues = new Float32Array(vv); | |
128 } | |
126 } | 129 } |
127 return out; | 130 return out; |
128 } | 131 } |
129 | 132 |
130 function convertWireFeatureList(wfeatures) { | 133 function convertWireFeatureList(wfeatures) { |
156 | 159 |
157 const makeBlock = (n => { | 160 const makeBlock = (n => { |
158 return { | 161 return { |
159 timestamp : frame2timestamp(n * blockSize, rate), | 162 timestamp : frame2timestamp(n * blockSize, rate), |
160 inputBuffers : [ | 163 inputBuffers : [ |
161 { values : new Float32Array( | 164 new Float32Array(Array.from(Array(blockSize).keys(), |
162 Array.from(Array(blockSize).keys(), | 165 n => n / blockSize)) |
163 n => n / blockSize)) } | |
164 ], | 166 ], |
165 } | 167 } |
166 }); | 168 }); |
167 | 169 |
168 const blocks = Array.from(Array(nblocks).keys(), makeBlock); | 170 const blocks = Array.from(Array(nblocks).keys(), makeBlock); |
178 result = processRaw({ | 180 result = processRaw({ |
179 "pluginHandle": 1, | 181 "pluginHandle": 1, |
180 "processInput": blocks[i] | 182 "processInput": blocks[i] |
181 }); | 183 }); |
182 let features = responseToFeatureSet(result); | 184 let features = responseToFeatureSet(result); |
183 let count = features.get("counts")[0].values[0]; | 185 let count = features.get("counts")[0].featureValues[0]; |
184 total += count; | 186 total += count; |
185 } | 187 } |
186 | 188 |
187 let finish = (new Date()).getTime(); | 189 let finish = (new Date()).getTime(); |
188 comment("Finish at " + finish + " for a time of " + (finish - start) + " ms"); | 190 comment("Finish at " + finish + " for a time of " + (finish - start) + " ms"); |
200 result = processRaw({ | 202 result = processRaw({ |
201 "pluginHandle": 1, | 203 "pluginHandle": 1, |
202 "processInput": blocks[i] | 204 "processInput": blocks[i] |
203 }); | 205 }); |
204 let features = responseToFeatureSet(result); | 206 let features = responseToFeatureSet(result); |
205 let count = features.get("counts")[0].values[0]; | 207 let count = features.get("counts")[0].featureValues[0]; |
206 total += count; | 208 total += count; |
207 } | 209 } |
208 | 210 |
209 finish = (new Date()).getTime(); | 211 finish = (new Date()).getTime(); |
210 comment("Finish at " + finish + " for a time of " + (finish - start) + " ms"); | 212 comment("Finish at " + finish + " for a time of " + (finish - start) + " ms"); |