comparison perf-test-node.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
37 } 37 }
38 38
39 function processRaw(request) { 39 function processRaw(request) {
40 40
41 const nChannels = request.processInput.inputBuffers.length; 41 const nChannels = request.processInput.inputBuffers.length;
42 const nFrames = request.processInput.inputBuffers[0].values.length; 42 const nFrames = request.processInput.inputBuffers[0].length;
43 43
44 const buffersPtr = exampleModule._malloc(nChannels * 4); 44 const buffersPtr = exampleModule._malloc(nChannels * 4);
45 const buffers = new Uint32Array( 45 const buffers = new Uint32Array(
46 exampleModule.HEAPU8.buffer, buffersPtr, nChannels); 46 exampleModule.HEAPU8.buffer, buffersPtr, nChannels);
47 47
48 for (let i = 0; i < nChannels; ++i) { 48 for (let i = 0; i < nChannels; ++i) {
49 const framesPtr = exampleModule._malloc(nFrames * 4); 49 const framesPtr = exampleModule._malloc(nFrames * 4);
50 const frames = new Float32Array( 50 const frames = new Float32Array(
51 exampleModule.HEAPU8.buffer, framesPtr, nFrames); 51 exampleModule.HEAPU8.buffer, framesPtr, nFrames);
52 frames.set(request.processInput.inputBuffers[i].values); 52 frames.set(request.processInput.inputBuffers[i]);
53 buffers[i] = framesPtr; 53 buffers[i] = framesPtr;
54 } 54 }
55 55
56 const responseJson = vampipeProcessRaw( 56 const responseJson = vampipeProcessRaw(
57 request.pluginHandle, 57 request.pluginHandle,
62 for (let i = 0; i < nChannels; ++i) { 62 for (let i = 0; i < nChannels; ++i) {
63 exampleModule._free(buffers[i]); 63 exampleModule._free(buffers[i]);
64 } 64 }
65 exampleModule._free(buffersPtr); 65 exampleModule._free(buffersPtr);
66 66
67 const response = JSON.parse( 67 const responseJstr = exampleModule.Pointer_stringify(responseJson);
68 exampleModule.Pointer_stringify(responseJson)); 68 const response = JSON.parse(responseJstr);
69 69
70 vampipeFreeJson(responseJson); 70 vampipeFreeJson(responseJson);
71 71
72 return response; 72 return response;
73 } 73 }
119 out.duration = wfeature.duration; 119 out.duration = wfeature.duration;
120 } 120 }
121 if (wfeature.label != null) { 121 if (wfeature.label != null) {
122 out.label = wfeature.label; 122 out.label = wfeature.label;
123 } 123 }
124 if (wfeature.b64values != null && wfeature.b64values !== "") { 124 const vv = wfeature.featureValues;
125 out.values = myFromBase64(wfeature.b64values); 125 if (vv != null) {
126 } else if (wfeature.values != null) { 126 if (typeof vv === "string") {
127 out.values = new Float32Array(wfeature.values); 127 out.featureValues = myFromBase64(vv);
128 } else {
129 out.featureValues = new Float32Array(vv);
130 }
128 } 131 }
129 return out; 132 return out;
130 } 133 }
131 134
132 function convertWireFeatureList(wfeatures) { 135 function convertWireFeatureList(wfeatures) {
158 161
159 const makeBlock = (n => { 162 const makeBlock = (n => {
160 return { 163 return {
161 timestamp : frame2timestamp(n * blockSize, rate), 164 timestamp : frame2timestamp(n * blockSize, rate),
162 inputBuffers : [ 165 inputBuffers : [
163 { values : new Float32Array( 166 new Float32Array(Array.from(Array(blockSize).keys(),
164 Array.from(Array(blockSize).keys(), 167 n => n / blockSize))
165 n => n / blockSize)) }
166 ], 168 ],
167 } 169 }
168 }); 170 });
169 171
170 const blocks = Array.from(Array(nblocks).keys(), makeBlock); 172 const blocks = Array.from(Array(nblocks).keys(), makeBlock);
180 result = processRaw({ 182 result = processRaw({
181 "pluginHandle": 1, 183 "pluginHandle": 1,
182 "processInput": blocks[i] 184 "processInput": blocks[i]
183 }); 185 });
184 let features = responseToFeatureSet(result); 186 let features = responseToFeatureSet(result);
185 let count = features.get("counts")[0].values[0]; 187 let count = features.get("counts")[0].featureValues[0];
186 total += count; 188 total += count;
187 } 189 }
188 190
189 let finish = (new Date()).getTime(); 191 let finish = (new Date()).getTime();
190 comment("Finish at " + finish + " for a time of " + (finish - start) + " ms"); 192 comment("Finish at " + finish + " for a time of " + (finish - start) + " ms");
202 result = processRaw({ 204 result = processRaw({
203 "pluginHandle": 1, 205 "pluginHandle": 1,
204 "processInput": blocks[i] 206 "processInput": blocks[i]
205 }); 207 });
206 let features = responseToFeatureSet(result); 208 let features = responseToFeatureSet(result);
207 let count = features.get("counts")[0].values[0]; 209 let count = features.get("counts")[0].featureValues[0];
208 total += count; 210 total += count;
209 } 211 }
210 212
211 finish = (new Date()).getTime(); 213 finish = (new Date()).getTime();
212 comment("Finish at " + finish + " for a time of " + (finish - start) + " ms"); 214 comment("Finish at " + finish + " for a time of " + (finish - start) + " ms");