Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 <html> | |
| 2 <head> | |
| 3 <title>Blob Creation & Slicing</title> | |
| 4 <script type="text/javascript" src="common.js"></script> | |
| 5 <script type="text/javascript"> | |
| 6 // We create < 3000 bytes of data, as that is the max for the browsertest. | |
| 7 var maxBytes = 3000; | |
| 8 | |
| 9 // Number of blobs constructed with raw data. | |
| 10 var numRawBlobs = 100; | |
| 11 // Number of blobs we create by slicing the raw data blobs. | |
| 12 var numSlices = 100; | |
| 13 // Number of blobs we create by sandwiching sliced blobs in between new data. | |
| 14 var numSandwiches = 100; | |
|
kinuko
2016/12/02 08:52:32
should we / could we use CONSTANT_NAME style for c
dmurph
2016/12/02 21:53:07
Done.
| |
| 15 var totalSize = 0; | |
| 16 | |
| 17 var generatePsuedoRandomUint8Array = function(length) { | |
| 18 var array = new Uint8Array(length); | |
| 19 for (let i = 0; i < length; ++i) { | |
| 20 array[i] = (17 + 23 * i) & 0xFF; | |
| 21 } | |
| 22 return array; | |
| 23 } | |
| 24 | |
| 25 var test = function() { | |
| 26 var blobs = []; | |
| 27 | |
| 28 // This should cause us to go straight to file. | |
| 29 var savedToDiskDataSize = 190; | |
| 30 var savedToDiskData = generatePsuedoRandomUint8Array(savedToDiskDataSize); | |
| 31 | |
| 32 // This should require multiple shared memory segments. | |
| 33 var sharedMemoryDataSize = 15; | |
| 34 var sharedMemoryData = generatePsuedoRandomUint8Array(sharedMemoryDataSize); | |
| 35 | |
| 36 var sandwichDataSize = 7; | |
| 37 | |
| 38 // This should fit in IPC. | |
| 39 var ipcDataSize = 2; | |
| 40 var ipcData = generatePsuedoRandomUint8Array(ipcDataSize); | |
| 41 | |
| 42 var expectedBlobData = []; | |
| 43 for (let i = 0; i < numRawBlobs; ++i) { | |
| 44 let data = []; | |
| 45 if (i % 5 == 0) { | |
| 46 data.push(sharedMemoryData); | |
| 47 } else if (i % 13 == 0) { | |
| 48 data.push(savedToDiskData); | |
| 49 } else { | |
| 50 data.push(ipcData); | |
| 51 } | |
| 52 expectedBlobData.push(data[data.length - 1]); | |
| 53 let blob = new Blob(data, { content_type: "text/plain" }); | |
| 54 blobs.push(blob); | |
| 55 totalSize += blob.size; | |
| 56 } | |
| 57 | |
| 58 for (let i = 0; i < numSlices; ++i) { | |
| 59 let origSize; | |
| 60 let origData; | |
| 61 let rawIndex = i % numRawBlobs; | |
| 62 if (rawIndex % 5 == 0) { | |
| 63 origSize = sharedMemoryDataSize; | |
| 64 origData = sharedMemoryData; | |
| 65 } else if (rawIndex % 13 == 0) { | |
| 66 origSize = savedToDiskDataSize; | |
| 67 origData = savedToDiskData; | |
| 68 } else { | |
| 69 origSize = ipcDataSize; | |
| 70 origData = ipcData; | |
| 71 } | |
| 72 let blob; | |
| 73 let expectedData; | |
| 74 if (i % 2 == 0) { | |
| 75 blob = blobs[i].slice(origSize / 2); | |
| 76 expectedData = origData.slice(origSize / 2); | |
| 77 } else { | |
| 78 blob = blobs[i].slice(0, origSize / 2); | |
| 79 expectedData = origData.slice(0, origSize / 2); | |
| 80 } | |
| 81 expectedBlobData.push(expectedData); | |
| 82 blobs.push(blob); | |
| 83 } | |
| 84 | |
| 85 var getBytes = function(string) { | |
| 86 var bytes = []; | |
| 87 for (let i = 0; i < string.length; ++i) { | |
| 88 bytes.push(string.charCodeAt(i)); | |
| 89 } | |
| 90 return bytes; | |
| 91 } | |
| 92 | |
| 93 for (let i = 0; i < numSandwiches; ++i) { | |
| 94 let sliceIndex = numRawBlobs + (i % numSlices); | |
| 95 let slicedDataSize = expectedBlobData[sliceIndex].length; | |
| 96 blobs.push(new Blob(['pre', blobs[sliceIndex], 'post'], { content_type: "tex t/plain" })); | |
| 97 totalSize += sandwichDataSize; | |
| 98 | |
| 99 let expectedData = new Uint8Array(sandwichDataSize + slicedDataSize); | |
| 100 expectedData.set(getBytes("pre"), 0); | |
| 101 expectedData.set(expectedBlobData[sliceIndex], 3); | |
| 102 expectedData.set(getBytes("post"), 3 + slicedDataSize); | |
| 103 expectedBlobData.push(expectedData); | |
| 104 } | |
| 105 shouldBeTrue("totalSize <= maxBytes"); | |
| 106 | |
| 107 var numRead = 0; | |
| 108 for (let i = 0; i < blobs.length; i++) { | |
| 109 (function(index, d) { | |
| 110 var reader = new FileReader(); | |
| 111 reader.onloadend = function(e) { | |
| 112 if (reader.error) { | |
| 113 fail('Error when reading blob ' + index + ': ' + reader.error); | |
| 114 return; | |
| 115 } | |
| 116 numRead++; | |
| 117 debug('Finished reading blob ' + index); | |
| 118 shouldBe('event.target.result.byteLength', d.length + ''); | |
| 119 shouldBe('new Uint8Array(event.target.result)', | |
| 120 '[' + d + ']'); | |
| 121 if (numRead >= blobs.length) { | |
| 122 done('Done!'); | |
| 123 } | |
| 124 } | |
| 125 return reader; | |
| 126 })(i, expectedBlobData[i]).readAsArrayBuffer(blobs[i]); | |
| 127 } | |
| 128 }; | |
| 129 </script> | |
| 130 </head> | |
| 131 <body onLoad="test()"> | |
| 132 <div id="status">Starting...<br/></div> | |
| 133 </body> | |
| 134 </html> | |
| OLD | NEW |