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");