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 < 2000 bytes of data, as that is the max for the browsertest. | |
|
pwnall
2016/12/01 01:12:13
Instead of having a comment here, how about adding
| |
| 7 | |
| 8 var numRawBlobs = 100; | |
|
pwnall
2016/12/01 01:12:13
Can you please document the test parameters?
dmurph
2016/12/01 20:40:58
Done.
| |
| 9 var numSlices = 100; | |
| 10 var numSandwiches = 100; | |
| 11 | |
| 12 var test = function() { | |
| 13 var blobs = []; | |
| 14 | |
| 15 // This should cause us to go straight to file. | |
| 16 var veryLargeDataSize = 190; | |
|
pwnall
2016/12/01 01:12:13
How about naming the buffers according to the goal
dmurph
2016/12/01 20:40:59
Done.
| |
| 17 var veryLargeData = new Uint8Array(veryLargeDataSize); | |
| 18 veryLargeData.fill(2); | |
|
pwnall
2016/12/01 01:12:13
Any reason for these values? Are they set up so th
dmurph
2016/12/01 20:40:59
Done.
| |
| 19 veryLargeData.fill(8, veryLargeDataSize / 2); | |
| 20 | |
| 21 // This should require multiple shared memory segments. | |
| 22 var largeDataSize = 15; | |
|
pwnall
2016/12/01 01:12:13
sharedMemoryData{Size}?
dmurph
2016/12/01 20:40:59
Done.
| |
| 23 var largeData = new Uint8Array(largeDataSize); | |
| 24 largeData.fill(4); | |
| 25 largeData.fill(5, largeDataSize / 2); | |
| 26 | |
| 27 // This should fit in IPC. | |
| 28 var smallDataSize = 2; | |
|
pwnall
2016/12/01 01:12:13
ipcData{Size}?
dmurph
2016/12/01 20:40:59
Done.
| |
| 29 var smallData = new Uint8Array(2); | |
| 30 smallData[1] = 2; | |
| 31 | |
| 32 var i = 0; | |
|
pwnall
2016/12/01 01:12:13
I think you can use let i inside loops so i is blo
dmurph
2016/12/01 20:40:59
Done.
| |
| 33 var blob; | |
| 34 for (i = 0; i < numRawBlobs; ++i) { | |
| 35 var data = []; | |
| 36 if (i % 5 == 0) { | |
| 37 data.push(largeData); | |
| 38 } else if (i % 13 == 0) { | |
| 39 data.push(veryLargeData); | |
| 40 } else { | |
| 41 smallData[0] = i; | |
| 42 data.push(smallData); | |
| 43 } | |
| 44 blob = new Blob(data, { content_type: "text/plain" }); | |
| 45 blobs.push(blob); | |
| 46 } | |
| 47 | |
| 48 for (i = 0; i < numSlices; ++i) { | |
| 49 var originalSize; | |
| 50 var rawIndex = i % numRawBlobs; | |
| 51 if (rawIndex % 5 == 0) { | |
| 52 originalSize = largeDataSize; | |
| 53 } else if (rawIndex % 13 == 0) { | |
| 54 originalSize = veryLargeDataSize; | |
| 55 } else { | |
| 56 originalSize = smallDataSize; | |
| 57 } | |
| 58 if (i % 2 == 0) { | |
| 59 blob = blobs[i].slice(originalSize / 2); | |
| 60 } else { | |
| 61 blob = blobs[i].slice(0, originalSize / 2); | |
| 62 } | |
| 63 blobs.push(blob); | |
| 64 } | |
| 65 | |
| 66 for (i = 0; i < numSandwiches; ++i) { | |
| 67 var sliceIndex = numRawBlobs + (i % numSlices); | |
| 68 blobs.push(new Blob(['pre', blobs[sliceIndex], 'post'], { content_type: "tex t/plain" })); | |
| 69 } | |
| 70 | |
| 71 var getBytes = function(string) { | |
| 72 var bytes = []; | |
| 73 for (var i = 0; i < string.length; ++i) { | |
| 74 bytes.push(string.charCodeAt(i)); | |
| 75 } | |
| 76 return bytes; | |
| 77 } | |
| 78 | |
| 79 var i = 0; | |
|
pwnall
2016/12/01 01:12:13
If you don't want to switch to let, you should at
| |
| 80 var numRead = 0; | |
| 81 for (; i < blobs.length; i++) { | |
| 82 var genReader = function(index, d) { | |
|
pwnall
2016/12/01 01:12:13
This seems to be defined so you can capture i into
dmurph
2016/12/01 20:40:58
isn't that what I do?
| |
| 83 var reader = new FileReader(); | |
| 84 reader.onerror = function(e) { | |
| 85 fail('Error when reading blob ' + index + ': ' + reader.error); | |
| 86 } | |
| 87 reader.onloadend = function(e) { | |
| 88 if (reader.error) { | |
| 89 fail('Error when reading blob ' + index + ': ' + reader.error); | |
| 90 return; | |
| 91 } | |
| 92 numRead++; | |
| 93 debug('Finished reading blob ' + index); | |
| 94 shouldBe('event.target.result.byteLength', d.length + ''); | |
| 95 shouldBe('new Uint8Array(event.target.result)', | |
| 96 '[' + d + ']'); | |
| 97 if (numRead >= blobs.length) { | |
| 98 done('Done!'); | |
| 99 } | |
| 100 } | |
| 101 return reader; | |
| 102 } | |
| 103 var data; | |
|
pwnall
2016/12/01 01:12:13
Can you please define these closer to where you as
dmurph
2016/12/01 20:40:58
Done.
| |
| 104 var origData; | |
| 105 var originalSize; | |
| 106 var slicedData; | |
| 107 var slicedDataSize; | |
| 108 var sandwichedData; | |
| 109 var sandwichedDataSize; | |
| 110 | |
| 111 var rawIndex = i % numRawBlobs; | |
| 112 var sliceIndex = i % numSlices; | |
| 113 | |
| 114 if (rawIndex % 5 == 0) { | |
| 115 originalSize = largeDataSize; | |
| 116 origData = largeData; | |
|
pwnall
2016/12/01 01:12:13
Why originalSize but origData?
dmurph
2016/12/01 20:40:59
Done.
| |
| 117 } else if (rawIndex % 13 == 0) { | |
| 118 originalSize = veryLargeDataSize; | |
| 119 origData = veryLargeData; | |
| 120 } else { | |
| 121 originalSize = smallDataSize; | |
| 122 origData = new Uint8Array(smallDataSize); | |
| 123 origData[0] = rawIndex; | |
| 124 origData[1] = 2; | |
| 125 } | |
| 126 | |
| 127 if (sliceIndex % 2 == 0) { | |
| 128 slicedData = origData.slice(originalSize / 2); | |
| 129 } else { | |
| 130 slicedData = origData.slice(0, originalSize / 2); | |
| 131 } | |
| 132 slicedDataSize = slicedData.length; | |
| 133 | |
| 134 sandwichedDataSize = 7 + slicedDataSize; | |
| 135 var sandwichedData = new Uint8Array(sandwichedDataSize); | |
| 136 sandwichedData.set(getBytes("pre"), 0); | |
| 137 sandwichedData.set(slicedData, 3); | |
| 138 sandwichedData.set(getBytes("post"), 3 + slicedDataSize); | |
| 139 | |
| 140 var data; | |
| 141 if (i < numRawBlobs) { | |
| 142 data = origData; | |
| 143 } else if (i < numRawBlobs + numSlices) { | |
| 144 data = slicedData; | |
| 145 } else { | |
| 146 data = sandwichedData; | |
| 147 } | |
| 148 genReader(i, data).readAsArrayBuffer(blobs[i]); | |
| 149 } | |
| 150 }; | |
| 151 </script> | |
| 152 </head> | |
| 153 <body onLoad="test()"> | |
| 154 <div id="status">Starting...<br/></div> | |
| 155 </body> | |
| 156 </html> | |
| OLD | NEW |