| OLD | NEW |
| (Empty) | |
| 1 var NUMERIC_SORT = function(a,b){ return a-b; }; |
| 2 |
| 3 var fs = require('fs'); |
| 4 var path = require('path'); |
| 5 |
| 6 var jsBase = __dirname + '/../js'; |
| 7 var un = require(jsBase + '/unrequire'); |
| 8 un.require.config({ baseUrl: jsBase }); |
| 9 |
| 10 var dataStructure = {}; |
| 11 |
| 12 var basicDataStructure = {}; |
| 13 |
| 14 var fileCount = 0; |
| 15 |
| 16 var THING = 'sprites'; |
| 17 var PARAM = 'image'; |
| 18 |
| 19 var RESULTS_DIR = path.join(__dirname, '..', 'results'); |
| 20 var INPUT_DIR = path.join(RESULTS_DIR, 'raw'); |
| 21 var OUTPUT_DIR = path.join(RESULTS_DIR); |
| 22 |
| 23 un.require( ['util/report'], function(report){ |
| 24 fs.readdir( INPUT_DIR, function(err, files){ |
| 25 if( err ){ |
| 26 throw err; |
| 27 } |
| 28 var toProcess = files.filter( function(filename){ |
| 29 return filename.match(/\.json$/); |
| 30 }); |
| 31 |
| 32 fileCount = toProcess.length; |
| 33 |
| 34 toProcess.forEach( function(filename){ |
| 35 fs.readFile(path.join(INPUT_DIR, filename), 'utf8', func
tion (err, json) { |
| 36 if( err ){ |
| 37 throw err; |
| 38 } |
| 39 var data = JSON.parse(json); |
| 40 var name = data.userData.agentMetadata.name; |
| 41 var browser = data.userData.agentMetadata.browse
r; |
| 42 var userAgent = data.userData.agentMetadata.user
Agent; |
| 43 var type = data.userData.agentMetadata.type; |
| 44 var combo = type + "-" + browser; |
| 45 |
| 46 if(!dataStructure[combo]){ |
| 47 dataStructure[combo] = [ |
| 48 [], |
| 49 [type,browser], |
| 50 [] |
| 51 ]; |
| 52 } |
| 53 |
| 54 var row = [name]; |
| 55 var columnLabels = [""]; |
| 56 Object.keys(data.userData.results[THING][PARAM])
.sort().forEach( function(key){ |
| 57 var spriteResults = data.userData.result
s[THING][PARAM][key]; |
| 58 |
| 59 // TODO: do others |
| 60 var translate = spriteResults.translate; |
| 61 var vals = [null]; |
| 62 if( translate ){ |
| 63 vals = [translate.objectCount]; |
| 64 |
| 65 if(!basicDataStructure[type]){ |
| 66 basicDataStructure[type]
= {}; |
| 67 } |
| 68 if(!basicDataStructure[type][bro
wser]){ |
| 69 basicDataStructure[type]
[browser] = {}; |
| 70 } |
| 71 if(!basicDataStructure[type][bro
wser][key]){ |
| 72 basicDataStructure[type]
[browser][key] = {}; |
| 73 } |
| 74 if(!basicDataStructure[type][bro
wser][key][name]){ |
| 75 basicDataStructure[type]
[browser][key][name] = {}; |
| 76 } |
| 77 basicDataStructure[type][browser
][key][name] = translate.rawData.map( function(tuple){ |
| 78 return [tuple[0], tuple[
1].js, tuple[1].fps]; |
| 79 }); |
| 80 } |
| 81 |
| 82 columnLabels = columnLabels.concat( key
); |
| 83 row = row.concat( vals ); |
| 84 }); |
| 85 |
| 86 dataStructure[combo][2] = columnLabels; |
| 87 dataStructure[combo].push( row ); |
| 88 |
| 89 fileCount -= 1; |
| 90 if( fileCount === 0 ){ |
| 91 foo(); |
| 92 bar(); |
| 93 } |
| 94 }); |
| 95 }); |
| 96 }); |
| 97 |
| 98 function foo(){ |
| 99 var toSave = []; |
| 100 var roundUp = [[], ["","best of best device","average of each de
vice's best","best of worst device"]]; |
| 101 Object.keys(dataStructure).forEach( function(combo){ |
| 102 var rows = dataStructure[combo]; |
| 103 var averages = ['averages']; |
| 104 for( var i = 1; i < rows[2].length; i++ ){ |
| 105 var sum = 0; |
| 106 var legitCount = 0; |
| 107 for( var j = 3; j < rows.length; j++ ){ |
| 108 var temp = rows[j][i]; |
| 109 if( temp !== null ){ |
| 110 legitCount += 1; |
| 111 sum += temp; |
| 112 } |
| 113 } |
| 114 var avg = sum / legitCount; |
| 115 averages[i] = avg; |
| 116 } |
| 117 |
| 118 var bestTheWorstPhoneCanDo = Infinity; |
| 119 var bestTheBestPhoneCanDo = -Infinity; |
| 120 var averageOfEachBestTechnique = 0; |
| 121 var phoneCount = 0; |
| 122 for( var j = 3; j < rows.length; j++ ){ |
| 123 phoneCount += 1; |
| 124 var maxForPhone = -Infinity; |
| 125 for( var i = 1; i < rows[2].length; i++ ){ |
| 126 var temp = rows[j][i]; |
| 127 if( temp !== null ){ |
| 128 maxForPhone = Math.max( maxForPh
one, temp ); |
| 129 } |
| 130 } |
| 131 |
| 132 bestTheWorstPhoneCanDo = Math.min( bestTheWorstP
honeCanDo, maxForPhone ); |
| 133 bestTheBestPhoneCanDo = Math.max( bestTheBestPho
neCanDo, maxForPhone ); |
| 134 averageOfEachBestTechnique += maxForPhone; |
| 135 } |
| 136 averageOfEachBestTechnique = (averageOfEachBestTechnique
/ phoneCount); |
| 137 |
| 138 toSave = toSave.concat( rows, [averages] ); |
| 139 roundUp.push( [combo, bestTheBestPhoneCanDo, averageOfEa
chBestTechnique, bestTheWorstPhoneCanDo] ); |
| 140 }); |
| 141 console.log( roundUp ); |
| 142 toSave = toSave.concat( roundUp ); |
| 143 |
| 144 fs.writeFile( path.join(OUTPUT_DIR, THING + "-" + PARAM + ".csv"
), report.csvByTable(toSave), 'utf8', function(err){ |
| 145 if(err) throw err; |
| 146 console.log("saved!"); |
| 147 } ); |
| 148 } |
| 149 |
| 150 function bar(){ |
| 151 var output = []; |
| 152 Object.keys( basicDataStructure ).sort().forEach( function(type)
{ |
| 153 output.push( [type] ); |
| 154 Object.keys( basicDataStructure[type] ).sort().forEach(
function(browser){ |
| 155 output.push( ["", browser] ); |
| 156 Object.keys( basicDataStructure[type][browser] )
.sort().forEach( function(techniqueName){ |
| 157 output.push( ["", "", techniqueName] ); |
| 158 |
| 159 var uniqueXValues = []; |
| 160 |
| 161 Object.keys( basicDataStructure[type][br
owser][techniqueName] ).sort().forEach( function(deviceName){ |
| 162 var data = basicDataStructure[ty
pe][browser][techniqueName][deviceName]; |
| 163 |
| 164 data.forEach( function(tuple){ |
| 165 var objectCount = tuple[
0]; |
| 166 if( uniqueXValues.indexO
f(objectCount) === -1 ){ |
| 167 uniqueXValues.pu
sh( objectCount ); |
| 168 } |
| 169 }); |
| 170 }); |
| 171 |
| 172 uniqueXValues.sort( NUMERIC_SORT ); |
| 173 |
| 174 output.push( ["", "", "", ""].concat( un
iqueXValues ) ); |
| 175 |
| 176 Object.keys( basicDataStructure[type][br
owser][techniqueName] ).sort().forEach( function(deviceName){ |
| 177 var data = basicDataStructure[ty
pe][browser][techniqueName][deviceName]; |
| 178 |
| 179 var yValues = uniqueXValues.map(
function(numObjects){ |
| 180 var fps = fpsForObjectCo
unt(data, numObjects); |
| 181 if( fps === null ){ |
| 182 return ''; |
| 183 }else{ |
| 184 return fps; |
| 185 } |
| 186 }); |
| 187 |
| 188 output.push( ["", "", "", device
Name].concat( yValues ) ); |
| 189 }); |
| 190 }); |
| 191 }); |
| 192 }); |
| 193 |
| 194 |
| 195 fs.writeFile( path.join(OUTPUT_DIR, THING + "-" + PARAM + "-RAW.
csv"), report.csvByTable(output), 'utf8', function(err){ |
| 196 if(err) throw err; |
| 197 console.log("saved RAW!"); |
| 198 } ); |
| 199 } |
| 200 }); |
| 201 |
| 202 function fpsForObjectCount( data, objectCount ){ |
| 203 for( var i = 0; i < data.length; i++ ){ |
| 204 if( data[i][0] === objectCount ){ |
| 205 return data[i][2]; |
| 206 } |
| 207 } |
| 208 return null; |
| 209 } |
| OLD | NEW |