REGRESSION (r129738): Calendar picker is too wide when the input is rtl
[WebKit-https.git] / ManualTests / typed-array-memory.html
1 <html>
2 <head>
3 <title>ArrayBuffer External Memory test</title>
4 <script>
5
6 var log;
7 function print(message, color)
8 {
9     var paragraph = document.createElement("div");
10     paragraph.appendChild(document.createTextNode(message));
11     paragraph.style.fontFamily = "monospace";
12     if (color)
13         paragraph.style.color = color;
14     log.appendChild(paragraph);
15 }
16
17 function pass(msg)
18 {
19     print("PASS: " + msg, "green");
20 }
21
22 function fail(msg)
23 {
24     print("FAIL: " + msg, "red");
25 }
26
27 var KB = 1024;
28 var MB = KB * KB;
29 var noise = KB;
30
31 function externalMemory() {
32     return getV8Statistics().amount_of_external_allocated_memory;
33 }
34
35 function collectGarbage() {
36     for (var i = 0; i < 10; i++) gc();
37 }
38
39 function allocationsThatIncreaseExternalMemory() {
40     function test(expression) {
41         var before = externalMemory();
42         (function () { eval(expression); }) ();
43         var now = externalMemory();
44         if (now < before + MB - noise) {
45             fail(expression + " did not increase the amount of external memory (" +
46                   before + ", " + now + ").");
47         } else {
48             pass(expression + " increased the amount of external memory.");
49         }
50         collectGarbage();
51         var after = externalMemory();
52         if (after > now + noise) {
53             fail("Garbage collection after " + expression +
54                  " did not return the amount of external memory to the initial value (" +
55                  now + ", " + after + ").");
56         } else {
57             pass("Garbage collection after " + expression +
58                  " returned the amount of external memory to the initial value.");
59         }
60     }
61
62     test("(new ArrayBuffer(MB))");
63     test("(new Float32Array(MB))");
64     test("(new Float64Array(MB))");
65     test("(new Int8Array(MB))");
66     test("(new Int16Array(MB))");
67     test("(new Int32Array(MB))");
68     test("(new Uint8Array(MB))");
69     test("(new Uint16Array(MB))");
70     test("(new Uint32Array(MB))");
71     var largeJSArray = [];
72     for (var i = 0; i < MB; i++) largeJSArray.push(i);
73     test("(new Float32Array(largeJSArray))");
74     test("(new Float64Array(largeJSArray))");
75     test("(new Int8Array(largeJSArray))");
76     test("(new Int16Array(largeJSArray))");
77     test("(new Int32Array(largeJSArray))");
78     test("(new Uint8Array(largeJSArray))");
79     test("(new Uint16Array(largeJSArray))");
80     test("(new Uint32Array(largeJSArray))");
81     var int8Array = new Int8Array(MB);
82     test("(new  Float32Array(int8Array))");
83     test("(new  Float64Array(int8Array))");
84     test("(new  Int8Array(int8Array))");
85     test("(new  Int16Array(int8Array))");
86     test("(new  Int32Array(int8Array))");
87     test("(new  Uint8Array(int8Array))");
88     test("(new  Uint16Array(int8Array))");
89     test("(new  Uint32Array(int8Array))");
90 }
91
92
93 function allocationsThatDoNotChangeExternalMemory() {
94     function test(expression) {
95         var before = externalMemory();
96         (function () { eval(expression); }) ();
97         var now = externalMemory();
98         if (now > before + noise) {
99             fail(expression + " increased the amount of external memory (" + before + ", " + now + ").");
100         } else {
101             pass(expression + " did not increase the amount of external memory.");
102         }
103         collectGarbage();
104         var after = externalMemory();
105         if (after < now - noise) {
106             fail("Garbage collection after " + expression + " decreased the amount of external memory (" +
107                  now + ", " + after + ").");
108         } else {
109             pass("Garbage collection after " + expression +
110                  " did not decrease the amount of external memory.");
111         }
112     }
113     var arrayBuffer = new ArrayBuffer(MB);
114     test("(new  Float32Array(arrayBuffer))");
115     test("(new  Float64Array(arrayBuffer))");
116     test("(new  Int8Array(arrayBuffer))");
117     test("(new  Int16Array(arrayBuffer))");
118     test("(new  Int32Array(arrayBuffer))");
119     test("(new  Uint8Array(arrayBuffer))");
120     test("(new  Uint16Array(arrayBuffer))");
121     test("(new  Uint32Array(arrayBuffer))");
122     var int8Array = new Int8Array(MB);
123     test("(new  Float32Array(int8Array.buffer))");
124     test("(new  Float64Array(int8Array.buffer))");
125     test("(new  Int8Array(int8Array.buffer))");
126     test("(new  Int16Array(int8Array.buffer))");
127     test("(new  Int32Array(int8Array.buffer))");
128     test("(new  Uint8Array(int8Array.buffer))");
129     test("(new  Uint16Array(int8Array.buffer))");
130     test("(new  Uint32Array(int8Array.buffer))");
131 }
132
133
134 function transfersThatDecreaseExternalMemory() {
135     var workerSource =
136 "function externalMemory() {\n" +
137 "    return getV8Statistics().amount_of_external_allocated_memory;\n" +
138 "}\n" +
139 "function collectGarbage() {\n" +
140 "    for (var i = 0; i < 10; i++) gc();\n" +
141 "}\n" +
142 "var before = externalMemory();\n" +
143 "self.onmessage = function(e) {\n" +
144 "    var now = externalMemory();\n" +
145 "    e.data = null;\n" +
146 "    collectGarbage();\n" +
147 "    var after = externalMemory();\n" +
148 "    self.postMessage(before + ' ' + now + ' ' + after);\n" +
149 "}\n";
150
151     var blob = new Blob([workerSource]);
152     var worker = new Worker(window.webkitURL.createObjectURL(blob));
153     worker.onmessage = function (e) {
154         print("message from worker: " + e.data, "blue");
155     }
156     function test(expression)
157     {
158         var buffer = eval(expression);
159         try {
160             var before = externalMemory();
161             worker.webkitPostMessage(buffer, [buffer]);
162             var now = externalMemory();
163             if (now > before - MB + noise) {
164                 fail("Transfer of " + expression + " did not decrease the amount of external memory (" +
165                      before + ", " + now + ").");
166             } else {
167                 pass("Transfer of " + expression + " decreased the amount of external memory.");
168             }
169             collectGarbage();
170             var after = externalMemory();
171             if (after < now - noise) {
172                 fail("Garbage collection after transfer of " + expression +
173                      " decreased the amount of external memory (" + now + ", " + after + ").");
174             } else {
175                 pass("Garbage collection after transfer of " + expression +
176                      " did not decrease the amount of external memory.");
177             }
178         } catch (e) {
179             fail("Transfer of " + name + ": could not webkitPostMessage: " + e);
180             return false;
181         }
182         return true;
183     }
184     test("(new ArrayBuffer(MB))");
185     test("(new Float32Array(MB)).buffer");
186     test("(new Float64Array(MB)).buffer");
187     test("(new Int8Array(MB)).buffer");
188     test("(new Int16Array(MB)).buffer");
189     test("(new Int32Array(MB)).buffer");
190     test("(new Uint8Array(MB)).buffer");
191     test("(new Uint16Array(MB)).buffer");
192     test("(new Uint32Array(MB)).buffer");
193 }
194
195
196 function runAll() {
197     log = document.getElementById("log1");
198     if (typeof gc == "undefined" || typeof getV8Statistics == "undefined") {
199         print("Run chrome browser with --js-flags='--expose_gc --track_gc_object_stats'", "red");
200     } else {
201          allocationsThatIncreaseExternalMemory();
202          collectGarbage();
203          allocationsThatDoNotChangeExternalMemory();
204          collectGarbage();
205          log = document.getElementById("log2");
206          transfersThatDecreaseExternalMemory();
207          collectGarbage();
208     }
209 }
210
211 </script>
212 </head>
213 <body onload="runAll()">
214 <p>This test checks that allocation and deallocation of typed arrays correctly
215 adjusts the amount of external memory in V8.</p>
216 <div id='log1'></div>
217 <p>This test checks that transfer of an array buffer to worker decreases amount of
218 external memory in the main V8 isolate.</p>
219 <div id='log2'></div>
220 </body>
221 </html>