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 MAX_BYTES = 3000; | |
8 | |
9 // Number of blobs constructed with raw data. | |
10 var NUM_RAW_BLOBS = 100; | |
11 // Number of blobs we create by slicing the raw data blobs. | |
12 var NUM_SLICES = 100; | |
13 // Number of blobs we create by sandwiching sliced blobs in between new data. | |
14 var NUM_SANDWICHES = 100; | |
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 < NUM_RAW_BLOBS; ++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 < NUM_SLICES; ++i) { | |
59 let origSize; | |
60 let origData; | |
61 let rawIndex = i % NUM_RAW_BLOBS; | |
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 < NUM_SANDWICHES; ++i) { | |
94 let sliceIndex = NUM_RAW_BLOBS + (i % NUM_SLICES); | |
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 <= MAX_BYTES"); | |
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 |