Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1106)

Side by Side Diff: content/test/data/blob_storage/blob_creation_and_slicing.html

Issue 2516713002: [BlobStorage] Implementing disk. (Closed)
Patch Set: file flushing, stack track on reader error Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 23:28:49 2000 or 3000?
dmurph 2016/12/02 01:11:33 Done.
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;
15 var totalSize = 0;
16
17 var fillPsueodoRandom = function(array) {
18 for (let i = 0; i < array.length; ++i) {
19 array[i] = (17 + 23 * i) & 0xFF;
20 }
21 }
22
23 var test = function() {
24 var blobs = [];
25
26 // This should cause us to go straight to file.
27 var savedToDiskDataSize = 190;
28 var savedToDiskData = new Uint8Array(savedToDiskDataSize);
pwnall 2016/12/01 23:28:49 How about moving the array allocation into the hel
dmurph 2016/12/02 01:11:34 Done.
29 fillPsueodoRandom(savedToDiskData);
30
31 // This should require multiple shared memory segments.
32 var sharedMemoryDataSize = 15;
33 var sharedMemoryData = new Uint8Array(sharedMemoryDataSize);
34 fillPsueodoRandom(sharedMemoryData);
35
36 var sandwichDataSize = 7;
37
38 // This should fit in IPC.
39 var ipcDataSize = 2;
40 var ipcData = new Uint8Array(2);
41 fillPsueodoRandom(ipcData);
42
43 for (let i = 0; i < numRawBlobs; ++i) {
44 var 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 let blob = new Blob(data, { content_type: "text/plain" });
53 blobs.push(blob);
54 totalSize += blob.size;
55 }
56
57 for (let i = 0; i < numSlices; ++i) {
58 var origSize;
59 var rawIndex = i % numRawBlobs;
60 if (rawIndex % 5 == 0) {
61 origSize = sharedMemoryDataSize;
62 } else if (rawIndex % 13 == 0) {
63 origSize = savedToDiskDataSize;
64 } else {
65 origSize = ipcDataSize;
66 }
67 let blob;
68 if (i % 2 == 0) {
69 blob = blobs[i].slice(origSize / 2);
70 } else {
71 blob = blobs[i].slice(0, origSize / 2);
72 }
73 blobs.push(blob);
74 }
75
76 for (let i = 0; i < numSandwiches; ++i) {
77 var sliceIndex = numRawBlobs + (i % numSlices);
78 blobs.push(new Blob(['pre', blobs[sliceIndex], 'post'], { content_type: "tex t/plain" }));
79 totalSize += sandwichDataSize;
80 }
81 shouldBeTrue("totalSize <= maxBytes");
82
83 var getBytes = function(string) {
84 var bytes = [];
85 for (let i = 0; i < string.length; ++i) {
86 bytes.push(string.charCodeAt(i));
87 }
88 return bytes;
89 }
90
91 var numRead = 0;
92 for (let i = 0; i < blobs.length; i++) {
93 var genReader = function(index, d) {
94 var reader = new FileReader();
95 reader.onloadend = function(e) {
96 if (reader.error) {
97 fail('Error when reading blob ' + index + ': ' + reader.error);
98 return;
99 }
100 numRead++;
101 debug('Finished reading blob ' + index);
102 shouldBe('event.target.result.byteLength', d.length + '');
103 shouldBe('new Uint8Array(event.target.result)',
104 '[' + d + ']');
105 if (numRead >= blobs.length) {
106 done('Done!');
107 }
108 }
109 return reader;
110 }
111
112 var rawIndex = i % numRawBlobs;
113 var sliceIndex = i % numSlices;
114
115 var origData;
pwnall 2016/12/01 23:28:49 The logic here seems to duplicate some of the logi
dmurph 2016/12/02 01:11:34 Done.
116 var origSize;
117 if (rawIndex % 5 == 0) {
118 origSize = sharedMemoryDataSize;
119 origData = sharedMemoryData;
120 } else if (rawIndex % 13 == 0) {
121 origSize = savedToDiskDataSize;
122 origData = savedToDiskData;
123 } else {
124 origSize = ipcDataSize;
125 origData = ipcData;
126 }
127
128 var slicedData;
129 var slicedDataSize;
130 if (sliceIndex % 2 == 0) {
131 slicedData = origData.slice(origSize / 2);
132 } else {
133 slicedData = origData.slice(0, origSize / 2);
134 }
135 slicedDataSize = slicedData.length;
136
137 var sandwichedDataSize = sandwichDataSize + slicedDataSize;
138 var sandwichedData = new Uint8Array(sandwichedDataSize);
139 sandwichedData.set(getBytes("pre"), 0);
140 sandwichedData.set(slicedData, 3);
141 sandwichedData.set(getBytes("post"), 3 + slicedDataSize);
142
143 var data;
144 if (i < numRawBlobs) {
pwnall 2016/12/01 23:28:49 If you follow my suggestion above, this whole bloc
dmurph 2016/12/02 01:11:34 Done.
145 data = origData;
146 } else if (i < numRawBlobs + numSlices) {
147 data = slicedData;
148 } else {
149 data = sandwichedData;
150 }
151 genReader(i, data).readAsArrayBuffer(blobs[i]);
152 }
153 };
154 </script>
155 </head>
156 <body onLoad="test()">
157 <div id="status">Starting...<br/></div>
158 </body>
159 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698